Материал: 1328

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Продолжение табл.1.2

а) условные и безусловные переходы [3];

б) вызов процедур [3]

в) циклы [1, с.215];

-использование стека;

-дисковая память:

а) организация [3, с.45 51];

б) функции базовой версии DOS [3];

-переопределение данных: префикс ptr [1];

+и, кроме того:

-преобразование ЕХЕ - программы в COM - программу [3]

-операции сдвига [2]

-циклы и переходы [1, с. 47-51]

-операции сравнения и тестирования

-данные со знаком и без знака [1]

-включаемые файлы – директива include

-компоновка com-программы (tlink /tdc lab3_fio.obj)

Примеры программ: l_3bnn.asm (СОМ-программа, но уже с макросами, которых в 3-й лабораторной не должно быть) в папке l#03

Используемое ПО: tasm.exe, tlink.exe, td.exe

Формируемые файлы: lab3_fio.obj, lab3_fio.lst,lab3_fio.com

Литература: 1. Зубков С.В. Assembler для DOS, Windows и UNIX. – 3-е изд.,

стереотип. – М.: ДМК Пресс; СПб.: Питер, 2005. – 608 с.

2.Бурдаев О.В., Иванов М.А., Тетерин И.И. Ассемблер в задачах защиты информации / под ред. И.Ю.Жукова. – М.: КУДИЦ-ОБРАЗ, 2002. – 320с.

3.Абель Питер. Язык ассемблера для IBM PC и программирования / пер. с англ. – М.: Высшая школа. – 1992. – 447 с.

4.Олейник Л.Е. Язык ассемблера для микропроцессора 8086: курс лекций. – Омск: Сибирская региональная школа бизнеса, 2000

5.Дао Л. Программирование микропроцессора 8088. – М.: Мир, 1988. – 356 с.

6.Абель Питер. Ассемблер. Язык и программирование для IBM PC: пер. с англ., - изд. 5-е, стереот. – Киев: Век; М.: Энтроп; Киев: НТИ, 2003. – 736 с.

Задание (З_ЛР_3): Составить СОМ-программу для МП Intel 8086 для вычисления по трем формулам:

1)содержащей арифметические операции сложения, вычитания, умножения и деления (формулу взять у преподавателя, а при самостоятельном изучении в

уч.пос., ч.1), если X1=1;

2)содержащей логические операции (формулу 2 взять у преподавателя, а при

самостоятельном изучении из уч.пос., ч.2), если X1=2 или 2,3,4 и т.д.;

3) содержащей сдвиг логический, арифметический, циклический и циклический с переносом (формулу взять у преподавателя, а при самостоятельном изучении в прил.3), если X1= N

Использовать в качестве аргументов b1, b2,...,w1, w2,...,d1, d2,... байты, слова и двойные слова.

11

Продолжение табл.1.2

Все данные (b1, b2, b3,...,w1, w2, w3,...d1, d2, d3,....) вводятся c клавиатуры. Результат выводится на экран (после очистки в свободную строку)

Данные для соответствующей формулы вводятся после запроса (в диалоге должна быть прокрутка снизу вверх). Применяется перевод из ASCIIформата в двоичный код (для данных, введенных с клавиатуры) и перевод из двоичного кода в ASCII-формат (для данных, выдаваемых на экран, на НМД и на принтер)

В данной программе могут быть использованы в качестве процедур программы, реализующие задания для лабораторных работ № 1 и 2 (lab1 и lab2)

Х1 вводится с клавиатуры по запросу

Результат вывести на экран по формату:

"Вычисление по формуле (приводится соответствующая cтрока формулы) Y=

Кроме того, полученный pезультат заносится в файл на диске (после оставшейся в нем инфоpмациии о предыдущих вычислениях по формулам лабораторных работ № 1, или № 2, или № 3 по фоpмату:

"Вычисление по формуле (приводится соответствующая cтрока формулы) или «сдвиг <название, направление и на какое количество битов>», Y=____ для b1=__;b2=__;b3=__; b4=__;w1=___и т.д."

Лабораторная считается сданной, если:

-в комментариях к вычислениям указана максимальная длина промежуточных результатов;

-при ассемблировании и компоновке не обнаружено ошибок;

-результат совпадает с результатом ручного просчета (получены правильные результаты при произвольно заданных исходных данных);

-текст программы прокомментирован (комментарии поясняют последовательность вычисления по формуле; назначение используемых процедур; способ передачи параметров и получение результатов)

Типичные ошибки:

(те же, что и во второй лабораторной работе)

-программист забывает о возврате в DOS [4, с. 99];

-программист забывает о стеке [4, с.103];

-вызывает процедуру, которая портит содержимое нужных регистров [4, с.104];

-неправильный порядок операндов [4, с.103];

-потеря содержимого регистра при умножении [4, с.115];

-изменение отдельными инструкциями флага переноса [4, с.116];

-программист долго не использует состояние флагов [4, с.116];

-открытая процедура или открытый сегмент [5, с.120 121];

-неопределенные символические имена [5, с.121 122];

-повторное определение символического имени [5, с.122 123];

12

Окончание табл.1.2

-ошибки выполнения программы как результат ошибок программирования [5,

с.123 124];

-ошибки при использовании регистров [5, с.124 125]:

а) 8- и 16-разрядный регистры для записи двух операндов одной команды;

б) 8-разрядный регистр указывается для работы со стеком;

в) сегментные регистры прямо используются в арифметических вычислениях, логическихоперациях или для непосредственной передачи данных;

