Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?

Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





Процессор узнает о режимах адресации операндов команды из ее кода. Рассмотрим два обобщенных формата команд, описывающих все рассмотренные режимы адресации. Большинство двухадресных команд имеют такие форматы.

Формат команды, имеющий два операнда, один из которых располагается в регистре, а другой в регистре или памяти.В общем случае такие команды могут занимать от двух до четырех байт памяти. Весь этот массив байт разбит на поля, каждое из которых несет определенную информацию (см. рис. 3.4).

Байт
Бит 7…2 7……0 7……0
Поле Code d w mod reg R/m disp_low disp_high
                   

Рис. 3.4. Формат двухадресной команды без непосредственной адресации

Поля формата имеют следующее применение:

– поле code содержит код операции, описывающий операцию, выполняемую командой (под это поле отводится 6 старших бит нулевого байта кода команды);

– поле d (первый бит нулевого байта кода) определяет направление передачи результата:

1) при d = 1 первый операнд определяется полем reg, т.е. всегда является регистром, а второй операнд определятся полем r/m, т.е. может быть ячейкой памяти или регистром;

2) при d = 0 – наоборот, первый операнд определяется полем r/m, а второй – полем reg;

– поле w (нулевой бит нулевого байта кода) определяет размер операндов:

1) при w = 0 – байты;

2) при w = 1 – слова;

– поле mod (два старших бита первого байта кода) определяет режим адресации и, в частности, смысл поля r/m и существование полей disp_low и disp_high:

1) при mod = 00 – поля disp_low и disp_high отсутствуют, а поле r/m определяет операнд в памяти;

2) при mod = 01 – поле disp_high отсутствует, а поле r/m определяет операнд в памяти;

3) при mod = 10 – оба поля disp_low и disp_high присутствуют в коде команды, а поле r/m определяет операнд в памяти;

4) при mod = 11 – поле r/m определяет операнд в регистре, а поля disp_low и disp_high естественно отсутствуют;



– поле reg (пятый, четвертый и третий биты первого байта кода) кодирует операнд располагаемый в регистре:

Поле reg w = 0 w = 1
AL AX
CL CX
DL DX
BL BX
AH SP
CH BP
DH SI
BH DI

– поле r/m (младшие три бита первого байта кода) используется совместно с полем mod:

1) при значении поля mod = 11 поле r/m определяет операнд в регистре и кодирует регистр так же как и поле reg (см. выше);

2) при значении поля mod отличном от 11 поле r/m определяет операнд в памяти и колирует режим адресации следующим образом:

Поле r/m Режим адресации Исполнительный адрес
Базово-индексная BX + SI + disp
То же BX + DI + disp
>> BP + SI + disp
>> BP + DI + disp
Косвенная или индексная SI + disp
То же DI + disp
Косвенная или по базе BP + disp (при mod ¹ 00)
То же BX + disp

Если поле mod = 00 и поле r/m = 110, то исполнительный адрес операнда определяется полями disp_low и disp_high, которые в данном случае обязательно присутствуют в коде команды. Этот случай определяет прямую адресацию;

– поля disp_low и disp_high являются соответственно младшим и старшим байтом компоненты исполнительного адреса (сдвига), присутствующей в коде команды. Наличие этих полей в коде команды отличают базовую и индексную адресацию от косвенной. Если в коде команды присутствует только поле disp_low, то при вычислении исполнительного адреса, оно расширяется до слова, старший байт которого равен нулю.

Например, команда MOV AL,[BX + DI + 3Fh] имеет код 8A413Fh. Выделим поля этого кода и удостоверимся, действительно это та самая команда. Переведем код команды в двоичную систему счисления:

Выделим поля кода команды:

code = 100010 – код операции пересылки (MOV);

d = 1 – первый операнд располагается в регистре (см. поле reg), а второй в регистре или памяти (см. поле r/m);

w = 0 – операнды имеют размер в 1 байт;

mod = 01 – поле r/m определяет операнд в памяти и поле disp_high в коде команды отсутствует;

reg = 000 – при w = 0 это регистр AL;

r/m = 001 – при mod = 01 это ячейка памяти с исполнительным адресом BX + DI + disp;

disp_low = 00111111 – младший байт компоненты сдвига в исполнительном адресе операнда;

disp (сдвиг) = 00000000 00111111 – получается расширением disp_low (в шестнадцатеричной системе это число 003Fh).

Таким образом, приходим к выводу, что это код команды
mov AL,[BX + DI + 003Fh].

Формат команды, имеющий два операнда, один из которых располагается в регистре или памяти, а другой непосредственно в коде команды.Этот формат применяется для команд, один из операндов которых имеет непосредственную адресацию (см. рис. 3.5). Длина кода этого формата от 3 до 6 байт.




 

Байт
Бит 7…2 7……0 7……0 7……0 7……0
Поле code s w mod reg r/m disp_ low disp_ high data_ low data_ high

Рис. 3.5. Формат двухадресной команды, второй операнд которой имеет
непосредственную адресацию

