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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!