Скачиваний:
28
Добавлен:
01.05.2014
Размер:
7.32 Mб
Скачать

2.4. Способы адресации

Для обращения к операндам внутри адресного пространства 80C196KC используются шесть основных способов адресации:

- Регистровая прямая адресация

- Косвенная адресация

- Косвенная адресация с автоинкрементом

- Непосредственная адресация

- Короткая индексная адресация

- Длинная индексная адресация

Кроме основных способов существуют еще два - Адресация через Регистр Нуля и Адресация через Регистр Указателя Вершины стека. Адресация через Регистр Нуля объединяет ZERO_REG с Длинной индексной адресацией, разрешая прямой доступ к любой ячейке в памяти.

Адресация через Регистр Указателя Вершины стека объединяет SP с Косвенной адресацией для того,чтобы обратиться к вершине стека и с Короткой индексной адресацией

для доступа к данным внутри стека.

Регистровая прямая адресация непосредственно обращается к регистру из 256-байтового Нижнего Регистрового файла. При работе с окнами, этот режим может также непосредственно обращаться к SFRs или к Верхнему Регистровому

Файлу. Регистр выбирается 8-битным полем внутри команды, а адрес регистра должен соответствовать правилам выравнивания для типа операнда.

В зависимости от команды, при вычислении могут участвовать до трех регистров

Примеры Регистровой прямой адресации:

ADD AX, BX, CX ; AX < - BX + CX ( ADD_3op )

MUL AX, BX ; AX < - AX * BX ( MUL_2op )

INCB CL ; CL < - CL + 1

Косвенный способ адресации обращается к операнду, помещая его адрес в переменную типа WORD в Регистровом Файле. Вычисляемый адрес должен соответствовать правилам

выравнивания для типа операнда. Обратите внимание, что косвенный адрес может относиться к операнду в любом месте адресного пространства, включая Регистровый Файл.8-битное поле внутри команды выбирает регистр, который содержит косвенный адрес. Команда может содержать только одну косвенную ссылку;любые дополнительные операнды должны быть указаны через прямую регистровую ссылку.

Примеры Косвенной Адресации:

;взять операнд из ячейки с адресом в AX и поместить

;в ячейку AX

LD AX, [AX ] ; AX < - MEM_WORD (AX)

ADDB AL, BL, [CX ] ; AL < - BL + MEM_BYTE(CX) ; (ADDB_3op)

POP [AX ] ; MEM_WORD (AX) < - MEM_WORD (SP)

; SP < - SP + 2

Косвенная Адресация с Автоинкрементом - такой же как косвенный способ адресации, за исключением того, что переменная типа СЛОВО, которая содержит косвенный адрес,

увеличивается после того, как она используется для адресации операнда. Если команда функционирует на БАЙТЕ или

КОРОТКОМ ЦЕЛОМ ЧИСЛЕ, косвенная переменная адреса увеличивается на 1. Если команда функционирует на СЛОВЕ или ЦЕЛОМ ЧИСЛЕ, косвенная переменная адреса увеличивается на 2 .

Примеры Косвенной Адресации с Автоинкрементом:

LD AX, [BX] + ; AX < - MEM_WORD (BX)

; BX < - BX + 2

ADDB AL, BL, [CX] + ; AL < - BL + MEM_BYTE (CX)

; CX < - CX + 1 ( ADDB_3op )

PUSH [AX] + ; SP < - SP - 2

; MEM_WORD (SP) < - MEM_WORD (AX)

; AX < - AX + 2

Непосредственный способ адресации позволяет брать операнд непосредственно из поля в команде. Для операций на БАЙТЕ или операндах типа КОРОТКОЕ ЦЕЛОЕ ЧИСЛО,это - поле с 8 битами.Для Операций на СЛОВЕ или операндах типа ЦЕЛОЕ ЧИСЛО, это - поле с 16 битами. Команда может содержать только одну непосредственную ссылку; любые дополнительные операнды должны быть указаны через прямую регистровую ссылку.

Примеры Непосредственной Адресации:

ADD AX,#340 ; AX < - AX + 340 ( ADD_2op )

PUSH #1234H ; SP < - SP - 2

; MEM_WORD (SP) < - 1234H

DIVB AX, 10 ; AL < - AX/10

; AH < - AX MOD 10

В Короткой индексной адресации адрес одного из операндов вычисляется из двух полей с 8 битами. Одно поле с 8 битами в команде выбирает переменную типа СЛОВА в Регистровом Файле, которая содержит адрес. Второе 8-битное поле в команде знако-расширяется и суммируется с переменной СЛОВА для формирования исполнительного адреса операда.Исполнительный адрес может быть в пределах от -128 и до 127 байтов относительно адреса в переменной типа СЛОВО.

Команда может содержать только одну Коротко индексную ссылку; любые другие операнды должны быть указаны через прямую регистровую ссылку.

Примеры Короткой индексной адресации:

LD AX, 12[BX ] ; AX < - MEM_WORD (BX+12)

MULB AX, BL, 3[CX ] ; AX < - BL * MEM_BYTE (CX+3)

;( MULB_3op )

Длинная индексная адресация похожа на режим Короткой индексной адресации, за исключением того, что берется поле с 16 битами из команды и добавляется к переменной типа СЛОВО для того, чтобы cформировать адрес из операнда. Никакое расширение знака не требуется. Команда может содержать только одну длинно-индексируемую ссылку; любые остающиеся операнды должны быть указаны через прямую регистровую

ссылку.

Примеры Длинной индексной адресации:

AND AX, BX, TABLE[CX ]; AX < - BX AND МЕM_WORD(TABLE+CX)

; ( AND_3op )

ST AX, TABLE[BX ] ; MEM_WORD (TABLE+BX) < - AX

ADDB AL, BL, LOOKUP[CX ]; AL < - BL + MEM_BYTE LOOKUP+CX)

; ( ADDB_3op )

Адресация Через Регистр Нуля (Zero Register Addressing): первые два байта в Регистровом Файле составляют Регистр Нуля ( ZERO_REG ). Эти байты устанавливаются в нуль аппаратными средствами 80C196KC. Кроме обеспечения фиксированного источника постоянной нуля для вычислений и

сравнений, Регистр Нуля может использоваться как переменная СЛОВА в длинно-индексируемой ссылке. Такая комбинация выбора регистра и способа адресации позволяет

адресовать любую ячейку в памяти непосредственно. Так как этот режим использует индексную адресацию, то доступ осуществляется, медленнее чем регистровые - прямые доступы.

Примеры Адресации через Регистр Нуля:

ADD AX, 1234[ZER0_REG ]; AX < - AX + MEM_WORD (1234)

; ( ADD_2op )

POP 5678[ZERO_REG ] ; MEM_WORD (5678) < - MEM_WORD (SP)

; SP < - SP + 2

Адресация через Регистр Указателя Вершины стека:

Байты 18H и 19H Нижнего Регистрового Файла образуют систему Указатель Вершины стека (Stack Pointer; SP), который адресуется как 18H(по адресу 18Н). Кроме обеспечения удобного манипулирования Указателем Вершины стека, SP может также использоваться как переменная СЛОВА в Косвенной ссылке для обращения к вершине стека или в коротко-индексируемой ссылке для доступа к данным внутри стека.

Примеры Адресации Регистра Указателя Вершины стека:

PUSH [SP ] ; Дубликат TOP_OF_STACK

LD AX, 2[SP ]; AX < - NEXT_TO_TOP

Соседние файлы в папке Лабораторные работы по МПС