Форматы машинных команд
DESCRIPTION
Форматы машинных команд. Формат определяет правила кодирования машинных команд. mod reg r/m. КОП d w. 7 0. 7 1 0. 7 0. 7 6 5 4 3 2 1 0. Disp H. Disp L. Общий формат двухоперандной команды. - PowerPoint PPT PresentationTRANSCRIPT
Форматы машинных команд
Формат определяет правила кодирования машинных команд
Общий формат двухоперандной команды
MOV AX, BX
SUB AL, AX
MOV BL, BH
КОП d w mod reg r/m7 1 0 7 6 5 4 3 2 1 0 7 0 7
0Disp L Disp H
d w Передача или операция
0 0 Байт из регистра reg в память или регистр r/m
0 1 Слово из регистра reg в память или регистр r/m
1 0 Байт в регистр reg из памяти или регистра r/m
1 1 Слово в регистр reg из памяти или регистра r/m
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
Таблица 1
mod 01, disp=disp L – используется 8-битовое смещение, которое
расширяется со знаком до 16 бит; 10, disp=disp H – используется 16-битовое смещение;
00, disp = 0 – смещение отсутствует
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 mod 000 r/m Data L Data H
1011 w reg Data L Data H
Стандартный и укороченный формат команд непосредственной передачи данных
Способы определения адресов операндов в командах называются режимами адресации
Режимы адресации
Регистровая адресация
MOV AX, BXXOR BL, ALDEC SI
; переслать содержимое регистра BX в регистр AX.; сложить по модулю два содержимое регистров BL и AL.; увеличить на 1 содержимое регистра SI.
Непосредственная адресация
MOV CH, 3EhMOV AL, 10000000bCMP [SI], 0FFh
;загрузить регистр CH байтом 3Еh;создать в AL маску с 1 в старшем бите;сравнить содержимое ячейки памяти числом FFh
MOV DX, offset TEXT ;переслать регистр DX смещение переменной TEXT
Прямая адресация к памяти
MOV AX, GAMMASUB 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, ARRAYMOV AL, [SI + 9]ADD [SI] 5, 0FhMOV 8 [SI], AH
;загрузить в SI начальный адрес массива ARRAY.;переслать девятый элемент массива в регистр AL.;сложить пятый элемент массива с числом Fh.;переслать содержимое AH в восьмой ;элемент массива
MOV SI, 0 MOV AL, ARRAY [SI + 9]ADD ARRAY [SI] 5, 0FhMOV ARRAY 8 [SI], AH
;загрузить в SI индекс начального элемента массива ;ARRAY.;переслать девятый элемент массива в регистр AL.;сложить пятый элемент массива с числом Fh.;переслать содержимое AH в восьмой ;элемент массива
;основная программаPUSH DSPUSH ESPUSH SICALL ROUTE;подпрограмма ROUTEMOV BP, SPMOV AX, 2 [BP]MOV BX, 4 [BP]MOV CX, 6 [BP]
;сохранить в стеке содержимое трех;регистров 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 MOV AL, MAS [BX] [SI]
;загрузить в ВХ число байт в строке.
;загрузить в SI индекс 5-го элемента второй строки.
;переслать 5-й элемент второй ;строки в AL.
LEA BX, MAS MOV SI, 4 MOV AL, [BX+10] [SI]
;загрузить в ВХ начальный ;адрес массива;загрузить в SI индекс 5-го;элемента второй строки.;переслать 5-й элемент второй ;строки в AL.
BX
BP
SI
DI
Смещение disp
EA
CS
SS
DS
ES
Физ. адрес
Вычисление физического адреса памяти
SEG : EA – логический адрес ячеек памяти
PA = SEG*16 + EA – физический адрес ячеек памяти
Эффективный адрес
Адресация
BX+SI+dispBX+DI+dispBP+SI+dispBP+DI+disp SI+dispDI+disp BP+dispBX+disp
Базово-индексная (со смещением)
Индексная (со смещением)
Базовая (со смещением)
Формирование эффективного адреса операнда
Относительная адресация
КОП Disp
IP +
Относительная адресация
15 0
JMP Start_1 ; перейти на метку Start_1
Неявная адресация
CBW; преобразовать байт в аккумуляторе в слово CLC; сбросить флаг переноса CLI; сбросить флаг прерываний STC; установить флаг переноса
КОП КОП
DI EA
SI EA15 0 15 0
15 0 15 0
Адресация цепочек
Адресация портов ввода-вывода
КОП port
Прямая адресация портов ВВ
7 0 КОП
DX 15 0
Косвенная адресация портов ВВ
IN AL,40h OUT 1Eh,AX
; ввести байт из порта 40h; вывести слово в порт 1Eh
MOV DX, 60h IN AX,DX OUT DX,AX
; загрузить в DX адрес порта ВВ; ввод слова из порта с адресом (DX); вывод слова по адресу (DX)
Распределение адресного пространства ЭВМ
XMS –Extended Memory Specification
HMA – High Memory Area
220 адресов – адресное пространство базового МП: 00000h … FFFFFh