В процессоре 8088 имеется четыре 16-битовых регистров, которые мо-
гут принимать участие в адресации операндов. Один из них является
одновременно регистром общего назначения - регистр базы BX. Другие
Microsoft (R) Macro Assembler Version 5.00 11/17/88 21:42:25
Фиг 3.2 Адресация операндов Page 1-1
PAGE ,132
TITLE Фиг 3.2 Адресация операндов
0000 CODE SEGMENT
ASSUME CS:CODE,DS:CODE,SS:CODE
0123 ORG 123H
0123 ???? OPND DW ?
0200 ORG 200H
0200 43 INC BX ; Увеличение регистра
0201 FF 06 0123 R INC OPND ; Увеличение ячейки памяти
0205 FF 07 INC WORD PTR [BX] ; Увеличение слова памяти
0207 FF 87 0123 R INC [OPND+BX] ; Смещение плюс индекс
020B FF 84 0123 R INC [OPND+SI]
020F FF 84 0123 R INC OPND[SI] ; Другой способ - тот же результат
0213 FF 85 0123 R INC OPND + [DI]
0217 FF 86 0123 R INC [OPND] + [BP]
021B FF 00 INC WORD PTR [BX + SI] ; База плюс индекс
021D FF 03 INC WORD PTR [BP] + [DI]
021F FF 81 0123 R INC [OPND + BX + DI] ; База + индекс + смещение
0223 FF 82 0123 R INC OPND[BP][SI]
0227 CODE ENDS
END
Фиг 3.2 Адресация операндов
три - это указатель базы (Base Poiner - BP), индекс источника
(Source Index - SI) и индекс назначения (Destination Index - DI).
Программа может использовать регистры BP, SI и DI в качестве
16-битовых операндов, но отдельные байты в них недоступны. Основное
назначение этих регистров - поставлять 16-битовые значения,
используемые в формировании адресов операндов.
Каждая команда в 8088 задает для выполнения некоторую операцию.
Разные операции могут иметь от нуля до двух операндов. Например,
команде разрешения прерываний Set Interrupt (STI) операнды не
нужны. Команда увеличения (INC) требует, чтобы программист опреде-
лил один операнд, - регистр или ячейку памяти, - который должен
быть увеличен на еденицу. Команда ADD (сложение) должна иметь два
операнда - складываемые величины. Некоторые команды неявно задают
расположение операнда, но большинство команд позволяют программисту
выбирать в качестве операнда регистр или ячейку памяти. Если в
качестве операнда выбран регистр, то программисту остается только
указать его имя. Для указания же в качестве операнда участка памяти
у вас есть много различных способов.
Хорошим примером служит команда INC. Она имеет единственный
операнд. На Фиг. 3.2 изображен листинг ассемблера с несколькими
различными вариантами команды INC. Первая команда INC называет в
качестве операнда регистр BX. Заметим, что в поле операндов в этом
случае кроме BX ничего нет. Остальные команды в примере указывают в
качестве операнда ячеку памяти. И хотя в них иногда появляется имя
регистра BX, он не является здесь самим операндом, а используется
для определения его адреса.