Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО.doc
Скачиваний:
46
Добавлен:
12.03.2015
Размер:
605.18 Кб
Скачать

7.6.3. Команды ввода вывода

Используются для синхронного обмена информации из портов. Рекомендую в программах употреблять предопределенные массивы.

7.6.4. Адресные команды

LEA – имеет два операнда. Вычисляет адрес шестнадцатиразрядного второго операнда и заносит его в первый операнд. Адрес вычисляется как относительный внутри модуля.

LDS – имеет два операнда. Вычисляет абсолютный адрес операнда 2. При этом сегмент адреса после выполнения команды находится в регистре DS, а смещение адреса – в операнде 1. В командах вычисления адреса употребляется не абсолютные переменные, а их адреса. Если мы пишем подпрограмму на языке встроенного ассемблера и вычисляем адрес передаваемого параметра, то в этом случае префиксы вычисления адреса употреблять не следует.

Procedure M1 (var M:String); assembler ;

…..

ASM

….

LDS BX, M

…..

END;

LES – аналогична команде LDS, но сегмент адреса загружается в регистр ES.

LFS – аналогично предыдущим двум. Сегмент адреса загружается в регистр FS.

LGS – сегмент адреса загружается в регистр GS.

LSS – сегмент адреса загружается в регистр SS.

Пример.

Напишем процедуру установки пиксела, аналогичную примеру 2 пункта 5.5. Используем встроенный ассемблер и непосредственное обращение к видеопамяти. Пиксел устанавливаем для видеорежима 320х200 точек на 256 цветов.

Procedure my_pixel(x,y : word; Color : byte);

Begin

ASM

PUSH ES

MOV AX,0A000h

MOV ES,AX

MOV AL,Color

MOV [ES:Y*320+X],AL

POP ES

END;

END;

7.6.5. Команды работы с регистром флагов.

LAHF – команда без операндов. Загружается в регистр AH.

SAHF – команда обратная предыдущей. Из регистра AH загружаются соответствующие биты в регистр флагов.

PUSHF – сохраняет флаг регистр в стек. Регистр SP повышается на 1.

PUSHFD – сохранение 32-бит. Флагового регистра. SP увеличивается на 2.

POPF – восстановление флагового регистра из стека.

POPFD – 32-разрядный.

Другие команды смотрите по литературе/2,3/.

7.6.6. Арифметические команды

Длина операндов должна быть одинаковой. После выполнения команд могут быть установлены флаги: F, S, OF, SF, ZF, AF, PF, SF.

ADD – имеет два операнда. Прибавляет операнд 2 к операнду 1 и результат записывает в 1.

Пример: ADD BL, AL

INC – имеет один операнд. Увеличивает значение операнда на 1.

DEC – уменьшить на 1.

SUB - Вычитает операнд 2 из операнда 1 и результат записывает в 1.

CMP – сравнить два операнда. Аналогично команде SUB , но результат не записывается в первый операнд.

Другие команды данного раздела на самостоятельное изучение.

7.6.7. Строковые команды

Под строкой в ассемблере понимается массив. При этом длина символа может быть равна длине ординарного типа (см. таблицу преобразований типов для ассемблера). Изучаем самомстоятельно.

7.6.8. Логические команды.

Логические команды в Ассемблере выполняются побитово над байтом, словом или двойным словом. При этом длина операндов должна обязательно быть одинаковой.

Логическое умножение.

AND Имеет 2 операнда. После выполнения команды изменяется содержимое флагов FS, FZ, FP.

Отрицание.

NOT Имеет 1 операнд. Необходимо помнить, что отрицание не эквивалентно смене знака.

Логическое сложение.

OR После выполнения команды изменяются флаги аналогично команде AND.

Исключающее «или»

XOR Аналогично предыдущим командам меняются флаги.

Логические команды работают быстрее пересылки, поэтому XOR AL, AL быстрее, чем MOV AL,0.

Произвести сравнение двух чисел