Режимы адресации данных микропроцессора Intel 8086

1) Непосредственный. Данное длинной 8 или 16 бит является частью команды. Например: выражение-константа: 12; 1010В; 08АH; ‘AB’; XX-YY-5.

mov ah,12 ;переслать в регистр ah значение 12

add ax,08AH ;прибавить к содержимому регистра ax значение 08AH

2) Прямой. 16-битный эффективный адрес данного является частью команды. Например: переменная ± выражение- константа: CNT; CNT +5; ARRAY -5. Это означает, что соответствующие метки (переменные) определены предварительно в сегменте данных.

mov ah,cnt ;переслать в регистр ah значение по адресу cnt

;относительно начала сегмента данных

add ax,cnt+5 ;прибавить к содержимому регистра ax значение по

;адресу, вычисляемому как сумма адреса cnt и 5

3) Регистровый. Данное содержится в определяемом командой регистре (Аx,bx,cx,dx,si,di,sp,bp).

Например: регистр: AX; BH; DL.

mov ah,al ;переслать в регистр ah значение из регистра al

add ax,dx ;прибавить к содержимому регистра ax значение из

;регистра dx

4) Регистровый косвенный. Эффективный адрес данного находится в базовом регистре BX или индексном регистре SI,DI:

.

Например: [регистр]: [BX].

 

mov ah,[bx] ;переслать в регистр ah значение по адресу, который

; находится в регистре bx

Таким образом, если в регистре bx находится значение 6, то в регистр ah пересылается информация, находящаяся по смещению 0006h относительно начала сегмента данных.

5) Регистровый относительный. Эффективный адрес равен сумме 8 или 16 битного смещения и содержимого базового или индексного регистров:

.

Например: переменная + [регистр±выражение константа]: CST[BX]; MES[SI+10H]; [BX-1].

mov ah,cst[si] ;переслать в регистр ah значение по адресу, который

;определяется как сумма смещения метки cst

;относительно начала сегмента данных и регистра si

При этом метка cst должна быть предварительно описана в сегменте данных. Если cst имеет смещение 0002h относительно начала сегмента данных, а в si записано значение 7h, то эффективный адрес данного относительно начала сегмента данных составит 0009h (0002h+7h).

6) Базовый индексный. Эффективный адрес равен сумме содержимого базового и индексного регистров, определяемых командой:

.

Например: [базовый регистр][индексный регистр] : [BX][DI].

mov ah,[bx][di] ;переслать в регистр ah значение по адресу,

;равному сумме содержимого регистров bx и di

Если в регистре bx записано значение 5h, а в регистре di – значение 3h, то в регистр ah пересылается информация по смещению 8h (5h+3h) относительно начала сегмента данных.

7) Относительный базовый индексный. Эффективный адрес равен сумме 8 или 16 битного смещения и базово - индексного адреса:

.

Например: переменная + [базовый регистр±выражение константа] [индексный регистр±выражение константа]: E[BX+5][SI-2]; DATA[BX][SI]; [BX+2][SI].

mov ah,data[bx][si] ;переслать в регистр ah значение по адресу,

;равному сумме смещения метки data

;относительно начала сегмента, содержимого

;регистра bx и содержимого регистра si

Если метка data имеет смещение 0002h, в регистре bx записано значение 8h, а в регистре si – значение 5h, то в регистр ah передается значение, находящееся по смещению 0015h относительно начала сегмента данных.