Э. Таненбаум - Архитектура компьютера (1127755), страница 195
Текст из файла (страница 195)
Таблица В.2. Некоторые из наиболее важных команд процессора 8088 Мнемо- Описание Операнды Флаги состояния ника О $ Х С МОЧ(В) Перемещение слова, байта г»-е, е»-г, е+-№ г»» — че г+-»те ХСНО(В) Обмен словами Загрузка действительного адреса Р08Н е,№ РОР Р08НР РОРР Х(АТ АОО(В) АОС(В) г+-е, е+-г, е» вЂ” № г»-е, е+-г, е»-№ 㻠— е, е+-г, е» вЂ” № 㻠— е, е»-г, е»-№ 808[8) 888(В) Вычитание слова с отрицательным переносом 0 0 0 0 0 0 0 0 0 0 0 0 Умножение с учетом знака Умножение без учета знака Деление с учетом знака Деление без учета знака Дополнение байта до слова с учетом знака Дополнение слова до двойного слова с учетом знака НЕС(В) НОТ(В) 1НС(В) Отрицание двоичного числа Логическое отрицание Положительное приращение по целевому а»азесу ОЕС(В) Отрицательное приращение по целевому адресу АНО(В) ОВ(В) Логическое И Логическое ИЛИ е»-г, г+-е, е+-№ е» вЂ” г, 㻠— е, е» вЂ” № 1МОЦВ) М01.(В) !01Ч(В) 0)Н(В) СВЧЧ Введение в стек Выталкивание из стека Введение в стек флагов Выталкивание из стека флагов Трансляция Аь Сложение слова Сложение слова с переносом Вычитание слова Описание Операнды Мнемо- ника Флаги состояния О 8 Е С ХОН(В) Логическое исключающее ИЛИ е< — г, гг — е, е<-№ 8НЯ(В) 8АЯ(В) е+-1, ег — С(.
ВЯЕ(В) (=ВНЦВ)) йОЦВ) Сдвиг влево е+-1, ег — С(. е+-1, ег-С(. е< — 1, ег — С). е<-1, е<-С(. ЯОЯ(В) ЯСЦВ) ЯСН(В) ТЕВТ(В) СМР(В) е< — 1, е< — СЕ Проверка операндов Сравнение операндов е+ — тг, е< — э№ ег <— чг, е< — +№ 8ТО Установка флага направления ()) С(0 8ТС СЕС СМС Обратный переход, если ОЕС(СХ) > О ) СОР Метка Метка Метка Строковая команда Метка е, метка е, метка —,№ )МР САЕ(.
ЯЕТ ВУВ Вызов системного исключения 1ООРЕ 1 СОРЕ (.СОР(ЧЕ ).ООРНЕ НЕР ЯЕРЕ ВЕРНЕ МОЧВ(В) (.008(В) 8ТО8(В) 8СА8(В) СМР8(В) )СС Логический сдвиг вправо Арифметический сдвиг вправо е+-1, е+-С(. Циклический сдвиг влево Циклический сдвиг вправо Циклический сдвиг влево с переносом Циклический сдвиг вправо с переносом Сброс флага направления (Т) Установка флага переноса Сброс флага переноса Обратный перенос Обратный переход, если 2 = 1 и ОЕС(СХ) > 0 Обратный переход, если Е = 0 и ОЕС(СХ) > 0 Повтор строковой команды Перемещение строки слов Загрузка строки слов Сохранение строки слов Просмотр строки слов Сравнение строк слов Условный переход Переход кметке Переход к подпрограмме Возврат из подпрограммы Набор команд 8088 769 770 Приложение В.
Программирование на языке ассемблера Перемещение, копирование и арифметические команды В первую группу входят команды копирования и перемещения. Крайне важна команда МОЧ, в которой явно указываются исходный и целевой адреса. Если в качестве исходного адреса выступает регистр, целевой адрес может быть действительным. В табл.
В.2 регистровые операнды обозначаются символом г, а действительные адреса — символом е. Соответственно, сочетание, о котором идет речь, выглядит как е« вЂ” г. Именно это обозначение идет первым в ячейке операндов команды МОЧ. Поскольку, согласно синтаксису команд, целевой адрес должен быть первым операндом, а исходный адрес — вторым, при обозначении операндов используется символ направленной влево стрелки (< — ). Таким образом, запись е« вЂ” г означает, что содержимое регистра копируется по действительному адресу. Кроме того, в команде МОЧ действительный адрес может быть исходным, а регистр — целевым. Такая ситуация обозначается как 㫠— е (это вторая запись в ячейке операндов упомянутой команды).
Третий вариант — по исходному адресу находятся сами данные, а целевой адрес является действительным, что выражается как е« вЂ” Ф. Непосредственно данные в таблице обозначаются символом решетки (Ф). Символ «В» в скобках в конце мнемонического кода призван показать, что существуют команды перемещения слова (МОЧ) и байта (МОЧВ).
Таким образом, данная строка в таблице реально описывает шесть разных команд. Ни один из флагов в регистре кода условий не меняется в зависимости от выполнения команды перемещения, и поэтому в последних четырех столбцах показан прочерк ( — ). Обратите внимание, что команды перемещения на самом деле не перемещают данные. Они создают копии, не изменяя исходных данных, и именно в этом состоит отличие от традиционной операции перемещения. Вторая команда, представленная в этой таблице, — ХСН6. Она меняет местами содержимое регистра и действительного адреса. Для обозначения операции обмена в таблице применяется символ двунаправленной стрелки (< — »). Поскольку в данном случае существуют варианты операции с байтом и со словом, в поле операндов команды ХСН6 содержится обозначение г — »е.
Следующей в таблице указывается команда загрузки действительного адреса (СЕА). Она определяет численное значение действительного адреса и сохраняет его в регистре. Далее следует команда Р05Н, которая вводит свой операнд в стек. Ее явный операнд может быть либо константой (что обозначается символом «Ф» в столбце операндов), либо действительным адресом (символ «е» в столбце операндов). Кроме того, имеет место неявный операнд 5Р, который не указывается в синтаксисе команды. Команда уменьшает значение 5Р на 2, а затем сохраняет операнд по адресу, на который 5Р указывает после обновления. Следующая команда — РОР. Она удаляет операнд из стека и размещает его по действительному адресу. Команды Р05НГ и РОРГ, выполняющие введение в стек и выталкивание из стека регистра флагов состояния, также предусматривают наличие неявных операндов.
Аналогично обстоит дело и с командой Х~АТ, которая загружает байтовый регистр А~ с адреса, формируемого сложением А~ и ВХ. Эта команда позволяет проводить оперативный поиск в таблицах размером 256 байт. Набор команд 8088 771 Определенные в официальной спецификации 8088 команды 18 и 007 не реализованы в интерпретаторе (и по этой причине не указаны в табл. В.2). По факту, это команды перемещения данных в устройство ввода-вывода и из него. Неявным адресом в ннх всегда является регистр АХ, а вторым операндом команд выступает номер порта регистра целевого устройства. Во второй группе табл.
В.2 представлены команды сложения и вычитания. Для всех них характерны то же сочетание трех операндов, что и для МОЧ: от действительного адреса к регистру (㫠— е), от регистра к действительному адресу (е« вЂ” г) и от константы к действительному адресу (е« вЂ” й). Во всех четырех командах в зависимости от результата выполнения могут быть установлены флаг переполнения (0), знаковый флаг (5), нулевой флаг (2) и флаг переноса (С). Флаг О устанавливается в том случае, если результат невозможно с достаточной степенью точности выразить разрешенным числом битов, и сбрасывается, если такая возможность существует.
Скажем, при прибавлении максимально допустимого 16-разрядного числа Ох7% (32 767 в десятеричной системе) к самому себе результат нельзя выразить в виде 16-разрядного числа со знаком, и в этом случае для указания на ошибку устанавливается флаг О.
Аналогичным образом устроен механизм установки других флагов состояния. Если команда способна влиять на флаг состоянги, в соответствующем столбце это обстоятельство обозначается звездочкой (*). В командах АОС и 588 флаг переноса в начале операции выполняет роль дополнительной единицы (или нуля), выражающей положительный или отрицательный перенос после предыдущей операции. Эта возможность особенно полезна для представления 32-разрядных и более длинных целочисленных значений в нескольких словах.
Помимо вышеперечисленного, предусмотрены операции сложения и вычитания байтов. В следующем блоке таблицы содержатся команды умножения и деления. Для работы с целочисленными операндами со знаком нужны команды 1йй. и 101Ч; для обработки значений без знака достаточно команд И01. и 01Ч. В байтовых вариантах этих команд в качестве целевого адреса неявно принимается комбинация регистров АН: АЕ В командах обработки слов неявным целевым адресом выступает комбинация регистров АХ: ОХ.
Даже если результатом умножения оказывается одно слово или один байт, значение регистра ОХ или АХ обновляется. Недопустимых операций умножения не бывает, поскольку нехватка битов по целевому адресу исключена. Биты переполнения н переноса устанавливаются тогда, когда произведение невозможно представить одним словом или одним байтом. Нулевой и отрицательный флаги оказываются после умножения неопределенными. При делении в качестве целевых адресов используются те же комбинации регистров: ОХ: АХ или АН: АС Частное записывается в АХ или Ас, а остаток — в ОХ или АН.
Все четыре флага — переноса, переполнения, нуля и отрицательности — после выполнения операции деления переводятся в неопределенное состояние. При нулевом делителе, а также в том случае, когда частное не помещается в регистр, инициируется исключение, и, если процедура перехвата исключений в программе не предусмотрена, программа останавливается. Болыпе того, затруднена программная обработка знаков «минус» перед операцией деления нли после нее, поскольку, согласно спецификации 8088, знак остатка должен быть всегда равен знаку делимого, в то время как в математике допускается только неотрицательный остаток.