Форматы машинных команд
description
Transcript of Форматы машинных команд
Форматы машинных команд
Формат определяет правила кодирования машинных команд
Общий формат двухоперандной команды
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