- •Министерство образования российской федерации ижевский государственный технический университет
- •1. Методика выполнения лабораторных работ
- •2. Основные сведения об ассемблере
- •2.1. Регистры процессора
- •2.2. Команды ассемблера
- •2.3. Прерывания ассемблера
- •4. Режимы адресации команд
- •5. Байт способа адресации
- •6. Режимы адресации переходов
- •7. Система команд
- •7.1. Команды пересылки
- •7.1.1. Общие команды пересылки данных
- •7.1.1.2. Xchg - перестановка
- •7.1.1.3. Xlat - перекодировка
- •7.1.1.7. Команда lahf - загрузка флагов в регистр ан
- •7.1.1.8. Sahf - установка флагов из регистра ан
- •7.1.2. Команды пересылки данных с использованием стека (стековые команды)
- •7.1.3. Команды ввода - вывода
- •1.4. Команды пересылки цепочек байт или слов (цепочечные команды)
- •7.1.4.1. Movs - пересылка строки байтов или слов
- •7.1.4.2. Movsb/movsw - пересылка строки байтов или слов
- •7.1.4.3. Lods - загрузка строки байтов или слов
- •7.1.4.8. Cmpsb/cmpsw - сравнение строки байтов или слов
- •7.1.4.9. Scas - сканирование строки байтов или слов
- •7.1.4.10. Scasb/scasw - сканирование строки байтов или слов
- •7.2. Арифметические команды
- •7.2.1. Команды сложения
- •7.2.2. Команды вычитания
- •7.2.3. Команды сравнения
- •7.2.4. Команды умножения
- •7.2.4.2. Imul - умножение знаковых величин
- •7.2.5. Команды деления
- •7.2.5.2. Idiv - деление знаковых величин
- •7.3. Логические команды
- •7.4. Команды сдвигов
- •7.5. Команды переходов (передачи управления)
- •7.5.1. Команды безусловных переходов
- •7.5.2. Команды условных переходов
- •7.5.3. Команды вызовов (подпрограммы)
- •7.5.4. Команды возвратов (из подпрограмм)
- •7.5.5. Команды управления циклами
- •7.5.6. Команды прерываний
- •7.6. Команды управления микропроцессором
- •8. Примеры выполнения лабораторных работ
- •9. Учебно-методическая литература
- •Описание команд отладчика debug
- •Команды процессора 8086
- •1. Команды пересылки данных
- •1.1. Общие команды пересылки данных
- •Xlat Перекодировка
- •Xchg Перестановка
- •1.2. Стековые команды
- •1.3. Команды ввода-вывода
- •In Ввод байта или слова из порта
- •1.4. Команды пересылки цепочек
- •2. Арифметические команды
- •2.1. Команды сложения
- •Inc Инкремент
- •2.2. Команды вычитания
- •2.3. Команды сравнения
- •2.4. Команды умножения
- •Imul Целое умножение знаковых величин
- •2.5. Команды деления
- •Idiv Целое деление знаковых величин
- •3. Логические команды
- •Xor Исключающее или
- •4. Команды сдвигов
- •5. Команды передачи управления
- •5.1. Команды вызова процедуры
- •5.2. Команды прерываний
- •Int Прерывание
- •Into Прерывание по переполнению
- •Iret Возврат из обработки прерывания
- •5.3. Команды условных переходов
- •5.4. Команды безусловных переходов
- •5.5. Команды управления циклами
- •6. Команды управления процессором
4. Режимы адресации команд
Режимом адресации называется способ определения операнда. Различают следующие режимы адресации данных:
1. Непосредственный режим адресации данных - данное длиной 8 или 16 бит являются частью команды.
2. Прямой режим адресации данных - 16-битный эффективный адрес данного является частью команды.
3. Регистровый режим адресации данных - данное находится в регистре.
4. Регистровый косвенный режим адресации данных - эффективный адрес данного находится в базовом регистре BX, или индексных регистрах SI, DI.
5. Регистровый относительный режим адресации данных - эффективный адрес равен сумме 8- или 16-битного смещения и содержимого базовых индексных регистров.
6. Базовый индексный режим адресации данных - эффективный адрес равен сумме содержимого базового и индексного регистров.
7. Относительный базовый индексный режим адресации данных - эффективный адрес равен сумме 8- или 16-битного смещения, базового и индексного регистров.
5. Байт способа адресации
Первый байт машинного кода команды может содержать либо префикс замены сегментов, либо код операции. Префикс замены сегментов имеет следующий вид:
001ХХ110, где биты ХХ определяют сегмент.
Таблица 3.
Префикс замены сегмента
XX |
Байт префикса замены сегмента |
Сегментный регистр |
00 |
26 |
ES |
01 |
2E |
CS |
10 |
36 |
SS |
11 |
3E |
DS |
Следовательно, если первый байт машинного кода команды не равен 26, 2Е, 36 или 3Е, то он содержит код операции и биты “d”, “w”. Бит “d” указывает направление передачи между операндом 1 и операндом 2. Если d=1, то направление в микропроцессор (в регистр из памяти или регистра). Если d=0, то направление из микропроцессора (из регистра в память или регистр). Бит “w” определяет длину операндов. Если w=1, то длина операнда - слово (два байта). Если w=0, то длина операнда - байт.
В командах с непосредственным операндом бит “d” не нужен, так как результат можно поместить только на место первого операнда. Но зато в этом формате необходимо определить размер непосредственного операнда. Для этой цели служат биты “s” и “w”, интерпретируемые следующим образом.
Таблица 4.
Размер непосредственного операнда
sw |
Размер непосредственного операнда |
00 |
один байт |
01 |
один байт |
10 |
два байта |
11 |
один байт, который расширяется со знаком до 16 бит |
В командах сдвига стоят биты “c” и “w”, где бит “c” определяет где находится число сдвигов. Если с=1, то число сдвигов задано в регистре CL. Если с=0, то осуществляется сдвиг на один разряд. Следующий байт команды является байтом способа адресации и состоит из следующих трех полей: mod, reg, r/m.
Значения полей mod, reg, r/m приведены в приложении. Два бита mod определяют адресацию регистра или памяти. Ниже поясняется их значение.
Таблица 5.
Значение поля mod
Значение поля mod |
Адресация операнда |
00 |
адрес ячейки памяти, смещение отсутствует |
01 |
адрес ячейки памяти и один байт смещения, который расширяется со знаком до слова |
10 |
адрес ячейки памяти и два байта смещения |
11 |
регистр |
Три бита reg (вместе с битом w) определяют конкретный восьми- или шестнадцатибитовый регистр.
Таблица 6.
Значение поля reg
-
reg
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
Три бита r/m (регистр/память) совместно с битами mod определяют способ адресации.
Таблица 7.
Значение поля r/m
mod
r/m |
00 |
01 |
10 |
11 w=0 w=1 |
||
000 сегментный регистр |
(BX)+(SI) DS |
(BX)+(SI)+D8 DS |
(BX)+(SI)+D16 DS |
AL |
AX |
|
001 сегментный регистр |
(BX)+(DI) DS |
(BX)+(DI)+D8 DS |
(BX)+(DI)+D16 DS |
CL |
CX |
|
010 сегментный регистр |
(BP)+(SI) SS |
(BP)+(SI)+D8 SS |
(BP)+(SI)+D16 SS |
DL |
DX |
|
011 сегментный регистр |
(BP)+(DI) SS |
(BP)+(DI)+D8 SS |
(BP)+(DI)+D16 SS |
BL |
BX |
|
100 сегментный регистр |
(SI) DS |
(SI)+D8 DS |
(SI)+D16 DS |
AH |
SP |
|
101 сегментный регистр |
(DI) DS |
(DI)+D8 DS |
(DI)+D16 DS |
CH |
BP |
|
110 сегментный регистр |
Data16 DS |
(BP)+D8 SS |
(BP)+D16 SS |
DH |
SI |
|
111 сегментный регистр |
(BX) DS |
(BX)+D8 DS |
(BX)+D16 DS |
BH |
DI |
Рассмотрим режимы адресации на примере команды OR (логическое “ИЛИ”). Эта команда выполняет поразрядное логическое сложение над битами двух операндов.
Объектный код данной команды имеет три формата (объектные коды команд приведены в приложении “Команды процессора 8086”):
1. Регистр/память с регистром
000010dw |
MOD REG R/M |
DISP LOW |
DISP HIGH |
2. Непосредственное значение с регистром/памятью
1000000w |
MOD 001 R/M |
DISP LOW |
DISP HIGH |
DATA |
DATA, если W=1 |
3. Непосредственное значение с аккумулятором (регистром АХ (АL))
0000110w |
DATA |
DATA, если W=1 |
1.Непосредственный режим адресации
Пример. OR CL,OF
Логическое сложение содержимого регистра CL и непосредственного значения OF. Данному режиму адресации соответствует второй формат объектного кода (непосредственное значение с регистром). Определим байт способа адресации (W, mod, r/m) :
w=0, т.к. размер операнда - 1 байт,
mod=11, т.к. сложение с регистром, а не с памятью,
r/m=001, что соответствует регистру.
Таким образом, объектный код команды OR CL,OFH имеет вид
100000001100100100001111
или в 16-й системе счисления 80C90F.
2. Регистровый режим адресации
Пример. OR DX,CX
Логическое сложение содержимого регистров DX и CX.
Данному режиму адресации соответствует первый формат объектного кода (регистр с регистром). Определим байт способа адресации (d, W, mod, reg, r/m ) :
d=0, т.к. reg описывает операнд 2, а r/m - операнд 1,
w=1, т.к. размер операнда - слово,
mod=11, т.к. сложение с регистром, а не с памятью,
reg=001, что соответствует регистру CX,
r/m=010, что соответствует регистру.
Таким образом, объектный код команды ORCX,DX имеет вид
0000100111001010
или в 16-й системе счисления O9CA.
3. Регистровый косвенный режим
Пример. OR CL,byte ptr [BX]
Логическое сложение регистра CL с ячейкой памяти по адресу, находящемуся в BX.
Данному режиму адресации соответствует первый формат объектного кода (память с регистром).
Определим байт способа адресации (d, W, mod, reg, r/m):
d=1, т.к. reg описывает операнд 1, а r/m - операнд 2,
w=0, т.к. размер операнда - байт,
mod=00, что соответствует регистру BX,
reg=001, что соответствует регистру CL,
r/m=111, что соответствует регистру BX.
Таким образом, объектный код команды имеет вид
0000101000001111
или в 16-й системе счисления 0A0F.
4. Регистровый относительный режим адресации
Пример: OR DL,byte ptr [BX+48]
Логическое сложение содержимого регистра DL с ячейкой памяти по адресу BX+48H.
Данному режиму адресации соответствует первый формат объектного кода (регистр/память с регистром).
Определим байт способа адресации (d, W, mod, reg, r/m):
d=1, т.к. reg описывает операнд 1, а r/m - операнд 2,
w=0, т.к. размер операнда - байт,
mod=01, что соответствует BX+D8 ,
reg=010, что соответствует регистру DL ,
r/m=111, что соответствует BX+D8.
Таким образом, объектный код команды имеет вид
000010100101011101001000
или в 16-й системе счисления 0А5748.
5. Базовый индексный режим адресации
Пример: OR AX,word ptr [BP+DI]
Логическое сложение содержимого регистра AX с ячейкой памяти по адресу BP+DI.
Данному режиму адресации соответствует первый формат объектного кода.
Определим байт способа адресации :
d=1, т.к. reg описывает операнд 1, а r/m - операнд 2,
w=1, т.к. размер операнда - слово,
mod=00, что соответствует BP+DI,
reg=000, что соответствует регистру AX,
r/m=011, что соответствует BP+DI.
Таким образом, объектный код команды имеет вид
0000101100000011
или в 16-й системе счисления 0B03.
6. Относительный базовый индексный режим адресации
Пример: OR CL,byte ptr [BX+SI+0084]
Логическое сложение содержимого регистра CL с ячейкой памяти по адресу BX+SI+0084.
Данному режиму адресации соответствует первый формат объектного кода.
Определим байт способа адресации:
d=1, т.к. reg описывает операнд 1, а r/m - операнд 2,
w=0, т.к. размер операнда - байт,
mod=10, что соответствует BX+SI+D16,
reg=001, что соответствует регистру CL,
r/m=000, что соответствует BX+SI+D16.
Таким образом, объектный код команды имеет вид
00001010100010001000010000000000
или в 16-й системе счисления 0А888400.