Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
САНКТ-ПЕТЕРБУРГСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ
им. проф. М.А. БОНЧ-БРУЕВИЧА
Курсовая работа по дисциплине:
Машинно-зависимые языки программирования
по теме:
"ВВОД-ВЫВОД НА АССЕМБЛЕРЕ (В DOS И LINUX) "
Направление 23100 «Программная инженерия»
Студент группы СП-12
Осипов А.И.
Преподаватель Коробов С.А.
Санкт Петербург
2013г.
ЦЕЛЬЮ НАПИСАНИЯ КУРСОВОЙ РАБОТЫ ЯВЛЯЕТСЯ:
Реализация целочисленного вычисления, сделанного в лабораторной работе №2(по указанию преподавателя), полностью используя язык Ассемблера для организации корректного ввода-вывода информации:
Реализация задачи должна быть выполнена для MS DOS и для Unix.
ПОРЯДОК РАБОТЫ:
Вывод на экран средствами DOS осуществляет 09 функция INT 21H DOS. Номер функции указывается в регистре AH. Адрес выводимой строки в DS:DX. В процессе выполнения операции конец сообщения определяется по oграничителю ($).
Знак ограничителя '$' можно кодировать непосредственно после cимвольной строки (как показано в примере), внутри строки: 'Имя покупателя?$', или в следующем операторе DB '$'. Используя данную операцию, нельзя вывести на экран символ доллара "$". Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак "$" не встретиться в памяти.
Команда LEA загружает адрес области PRMP в регистр DX для передачи в DOS адреса выводимой информации. Адрес поля PRMP, загружаемый в DX по команде LEA, является oтносительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX (DS:DX).
ВВОД ДАННЫХ С КЛАВИАТУРЫ.
Для ввода с клавиатуры используется функция 0AH INT 21H. Она требует наличия cписка параметров, содержащего поля, которые необходимы при выполнении команды INT.
ПРЕОБРАЗОВАНИЕ СТРОКИ В ЧИСЛО И ЧИСЛА В СТРОКУ.
Данные, вводимые с клавиатуры, имеют ASCII-формат, например, буквы SAM имеют в памяти шестнадцатеричное представление 53414D, цифры 1234 - шест.31323334. Во многих случаях формат алфавитных данных, например, имя человека или описание статьи, не меняется в программе. Но для выполнения арифметических операций над числовыми значениями, такими как шест.31323334, требуется специальная обработка.
ПРЕОБРАЗОВАНИЕ ASCII-ФОРМАТА (СТРОКИ) В ДВОИЧНЫЙ ФОРМАТ (ЧИСЛО).
Для выполнения арифметических операций часто требуется преобразование их в двоичный формат.
Процедура преобразования заключается в следующем:
ПРЕОБРАЗОВАНИЕ ДВОИЧНОГО ФОРМАТА В 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", удаляющее объектные файлы проекта, без указания имен.
Итак, правила объясняют как и в каком случае надо пересобирать определённые файлы проекта.
Стандартные правила:
К числу стандартных правил относятся:
Пример makefile:
Ниже приводится простой пример (номера строк добавлены для ясности).
# Создать исполняемый файл "client"
1 client: conn.o
2 g++ client.cpp conn.o -o client
# Создать объектный файл "conn.o"
3 conn.o: conn.cpp conn.h
4 g++ -c conn.cpp -o conn.o
В этом примере строка, содержащая текст client: conn.o, называется "строкой зависимостей", а строка g++ client.cpp conn.o -o client называется "правилом" и описывает действие, которое необходимо выполнить.
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 |
global main
extern exit
extern puts
extern scanf
extern printf
section .text
main:
push dword bbbS ;Помещение в стек
push dword aaaS ; Команда уменьшает значение регистра
push dword msg1 ; указателя стека ESP(SP) на 4(2) и затем
call scanf ; записывает значение источника в
sub esp, 12 ; вершину стека.
mov eax,dword[aaaS]
mov ebx,dword[bbbS]
xchg ax,dx ; Обмен значениями между операндами
shl eax,16 ; Сдвиг всех битов операнда влево на количество разрядов
mov ax,dx
push eax
push dword msg2
call printf
sub esp,8
push dword 0
call exit
ret
;code ends
section .data
msg1 db "%d%d",0
msg2 db "%d",0xA,0
aaaS dd 0
bbbS dd 0
В данной курсовой работе я освоил ввод и вывод данных, условные и безусловные переходы, подключение библиотечных функций, уяснил особенности реализации задачи на MASM и NASM компиляторах и в различных операционных системах (DOS, UNIX).