- •Системне програмування
- •Машинні коди. Байт Способу Адресації.
- •Способи адресації
- •Приклади адресації
- •Визначення даних в мові Assembler
- •[Ім’я] Dn вираз
- •Директива визначення байта (db)
- •Директива визначення слова (dw)
- •Директива визначення подвійного слова (dd)
- •Безпосередні операнди
- •Директива equ
Приклади адресації
{припустимо маємо наступні визначення для сегментів і даних}
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
HeM DB 'Hello, world',13,10,'$'
.CODE
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET HeM
int 21h
Команда |
Спосіб адресації |
Результат |
Машинний код |
mov ds,ax |
Регістрова |
ds=5254 |
8ED8 |
mov si,7 mov di,11d mov bp,0 mov bx,0 |
Безпосередня |
si=0007 di=000B bp=0000 bx=00000 |
BE0700 BE0B00 BD0000 DD0000 |
mov al,HeM mov al,[HeM] mov al,HeM+7 |
Пряма |
al=48 al=48 al=77 |
A00000 A00000 A00700 |
mov al,[bp] mov al,[bx] |
Базова |
al=64 al=48 |
8A4600 8A07 |
mov al,HeM[si] mov al,[HeM+si] mov al,[HeM][si] mov al,[HeM].si mov al,HeM.[si] mov al,HeM.si |
Індексна |
al=77 |
8A840000 |
mov al,[bp][di] mov al,[bx][si] mov al,[bx+di+7] mov al,[bp][si+HeM].7 |
Базово-індексна |
al=00 al=6C al=0A al=00 |
8A03 8A00 8A4107 8A820007 |
mov ah,4ch
int 21h
END
Повертаючись до БСА, і враховуючи наведені способи адресації, зупинимось детальніше на форматі цього поля. Звернемо також, увагу на два останні біти КО, оскільки вони впливають на формування способу адресації.
1 0 |
7 6 5 4 3 2 1 0 | ||||
... |
d |
w |
mod |
reg |
r/m |
КО |
БСА |
d –біт, що вказує напрям потоку між операндами.
w – визначає розмір операндів.
mod – двобітовий код, що вказує на тип адреси.
reg – трибітовий вказівник регістра
r/m – трибітовий вказівник регістру/пам’яті.
Позначення для регістрів:
Біти |
w=0 |
w=1 |
000 |
AL |
AX |
001 |
CL |
CX |
010 |
DL |
DX |
011 |
BL |
BX |
100 |
AH |
SP |
101 |
CH |
BP |
110 |
DH |
SI |
111 |
BH |
DI |
Для сегментних регістрів :
00 |
ES |
01 |
CS |
10 |
SS |
11 |
DS |
Значення поля mod:
mod |
Призначення |
00 |
Біти r/m задають абсолютну адресу, а байт зміщення відсутній |
01 |
Біти r/m задають абсолютну адресу, і присутній один байт зміщення |
10 |
Біти r/m задають абсолютну адресу, і присутні два байти зміщення |
11 |
Біти r/m задають регістр |
Значення поля r/m:
Три біти r/m разом з бітами mod повністю визначають спосіб адресації.
r/m |
mod = 00 |
mod = 01 |
mod = 10 |
mod=11 |
mod=11 |
w=0 |
w=1 | ||||
000 |
BX+SI |
BX+SI+ зміщення (1b) |
BX+SI+ зміщення (2b) |
AL |
AX |
001 |
BX+DI |
BX+DI+ зміщення (1b) |
BX+DI+ зміщення (2b) |
CL |
CX |
010 |
BP+SI |
BP+SI+ зміщення (1b) |
BP+SI+ зміщення (2b) |
DL |
DX |
011 |
BP+DI |
BP+DI+ зміщення (1b) |
BP+DI+ зміщення (2b) |
BL |
BX |
100 |
SI |
SI+ зміщення (1b) |
SI+ зміщення (2b) |
AH |
SP |
101 |
DI |
DI+ зміщення (1b) |
DI+ зміщення (2b) |
CH |
BP |
110 |
ПРЯМА |
BP+ зміщення (1b) |
BP+ зміщення (2b) |
DH |
SI |
111 |
BX |
BX+ зміщення (1b) |
BX+ зміщення (2b) |
BH |
DI |
Приклади розшифрування машинних кодів.
Команда |
Код | |
16-кова |
2-кова | |
MOV AH,00 |
В4 |
10110 100 00000000 |
MOV AX,00 |
В8 |
10111 000 00000000 |
ADD BX,AX |
03D8 |
0000 0011 11 011 000 |
MUL BX |
F6E3 |
1111 0110 11 100 011 |