Assumess:cseg,es:cseg,cs:cseg,ds:cseg
ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
САНКТ-ПЕТЕРБУРГСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ
Им. проф. М.А. БОНЧ-БРУЕВИЧА
Курсовая работа по дисциплине:
Машинно-зависимые языки программирования
по теме:
"ВВОД-ВЫВОД НА АССЕМБЛЕРЕ (В DOS И LINUX) "
Направление 23100 «Программная инженерия»
Студент группы СП-12
Осипов А.И.
Преподаватель Коробов С.А.
Санкт – Петербург
2013г.
Цель работы
ЦЕЛЬЮ НАПИСАНИЯ КУРСОВОЙ РАБОТЫ ЯВЛЯЕТСЯ:
Реализация целочисленного вычисления, сделанного в лабораторной работе №2(по указанию преподавателя), полностью используя язык Ассемблера для организации корректного ввода-вывода информации:
· исходные данные должны вводиться с проверкой правильности вводимых символов;
· входные данные и результат должны быть проверены на область допустимых значений;
· при наличии ошибки должно быть выдано соответствующее сообщение.
Реализация задачи должна быть выполнена для MSDOS и для Unix.
ПОРЯДОК РАБОТЫ:
· внимательно изучить свой вариант ввода-вывода целочисленной информации применительно к решаемой задаче;
· написать на языке Ассемблера программу ввода исходных данных (с контролем допустимого диапазона), и вывода полученного результата;
· встроить вызов уже разработанного и отлаженного ранее в лабораторной работе ASM-модуля в программу;
Операции ввода с клавиатуры и вывода на экран в DOS приложениях
|
|
Вывод на экран средствами DOS осуществляет 09 функция INT 21HDOS. Номер функции указывается в регистре AH. Адрес выводимой строки в DS:DX. В процессе выполнения операции конец сообщения определяется по oграничителю ($).
Знак ограничителя '$' можно кодировать непосредственно после cимвольной строки (как показано в примере), внутри строки: 'Имя покупателя?$', или в следующем операторе DB '$'. Используя данную операцию, нельзя вывести на экран символ доллара "$". Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак "$" не встретиться в памяти.
Команда LEA загружает адрес области PRMP в регистр DXдля передачи в DOS адреса выводимой информации. Адрес поля PRMP, загружаемый в DX по команде LEA, является oтносительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX (DS:DX).
ВВОД ДАННЫХ С КЛАВИАТУРЫ.
Для ввода с клавиатуры используется функция 0AHINT 21H. Она требует наличия cписка параметров, содержащего поля, которые необходимы при выполнении команды INT.
· должна быть определена максимальная длина вводимого текста;
· должно быть определенное поле, куда команда возвращает действительную длину введенного текста в байтах.
|
|
· должно быть зарезервировано в памяти место для вводимой строки
ПРЕОБРАЗОВАНИЕ СТРОКИ В ЧИСЛО И ЧИСЛА В СТРОКУ.
Данные, вводимые с клавиатуры, имеют ASCII-формат, например, буквы SAM имеют в памяти шестнадцатеричное представление 53414D, цифры 1234 - шест.31323334. Во многих случаях формат алфавитных данных, например, имя человека или описание статьи, не меняется в программе. Но для выполнения арифметических операций над числовыми значениями, такими как шест.31323334, требуется специальная обработка.
ПРЕОБРАЗОВАНИЕ ASCII-ФОРМАТА (СТРОКИ) В ДВОИЧНЫЙ ФОРМАТ (ЧИСЛО).
Для выполнения арифметических операций часто требуется преобразование их в двоичный формат.
Процедура преобразования заключается в следующем:
· Начинают с самого правого байта числа в ASCII-формате и обрабатывают справа налево.
· Удаляют тройки из левых шестнадцатеричных цифр каждого ASCII-байта.
· Умножают ASCII-цифры на 1, 10, 100 (шест.1, A, 64) и т.д.
· Cкладывают результаты
ПРЕОБРАЗОВАНИЕ ДВОИЧНОГО ФОРМАТА В ASCII-ФОРМАТ.
Для того, чтобы напечатать или отобразить на экране pезультат выполнения арифметических операций, необходимо преобразовать его в ASCII-формат. Данная операция включает в себя процесс обратный предыдущему. Вместо умножения используется деление двоичного числа на10 (шест.0A) пока результат не будет меньше 10. Остатки, которые лежат в границах от 0 до 9, образуют число в ASCII формате. В качестве примера рассмотрим преобразование шест.4D2 обратно в десятичный формат:
|
|
Частное | Остаток | |
4D2 : A = | 7B | 4 |
7B : A = | C | 3 |
C : A = | 1 | 2 |
Так как последнее частное 1 меньше, чем шест.A, то операция завершена. Остатки вместе с последним частным образуют результат в ASCII-формате, записываемый справа налево 1234. Все остатки и последнее частное должны записываться в память с тройками, т.е. 31323334.
Программирование в UNUX.
УТИЛИТА MAKE.
Задача утилиты make - автоматически определять, какие файлы проекта были изменены и требуют компиляции, и применять необходимые для этого команды. Хотя примеры применения относятся к использованию утилиты для описания процесса компиляции программ на языке С/С++, утилита может использоваться для описания сценариев обновления любых файлов.
СТРУКТУРА MAKEFILE.
Мakefile состоит из так называемых "правил", имеющих вид:
имя-результата: исходные-имена ...
команды
...
...
|
|
имя-результата - это обычно имя файла, генерируемого программой, например, исполняемый или объектный файл. "Результатом" может быть действие никак не связанное с процессом компиляции, например, clean - очистка.
исходное -имя - это имя файла, используемого на вводе, необходимое, чтобы создать файл с именем-результата.
команда- это действие, выполняемое утилитой make. Правило может включать более одной команды, В начале каждой команды надо вставлять отступ (символ "Tab"). Команда выполняется, если один из файлов в списке исходные-имена изменился. Допускается написание правила содержащего команду без указания зависимостей. Например, можно создать правило "clean", удаляющее объектные файлы проекта, без указания имен.
Итак, правила объясняют как и в каком случае надо пересобирать определённые файлы проекта.
Стандартные правила:
К числу стандартных правил относятся:
· all - основная задача, компиляция программы.
· install - копирует исполняемые коды программ, библиотеки настройки и всё что необходимо для последующего использования
· uninstall - удаляет компоненты программы из системы
· clean- удаляет из директории проекта все временные и вспомогательные файлы.
Пример makefile:
Ниже приводится простой пример (номера строк добавлены для ясности).
# Создать исполняемый файл "client"
1 client: conn.o
2 g++ client.cppconn.o -oclient
# Создать объектный файл "conn.o"
3 conn.o: conn.cppconn.h
4 g++ -cconn.cpp -oconn.o
В этом примере строка, содержащая текст client: conn.o, называется "строкой зависимостей", а строка g++ client.cppconn.o -oclient называется "правилом" и описывает действие, которое необходимо выполнить.
1 Задается цель -- исполняемый файл client, который зависит от объектного файла conn.o;
2 Правило для сборки данной цели;
3 Задается цель conn.o и файлы, от которых она зависит -- conn.cpp и conn.h;
4 Описывается действие по сборке цели conn.o.
Строки, начинающиеся с символа "#", являются комментариями.
ВЫЗОВ ФУНКЦИЙ SCANF И PRINTF ИЗ NASM.
Функции scanf и printf определены в библиотеке glibc. Эти функции можно указать в ассемблерной программе как внешние с помощью директивы EXTERN. Объектный файл получается стандартным образом. А вот при компоновке (линковке) необходимо указать библиотеку libc.so либо использовать для компоновки gcc, который, в отличие от ld по умолчанию компонует все объектные файлы с библиотекой libc.so
Реализация лабораторной работы №2 «Организация условных переходов»
16 | 100+a/b , если a < b 32 , a > b a*a/b , если a = b |
Листингпрограммы:
Csegsegment
assumess:cseg,es:cseg,cs:cseg,ds:cseg
Org 100h
Start:
Call main
Данные
AaIdw ?
BbIdw ?
Resdw ?
CR_LF db 10,13,'$'
msgadb 'In A: $'
msgbdb 'In B: $'
msgresdb 'Res : $'
msgedb 'Error!$'
msgpdb 'Any key...$'
Inbuf label byte
Maxlendb 11
Actlendb ?
fielddb 11 dup(?),'$'
L dw 6
outbufdb 11 dup (?),'$'
MAIN
Mainproc
Movdx,offsetmsga
Call print
Callreadstr
Movbx,dx
Callaib
MovaaI,ax
Callent
Movdx,offsetmsgb
Call print
Callreadstr
Movbx,dx
Callaib
MovbbI,ax
Callent
Call lab2
Movdx,offsetmsgres
Call print
Movax,res
Leabx,outbuf
Callbia
lea dx,[bx]
Call print
Callent
Movdx,offsetmsgp
Call print
Callwaitkey
Int 20h
Ret
Mainendp
Вводстроки
Readstrproc
Push ax
Leadx,inbuf
Mov ah,0ch
Mov al,0ah
Int 21h
Xorcx,cx
Movcl,actlen
Add dx,2
Popax
Ret
Readstr
Дата добавления: 2018-05-30; просмотров: 196; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!