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