Бройдо В.Л. Вычислительные системы, сети и телекоммуникации (2002) (1186248), страница 68
Текст из файла (страница 68)
Операнды 0з1 и з гс должны иметь одинаковый формат (оба, или байт, или слово) и могут быть: згс — г, ц и пзг — г, и (невозможно гзеде, ~ и нельзя, чтобы оба типа были е или оба гзеде). Команда СМР формирует флаги: СГ, ?Е при сравнении чисел без знака, СГ, ОГ, 5Г, ?Г при сравнении чисел со знаком; флаги АЕ, РЕ не определены. Команды приращения Команды прирашения — одноадрссные. 01 1ИС сзт — инкремент (!псгешепг — прирастить). Прибавляет 1 к содержимому 0зт. Операнд сзг может быть представлен оператором типа г или ж Команда 1МС формирует флаги РГ, АГ,? Е, 5Е, ОЕ.
С1 ОЕС азг — декремент (г!есгешепт — уменьшить). Вычитает 1 из содержимого 0зг. Операнд сз1 мажет быть представлен оператором типа г или ж Команда ОЕС формирует флаги РГ, АГ, ?Г, 5Г, ОЕ. Команды умножения Команды умножения — одноадресные. Указывается только 5ВС (множитель); 05Т (множимое) берется строго определенным образам.
С1 МОС згс — умножение (пш!Вр!у — умножение без знака). Выполняет умножение беззнакового множимого (8 или 16 бит) на беззнаковый множитель (8 или 16 бит). Команда одноадресная — указывается только 5ВС (множитель); 05Т (множимоее) берется строго определенным образом. 5ВС может быть представлен оператором типа г или е (! — нельзя). Если формат 5ВС вЂ” байт, то множимое (байт) в А(., произведение (слово) будет в АХ; если формат 5ВС вЂ” слово, то множимое (слово) в АХ, произведение (двойное слово) в 1)Х: АХ (старшие два байта в ОХ, младшие в АХ). Команда МОС формирует флаги СГ, ОГ; воздействует на флаги АГ, РГ, 5Г, ?Г (флаги не определены), с1 1м00 згс — целое умножение знаковых чисел (!псейег шц!1!р!у — умножение целых са знакам). Выполняет умножение знакового мнажимаго (8 или 16 бит) на знаковый множитель (8 или 16 бит).
Команда одноадресная — указывается только 5ВС (множитель); 05Т (множимое) берется строго определенным образом. 5ВС может быть представлен оператором типа г или ш (! — нельзя). Если формат 5ВС вЂ” байт, то множимое (байт) в А1., произведение (слово) будет в ЛХ; если формат 5ВС вЂ” слово, то множимое (слово) в АХ, произведение (двойное слово) в 1)Х: ЛХ (старшие два байта в ОХ, младшие в АХ). Команда !МОС формирует флаги СГ, ОГ; воздействует на флаги ЯЕ, РЕ, 5Г, ?Е (флаги не определены).
Элементы программирования на языке ассемблер 291 Команды деления Команды деления — одноадресные, указывается только 5йС (делитель); 051 (делимое) берется строго определенным образом. С1 01Н зге — деление (йнЫе — деление без знака). Выполняет леление беззнакового делимого (16 илн 32 бит) на беззнаковый делитель (8 или 16 бит). Команда олноадресная — указывается только 5йС (делитель); 05Т (делимое) берется строго определенным образом. 5йС может быть представлен оператором типа г или ьп (ь — нельзя). Если формат 5йС вЂ” байт, то делимое (слово) в АХ, частное отделения (байт) будет в А1., остаток от деления (байт) в АН; если формат 58С вЂ” слово, то лелимое (двойное слово) в 1)Х; АХ (старшие два байта в 1)Х, младшие в АХ), частное от деления (слово) в АХ, остаток от деления (байт) в Ш.
Команда 01Н формирует флаг 1Е (1Е=1 при делении на О и при делении большого числа на очень малое, если частное вне диапазона); воздействует на флаги АЕ, СЕ, ОЕ, РЕ, 5Е, 7Е (флаги не определены). сь 101Н згс — деление целых чисел со знаком (нне8ег Йчьь)е — деление целых чисел со знаком). Выполняет деление знакового делимого (16 или 32 бит) на знаковый делитель (8 или 16 бит).
Команда одноадресная — указывается только 5йС (делитель); 05Т (делимое) берется строго определенным образом. 5йС может быть представлен оператором типа г или ьп (1 — нельзя). Если формат 8КС— байт, то делимое (слово) в АХ, частное отделения (байт) будет в А1., остаток от деления (байт) в АН; если формат 5йС вЂ” слово, то делимое (двойное слово) в ОХ; АХ (старшие лва байта в 1)Х, младшие в АХ), частное от деления (слово) в АХ, остаток отделения (байт) в О1.. Команда 10!Н формирует флаг 1Е (1Е=1 при делении на О и прн делении большого числа на очень малое, если частное вне диапазона); воздействует на флаги АЕ, СЕ, ОЕ, РЕ, 5Е, 7Е (флаги не определены).
Логические команды Это двухадреспые команды, они используются для сравнения, сброса и установки битов операнла в операциях преобразования кодов и при выполнении арифметических операций в кодах АЯСП, ьз Ой ььзг,згс — логическое сложение (ог — или), команда выполняет поразрядную дизъюнкцию (логическое сложение — операцию «ИЛИэ) битов двух операндов; устанавливает 1 в тех битах операнда озс, в которых была 1 хотя бы у одного из исходных операндов. Операнды бас и згс должны иметь одинаковый формат (оба или байт, или слово) н могут бытья згс типа г, в, й сзс типа г, а (невозможно гзейв и нельзя, чтобы оба титьа были гь).
Команда Ой устанавливает ОЕ-0 и СЕ 0; формирует РЕ, 5Е, 7Е; значение АЕ не определено. сь АИО бас, згс — логическое умножение (ало — и). команда выполняет поразрядную конъюнкцию (логическое умножение — операцию «Иэ) бььтов двух операндов; устанавливает 1 в тех битах операнда озс, в которых у обоих исходных операндов были 1. Операнлы Сзг и з ге должны иметь одинаковый формат (оба, или байт, или слово) и могут быть: згс типа г, щ, 1; Озс типа г, еь (невозможно гзедп и нельзя, чтобы оба типа были ьп). Флаги: команда устанавливает ОЕ=О и СЕ=О; формирует РЕ, 5Е, 7Е; значение АЕ пе определено.
292 Глава 9. Прог вммнов уп авлвнив — основа автоматизации Команды безусловной передачи управления дир орг — команда безусловной передачи управления (1пшр цпсопс)1С1опа!1у — перейти безусловно). Операнд ОРВ может быть задан прямым или косвенным адресом; по прямому адресу; ВМР ветка Если метка в том же сегменте, что и команда ЛМР, переход считается внутренним (пеаг), если не в том же сегменте — переход внешний (Саг). В самой команде ЗМР разницы нет; тип перехода определяется видом метки: после метки для внутреннего перехода ставится двоеточие:.
Транслятор по таблице меток и их адресов сам определяет атрибуты пеаг или таг и соответственно транслирует команлу передачи управления в более короткую или более длинную команду (более длинную, так как надо менять не только содержимое смещения 1Р, но и регистра сегментов Ся). Несколько сократить длину команды может указание программиста «~МР зЬогС метка» о том, что метка не палее а128 байт от команды ВМР (это указание не обязательно, но если оно есть и ошибочно, то транслятор выдаст ошибку). О по косвенному адресу. Косвенный адрес может быть задан: в регистре: ВМР г или в памяти:ЗМР сиввопьное имя; СЛ в памяти с косвенной адресацией:ВМР пеаг рСг (513; ВМР Саг рСг (ВХ) и т. д. В последних двух командах пеа г рС г и (а г рСг указывать обязательно, так как какое слово содержится в регистре Я1 — обычное или двойное, — ассемблер заранее не знает и ему нужно помочь.
Команды перехода к подпрограмме и выхода из подпрограммы Подпрограммы оформляются как процедуры. Процедура начинается меткой— именем процедуры н заканчивается командой выхода геС (гегцгп). В программе процедура помешается в операторные скобки: ргос ... епдр Около оператора ргос могут быть указаны атрибуты дистанции; пезг — близкая процедура (в том же сегменте) или (зг — далекая процедура (если этот атрибут опущен, то подразумевается пезг). Пример: 015Р ргос (аг; в отличие от метки после имени процедуры двоеточие не ставится: геС 015Р епор Команда перехода к подпрограмме: САИ.
орг Вызов процедуры (сай а ргоседпге — вызов процелуры), безусловная передача управления, выполняюшая короткий или длинный вызов процедуры. Флаги — не меняются. В команде САСС атрибуты пезг или Гаг указывать не надо, так как ассемблер нужную информацию получит сам из лирективы определения процедуры. По команде СдСС лолжно быть выполнено: 293 Элементы программирования на языке ассемблер 0 запоминание в стеке адреса возврата (содержимого 1Р и СБ лля следуюяцей команлы: 16 бит — если пезг, и 32 бит — если Таг); о переход к выполнению процедуры (инициируется записью в 1Р и в С8 (если Тзг) нового адреса команлы). Операнд ОРЙ, определяющий адрес процедуры, может быть; 0 непосредственным: САСС иия процедуры; о прямым — процелуру с атрибутом лез г можно вызвать через регистр, в котором солержится смешение адреса процедуры: САСС г; 0 косвенным: ° процедуру с атрибутом пезг можно вызвать, используя переменную размером волово: САСС иогб рТг сиивопьное иия, ° процедуру с атрибутом Тзг — используя переменную размером в двойное слово: СЯСС снего' рТг сиияольное иия.
Комаида выхода ма подпрограммы кСТ вЂ” возврат из процедуры (гесцгп 1гот ргоседцге — возврат из процедуры). Команла извлекает из с~ека адрес возврата и возвращает управление из процедуры, вызванной ранее командой САСС Если процедура имеет атрибут лез г, то команда АСТ извлекает из стека одно слово и заносит его в регистр 1Р; если процедура имеет атрибут Тзг, то команда йСТ извлекает из стека два слова: сначала смещение адреса, а затем алрес сегмента, и заносит их соответственно в регистр 1Р и в регистр СЯ.
Флаги не меняются. Процедуры могут быть вложенными, глубина вложения любая (ограничивается лишь емкостью стека). Команды условной передачи управления Есть 31 команла условной передачи управления (УПУ), но некоторые попарно совпадают, например: если > и если не < и не = . Разных команд всего 17. УПУ может быть только лез г и гпогг, то есть метка перехода должна быть в том же сегменте и не далее н128 байт от УПУ. Общий формат команды: д* иетия где )* — Тцпр условие — передача управления при выполнении условия.