3.3. Регистры адресации

В процессоре 8088 имеется четыре 16-битовых регистров, которые могут принимать участие в адресации операндов. Один из них является одновременно регистром общего назначения - регистр базы BX. Другие три - это указатель базы (Base Poiner- BP), индекс источника (Source Index -SI) и индекс назначения (DestinationIndex - DI). Программа может использовать регистры BP, SIи DI в качестве 16-битовых операндов, но отдельные байты в них недоступны. Основное назначение этих регистров - поставлять 16-битовые значения, используемые в формировании адресов операндов.


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 Адресация операндов

Каждая команда в 8088 задает для выполнения некоторую операцию. Разные операции могут иметь от нуля до двух операндов. Например, команде разрешения прерываний Set Interrupt (STI) операнды не нужны. Команда увеличения (INC) требует, чтобы программист определил один операнд, - регистр или ячейку памяти, - который должен быть увеличенна еденицу. Команда ADD (сложение) должна иметь два операнда - складываемые величины. Некоторые команды неявно задают расположение операнда, но большинство команд позволяют программисту выбирать в качестве операнда регистр или ячейку памяти. Если в качестве операнда выбран регистр, топрограммисту остается только указать его имя. Для указания же в качестве операнда участка памяти у вас есть много различных способов. Хорошим примером служит команда INC. Она имеет единственный операнд. На Фиг. 3.2 изображен листинг ассемблерас несколькими различными вариантами команды INC. Первая команда INC называет в качестве операнда регистр BX. Заметим, что в поле операндов в этом случае кроме BX ничего нет. Остальные команды в примере указывают в качестве операнда ячеку памяти. И хотя в них иногда появляется имя регистра BX,он не является здесь самим операндом, а используется для определения его адреса.