г) сегментные регистры могут использоваться либо как источники операндов, либо как приемники операндов, но никак не одновременно

-выход из диапазона адресов, т.е. относительный адрес символического имени, используемого в качестве операнда адреса перехода, выходит за диапазон +127 байтов –128 байтов от конца команды условного перехода [5,

с.125];

-использование непосредственных данных в качестве операнда-приемника [5,

с.125 126];

-программист забывает об инструкции ret [4, с.100];

-генерация неверного типа возврата [4, с.101];

-ошибки при использовании условных переходов [4, с.106];

-не путайте операнды в памяти и непосредственные операнды [4, с..117];

-границы сегментов [4, с.118]

+и, кроме того:

-программист забывает о стеке (на стек остается слишком мало места в кодовом сегменте СОМ-программы);

Задание повышенной сложности (ЗПС_ЛР_3): Составить СОМ-программу для МП Intel 8086 для вычисления по трем формулам:

1)содержащей арифметические операции сложения, вычитания, умножения и деления (формулу взять у преподавателя, а при самостоятельном изучении в

уч.пос., ч.1), если X1=1;

2)содержащей логические операции (формулу 2 взять у преподавателя, а при самостоятельном изучении - из уч.пос., ч.2), если X1=2 или 2,3,4 и т.д.;

3)содержащей сдвиг логический, арифметический, циклический и циклический с переносом (формулу взять у преподавателя, а при

самостоятельном изучении в прил.3), если X1= N;

Результат выводится на экран (после очистки строк) со знаком.

13

2.РАЗЛИЧИЯ МЕЖДУ ПРОГРАММАМИ

ВEXE- И COM-ФАЙЛАХ

2.1.Сравнение EXE-программ и COMпрограмм

Cуществуют определенные различия между программой, выполняемой как EXE-файл, и программой, выполняемой как COMфайл.

 

 

 

 

Таблица 2.1

 

 

Сравнение EXE-программ и COMпрограмм

 

 

 

 

 

№

Отличия

EXE-программа

COMпрограмма

Примечания

п/п

 

 

 

 

1

2

3

4

5

1

Размер

Может иметь

Ограничен раз-

COM-файл всегда

 

прог-

любой размер

мером одного

меньше, чем

 

раммы

 

сегмента и не

соответствующий EXE-

 

 

 

превышает 64К

файл

2

Сег-

Определяет

Стек генерируется

При создании ассемб-

 

мент

программист

автоматически

лерной программмы,

 

стека

 

 

которая будет преобра-

 

 

 

 

зована в COM-файл,

 

 

 

 

сегмент стека прог-

 

 

 

 

рамммистом не задается

3

Сег-

Сегмент данных

Сегмент данных

Простой способ

 

мент

обычно опреде-

отсутствует (все

решения этого вопроса

 

данных

ляяется, а ds

данные должны

– см. ниже

 

 

инициализирует

быть определены в

 

 

 

-ся адресом это-

сегменте кода)

 

 

 

го сегмента

 

 

4

Инициа-

Программируют-

Т.к. COM-про-

Когда COM-программа

 

лизация

ся запись нуле-

грамма не имеет

начинает работать, все

 

 

вого слова в стек

ни стека, ни

сегментные регистры

 

 

и инициализа-

сегмента данных,

содержат адрес префик-

 

 

ция регистра ds

то эти шаги

са программного сег-

 

 

 

отсутствуют

мента (PSP), 256-

 

 

 

 

байтового блока т.к.

 

 

 

 

адресация начинается со

 

 

 

 

смещения 100h от

 

 

 

 

начала PSP, то в

 

 

 

 

программе после

 

 

 

 

директивы

 

 

 

 

segment идёт директива

 

 

 

 

org 100h

 

 

 

14

 

 

 

 

 

Окончание табл. 2.1

1

2

3

4

5

5

Обра-

См. уч.пос., ч.1

См. выше

Отличается параметром

 

ботка:

(подраздел 2.3) и

(подраздел 2.3)

/tdc для tlink

 

ассемб-

ч.2 (подраздел

 

 

 

лиро-

2.3)

 

 

 

вание и

 

 

 

 

компо-

 

 

 

 

новка

 

 

 

Когда программа создается для выполнения как COM-файл, то компоновщиком будет выдано сообщение:

Warning: No STACK Segment

(Предупреждение: Сегмент стека не определен)

Это сообщение можно игнорировать, так как определение стека в программе не предполагалось.

Пример COM-программы приведен ниже [6, с. 124]. codesg segment para 'Code'

 

assume cs:codesg,ds:codesg,ss:codesg,es:codesg

 

org 100h

;начало программы после PSP

begin:

 

;

jmp main

; обход данных (переход к следующей команде)

 

 

flda

dw 250

;определение данных

fldb

dw 125

 

fldc

dw ?

 

; ---------------------------------------------------

 

 

main proc near

 

 

mov ax,flda

;переслать 0250 в ax

 

add ax,fldb

;прибавить 0125 к ax

 

mov fldc,ax

;записать сумму в fldc

 

ret

;вернуться в DOS

main endp

 

codesg ends

 

 

end begin

 

Эта COM-программа выполнит те же действия, что и приведенная ниже EXE-программа (измененные и удаленные из этой программы строки выделены прописными буквами и заливкой)

STACKSG SEGMENT PARA SТACK 'Stack'

DB 32 DUP(?)

STACKSG ENDS ;-------------------------------------------------

DATASG SEGMENT PARA 'Data'

15

Источник: https://studfile.net/preview/16407385/