Поля формата имеют следующее применение:

– поле code вместе с reg, а иногда и с s, определяет выполняемую операцию;

– поле s вместе с полем w определяет размер второго операнда и, тем самым, наличие поля data_high:

1) при s = 0 размер второго операнда определяется полем w;

2) при s = 1 размер второго операнда равен 1 байту, причем при w = 1 этот байт расширяется до слова путем размножения старшего разряда младшего байта в старший байт;

– поле w определяет размер первого операнда:

1) при w = 0 – байт;

2) при w = 1 – слово;

– поля mod и r/m используются как в рассмотренном ранее формате;

– поле reg является частью кода операции;

– поля disp_low и disp_high используются как в рассмотренном ранее формате (в частности могут отсутствовать);

– поля data_low и data_high – соответственно младший и старший байт непосредственного (второго) операнда (поле data_high может отсутствовать).

СОДЕРЖАНИЕ РАБОТЫ

1. Ознакомиться с теоретическим материалом.

2. В соответствии со своим вариантом опробовать в debug и пояснить команды.

3. Осуществить ассемблирование и дизассемблирование указанных преподавателем команд.


Варианты заданий

1. MOV BX,100 MOV BP,[BX] MOV DX,[BP + 2] MOV AX,DX ADD AX,[BX + 4] 2. MOV AX,200 ADD AX,[BX] MOV DI,AX SUB AX,[BX + DI + 2] CMP AX,[DI]
3. MOV DI,4 MOV BX,100 MOV AX,[BX + DI + 4] MOV CL,AL SUB CX,[BX + SI] 4. MOV BP,70 ADC BP,[BP] MOV AX,BX ADD AX,[BP + 7] MOV DX,[BP + 4]
5. MOV AX,200 MOV BX,AX MOV BX,[BX + 4] MOV CX,[BX + 6] MOV DX,[BX + 8] 6. ADD BX,[BX + 2] MOV DI,8 MOV DX,[BX + DI + 8] SUB BX,DX MOV AX,[DI]
7. MOV BX,18 MOV AX,[BX + 200] INC BX MOV DI,BX MOV DX,[BX + DI + 1E] 8. MOV AX,DX MOV SI,AX ADC AX,[SI] MOV BP,AX AND AX,[BP + 10]
9. MOV BP,40 MOV BX,[BP + 2] MOV AX,[BX + DI + 2] MOV CX,AX MOV DX,[DI] 10. OR AX,[BX + DI – 14] ADD BX,AX MOV DX,[BX] MOV BX,[DI] SUB AX,[BX + 8]
11. MOV SI,–20 MOV BP,200 MOV AX,[BP + SI + 3] MOV DX,[BP] MOV CX,[SI] 12. MOV BP,30 MOV SI,AX MUL byte ptr [BP + SI] MOV DX,[BP] ADC AX,DX
13. MOV AX,120 MOV DI,AX MOV BP,AX MOV CX,[DI + 2] MOV DX,[BP + DI – 10] 14. XOR AX,8080 MOV BX,AX MOV DX,[BX – 20] ADD CX,[BX] SUB DX,CX
  15. MOV DI,18 MOV SI,AX MOV BP,[BX] MOV AX,[BP + SI + 2] MOV CX,[BX + DI]   16. MOV DX,[BP + SI – 5] MOV CX,[BP] ADD DX,CX MOV [BP + 2],DX MOV AX,[BP + 1]
  17. MOV AX,[BX + 4] MOV BX,AX MOV CX,[BX + DI + 4] ADD BX,CX MOV DX,[BX]   18. MOV AX,90 MOV BX,[BP + SI + 12] MOV [BX],AX SUB AX,[BX] MOV [BX + 8],AX
  19. MOV AX,7070 MOV BX,AX MOV DX,[BX] MOV CX,[BX + 4] MOV BX,[BX + 8]   20. MOV BP,100 MOV word ptr [BP],300 AND AX,[BP] MOV [BP + 2],AX SUB AX,[BP + DI – 6]
  21. MOV SI,48 MOV AX,[SI] MOV BP,AX MOV DX,[BP + SI + 200] MOV CX,[BP]   22. OR AX,2002 MOV BX,AX MOV AX,[BX + 9] MOV [BX],AX ADD AX,[BX + SI + 4]
  23. MOV DI,20 MOV SI,13 MOV BX,AX MOV DX,[BX + DI] MOV CX,[BX + SI + 4] MOV AX,[DI + 4]   24. INC word ptr [BP] DEC byte ptr [DI] MOV AX,[BP + DI + 220] ADD AX,[BP] SUB DX,[DI] ADC AX,DX
  25. MOV BX,700 MOV CX,[BX] AND AX,CX MOV [BX + 8],AX MOV DX,[BX + DI + 7C2]    






Date: 2015-05-23; view: 462; Нарушение авторских прав

mydocx.ru - 2015-2019 year. (0.01 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию