Нельзя делить на непосредственное число.




Формат команды:

DIV BL (AL = AX/BL)

DIV BX (AX= <DX,AX>/BX)

DIV MEMW (AX= <DX,AX>/MEMW)

SBW - преобразование байта в слово.

SBD - преобразование слова в двойное слово.

Деление в ASCI кодах.

AAD - Команда коррекции деления в неупакованной форме.

Команда коррекции деления AAD выполняется до непосредственного деления. Предварительно слова переводятся в распакованный десятичный формат. Содержимое AH умножается на 10 и прибавляется к содержимому AL, то есть получается двоичный код.

 

13)

 

14) Цепочечные команды. Префиксы повторения в цепочечных командах.

Под цепочкой понимается последовательность байт или слов в памяти, а цепочной операцией называется команда, выполняемая над элементом цепочки. Для обработки строковых данных ассемблер имеет пять команд обработки строк:

MOVS переслать один байт или одно слово из одной области памяти в другую;

LODS загрузить из памяти один байт в регистр AL или одно слово в регистр AX;

STOS записать содержимое регистра AL или AX в память;

CMPS сравнить содержимое двух областей памяти, размером в один байт или в одно слово;

SCAS сравнить содержимое регистра AL или AX с содержимым памяти.

INSB считать из входного порта в приемник по адресу [di]

OUTS вывести из источника по адресу [si] в порт.

LODS считать из источника по адресу [si] в AL.

STOS сохранить содержимое AL в приемнике по адресу [di].

Эти команды предполагают, что регистры SI и DI содержат относительные

адреса, указывающие на необходимые области памяти. Регистр SI связан с регистром сегмента данных DS:SI, а регистр DI с регистром дополнительного сегмента ES:DI.

Следовательно, при использовании в программе цепочных команд необходимо инициализировать регистр ES. Цепочные команды выполняются с модификацией индексных регистров, и выполняют действие над одним байтом или словом. Чтобы обеспечить цикл используют префикс повторения REP. Длина цикла заносится в регистр СХ. При выполнении цепочной команды с префиксом REP СХ уменьшается на 1. Таким образом, можно обрабатывать цепочку любой длины. Модификация индексных регистров зависит от состояния флага DF. Флаг направления DF определяет направление повторяющейся операции:

1) если DF=0, то индексные регистры инкрементируются.

2) если DF=1, то индексные регистры декрементируются.

Установка DF осуществляется с помощью команд: CLD (DF:=0) и STD (DF:=1).

 

16) см. 5 и 7

 

17 и 37) Программы.COM и.EXE формата (структура, размер). Префикс программного сегмента(PSP). Чтение параметров командной строки в PSP.

Программы.com и.exe форматов – исполняемые программы. COM всегда меньше по объему, чем EXE-формате. Программы типа com являются односегментными. Это и программа, и данные, и стек размещаются в одном сегменте.

Программы типа exe состоят из 2-х частей:

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

Собственно загрузочный модуль.

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

Заголовок имеет минимальный размер 512 байт.

Программа типа com не имеет заголовка, что обеспечивает более эффективную ее работу.

Hello.exe 550 байт

Hello.com 25-30 байт

Формат com используется в основном при написании очень маленьких программ и написании драйверов, обработчиков прерываний других резидентных программ.

В com место под префикс программного сегмента (PSP) резервирует программист, начиная программу директивой ORG 100h. Таким образом PSP включается в область сегмента программы.

Любая программа содержит специальную таблицу PSP, имеющую размер 256 байт.

В exe место под PSP не резервируется. Он пристраивается к программе в процессе загрузки.

Указатель стека на конец сегмента. Граница между программой и стеком условна.

Основа вирусов – засорение стека.

Префикс программного сегмента (PSP)

Префикс состоит из 256 (100h) байт.

00 – int 20 – выход из подпрограммы.

02 – общий размер доступной памяти (кратное 16)

0Аh-0Dh – содержимое вектора прерывания по завершению программы.

0Еh – содержимое вектора прерывания по Ctrl/C

12h-15h -------//-------- по критической ошибке.

2Сh-2Dh – сегментный адрес блока памяти с окружением данного процесса

Окружение – информация о процессе.

80h-FFh – хвост команды или дисковая область передачи данных

На PSP указывает регистр ES. По адресу ES: [80h] находится количество байт, содержащееся в хвосте без учёта символа <Enter>

 

18) Подпpогpаммы. Типы вызовов подпpогpамм. Передача паpаметpов в подпpогpаммы.

Для идентификации подпрограмм используется директива

PROC – начало п/п

ENDP – конец п/п

Формат:

Имя PROC Тип перехода

Тело п/п

------------------------------

RET

Имя ENDP

Типы перехода: 1) Near; 2) Far

Переходы бывают короткими и длинными. Короткие – по умолчанию ±127 байт (near). Дальние (far) – переход с учётом сегментного регистра.

Команды возврата не имеют типа перехода. Вызов п/п осуществляется командой CALL (Call <имя> – команда обеспечивает:

1) сохранение адреса возврата в стеке (регистр IP);

2) запуск выполнения вызываемой процедуры, то есть загрузку в IP нового адреса)

RET – осуществляет выборку из стека адреса возврата и загрузку его в IP.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: