Форматы команд

advertisement
Форматы машинных команд
Формат определяет правила кодирования машинных команд
7
1 0
7 6 5 4 3 2 1 0
КОП d w mod reg
r/m
0 7
7
Disp L
Общий формат двухоперандной команды
MOV AX, BX
SUB AL, AX
MOV BL, BH
0
Disp H
Передача или операция
d
w
0
0
Байт из регистра reg в память или регистр r/m
0
1
Слово из регистра reg в память или регистр r/m
1
0
Байт в регистр reg из памяти или регистра r/m
1
1
Слово в регистр reg из памяти или регистра r/m
Таблица 1
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
mod 
00, disp = 0 – смещение отсутствует
01, disp=disp L – используется 8-битовое смещение, которое
расширяется со знаком до 16 бит;
10, disp=disp H – используется 16-битовое смещение;
11, регистровая адресация в соответствии с таблицей 1.
r/m
Эффективный адрес
способ адресации
000
EA=(BX)+(SI)+disp
Базово-индексная
001
EA=(BX)+(DI)+disp
010
EA=(BP)+(SI)+disp
011
EA=(BP)+(DI)+disp
100
EA=(SI)+disp
101
EA=(DI)+disp
110
EA=(BP)+disp
111
EA=(BX)+disp
Индексная
Базовая
Вычисление физического адреса операндов в памяти
КОП s w
mod КОП r/m Disp L
Disp H
Data L
Data H
Двухоперандная команда с непосредственным операндом
MOV AX, Gamma
MOV BL, 10000111b
ADD CX, 0FFFEh
sw
Размер операнда
X0
Один байт данных data L
01
Два байта (word)data H, data L
11
Один байт данных, который расширяется
со знаком до 16 бит
w mod КОП r/m
КОП
Disp L
Disp H
Формат однооперандной команды
1100011 w
1011 w reg
mod 000 r/m
Data L
Data L
Data H
Data H
Стандартный и укороченный формат команд непосредственной передачи данных
Режимы адресации
Способы определения адресов операндов в
командах называются режимами адресации
Регистровая адресация
MOV AX, BX
XOR BL, AL
DEC SI
; переслать содержимое регистра BX в регистр AX.
; сложить по модулю два содержимое регистров BL и AL.
; увеличить на 1 содержимое регистра SI.
Непосредственная адресация
MOV CH, 3Eh
MOV AL, 10000000b
CMP [SI], 0FFh
MOV DX, offset TEXT
;загрузить регистр CH байтом 3Еh
;создать в AL маску с 1 в старшем бите
;сравнить содержимое ячейки памяти числом FFh
;переслать регистр DX смещение переменной TEXT
Прямая адресация к памяти
MOV AX, GAMMA
SUB TEMP, BL
;переслать в регистр AX переменную GAMMA
;вычесть из переменной TEMP содержимое регистра BL
Косвенная регистровая адресация (базовая и индексная)
ADD AX, [DI]
MOV [SI], BL
CMP byte ptr [BX], 100d
;сложить содержимое регистра АХ и ячейки памяти,
;адресуемой через регистр DI.
;переслать содержимое ВL в память
;по адресу, находящемуся в SI.
;сравнить содержимое ячейки памяти
;с адресом в ВХ с числом 100.
Косвенная регистровая адресация со смещением (базовая и
индексная со смещением)
ARRAY DB 20 DUP (‘@’); создать массив из 20 символов
LEA SI, ARRAY
MOV AL, [SI + 9]
ADD [SI] 5, 0Fh
MOV 8 [SI], AH
;загрузить в SI начальный адрес массива ARRAY.
;переслать девятый элемент массива в регистр AL.
;сложить пятый элемент массива с числом Fh.
;переслать содержимое AH в восьмой
;элемент массива
MOV SI, 0
MOV AL, ARRAY [SI + 9]
ADD ARRAY [SI] 5, 0Fh
MOV ARRAY 8 [SI], AH
;основная программа
PUSH DS
PUSH ES
PUSH SI
CALL ROUTE
;подпрограмма ROUTE
MOV BP, SP
MOV AX, 2 [BP]
MOV BX, 4 [BP]
MOV CX, 6 [BP]
;загрузить в SI индекс начального элемента массива
;ARRAY.
;переслать девятый элемент массива в регистр AL.
;сложить пятый элемент массива с числом Fh.
;переслать содержимое AH в восьмой
;элемент массива
;сохранить в стеке содержимое трех
;регистров DS, ES, SI, через которые
;передаются параметры подпрограмме.
;вызов подпрограммы.
;загрузить в BP адрес входа в стек.
;извлечь из стека содержимое SI.
;извлечь из стека содержимое ES.
;извлечь из стека содержимое DS.
Базово-индексная адресация
эффективный адрес ЕА вычисляется как сумма содержимого двух регистров (базового и
индексного), указанных в команде.
При этом могут использоваться следующие пары регистров:
[BX] [SI] – адрес вычисляется как DS: [BX] [SI];
[BX] [DI] – адрес вычисляется как DS: [BX] [DI];
[BP] [SI] – адрес вычисляется как SS: [BP] [SI];
[BP] [DI] – адрес вычисляется как SS: [BP] [DI].
Базово-индексная адресация со смещением
эффективный адрес ЕА вычисляется как сумма содержимого двух регистров (базового и
индексного) и смещения, указанного в команде
Пусть в сегменте данных создан массив из 20 символов (по 10 в строке):
MAS DB ‘QWERTYUIOP’
DB ‘ЙЦУКЕНГШЩЗ’
MOV BX, 10
;загрузить в ВХ число байт в строке.
MOV SI, 4
;загрузить в SI индекс 5-го элемента второй строки.
MOV AL, MAS [BX] [SI]
;переслать 5-й элемент второй ;строки в AL.
LEA BX, MAS
MOV SI, 4
MOV AL, [BX+10] [SI]
;загрузить в ВХ начальный
;адрес массива
;загрузить в SI индекс 5-го
;элемента второй строки.
;переслать 5-й элемент второй
;строки в AL.
Вычисление физического адреса памяти
SEG : EA – логический адрес ячеек памяти
PA = SEG*16 + EA – физический адрес ячеек памяти
BX
CS
BP
SS
SI
DS
DI
ES
Смещение disp
EA
Физ. адрес
Эффективный
адрес
BX+SI+disp
BX+DI+disp
BP+SI+disp
BP+DI+disp
Адресация
Базовоиндексная
(со смещением)
Индексная
SI+disp
DI+disp
(со
смещением)
BP+disp
BX+disp
(со смещением)
Базовая
Формирование эффективного адреса операнда
Относительная адресация
КОП
Disp
15
0
+
IP
Относительная адресация
JMP Start_1
; перейти на метку Start_1
Неявная адресация
CBW; преобразовать байт в аккумуляторе в слово
CLC; сбросить флаг переноса
CLI; сбросить флаг прерываний
STC; установить флаг переноса
КОП
15
0
15
EA
SI
15
0
DI
0
15
0
EA
Адресация цепочек
Адресация портов ввода-вывода
КОП
port
Прямая адресация портов ВВ
IN AL,40h
; ввести байт из порта 40h
OUT 1Eh,AX ; вывести слово в порт 1Eh
7
0
КОП
15
0
DX
Косвенная адресация портов ВВ
MOV DX, 60h
IN AX,DX
OUT DX,AX
; загрузить в DX адрес порта ВВ
; ввод слова из порта с адресом (DX)
; вывод слова по адресу (DX)
Распределение адресного пространства ЭВМ
220 адресов – адресное
пространство базового
МП: 00000h … FFFFFh
XMS –Extended
Memory Specification
HMA – High Memory
Area
Download