Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Мнемоника команд передачи управления




Обозна-чение Выполняемая функция
Команды пересылки общего назначения
mov Пересылка значения второго операнда в первый операнд
push Помещение значения операнда в стек
pop Извлечение значения из стека и помещение его в операнд
xchG Обмен значениями между операндами
xlat Табличное преобразование одного кода в другой (перекодировка)
Команды ввода/вывода через порт
in Ввод данных (чтение порта)
out Вывод данных (запись в порт)
Команды пересылки адреса
lea Загрузка в первый операнд исполнительного адреса второго операнда
lds Загрузка первого операнда и регистра DS значением второго операнда
les Загрузка первого операнда и регистра ES значением второго операнда
Команды пересылки содержимого регистра флагов
lahf Пересылка в регистр AH флагов из регистра признаков
sahf Запись содержимого регистра AH в регистр флагов
pushf Сохранение содержимого регистра флагов в стеке
popf Извлечение слова из стека и помещение его в регистр флагов

Команда MOV имеет следующий формат в мнемонике ассемблера:

MOV dest,src,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти. Кроме этого в качестве dest и src могут быть использованы любые сегментные регистры, кроме CS. В этом случае, если один из операндов является сегментным регистром, то второй должен иметь либо регистровую адресацию, либо адресовать данные в памяти (кроме непосредственной адресации).

Эта команда пересылает значение второго операнда в первый операнд. При этом содержимое регистра флагов не изменяется.

Команда MOV имеет следующие форматы машинных кодов:

1) пересылка аккумулятора (AX или AL) в память или памяти в аккумулятор при прямой адресации памяти

101000 dw adr_low adr_high

2) пересылка из регистра в регистр или память или наоборот

100010 dw mod reg r/m disp_low disp_high

3) пересылка непосредственных данных в память

1100011 w mod 000 r/m disp_low disp_high data_low data_high

4) пересылка непосредственных данных в регистр

1011 w reg data_low data_high

5) пересылка сегментного регистра в регистр или память или наоборот

100011 d 0 mod 0 seg r/m disp_low disp_high

Примеры использования команды MOV:

MOV [123],AX ; пересылка содержимого аккумулятора ; в ячейку памяти со смещением 123 h ; относительно начала сегмента данных
MOV AX,[123] ; пересылка содержимого ячейки памяти со ; смещением 123 h относительно начала ; сегмента данных в аккумулятор
MOV DX,[BX + SI + 2] ; пересылка содержимого ячейки памяти ; в регистр
MOV [BX + SI + 2],DX ; пересылка содержимого регистра в ; ячейку памяти
MOV word ptr [123],12 ; пересылка непосредственных данных в память
MOV CX,123 ; пересылка непосредственных данных в регистр
MOV DS,AX ; пересылка содержимого регистра в ; сегментный регистр
MOV SS,[BX + 123] ; пересылка содержимого ячейки памяти в ; сегментный регистр
MOV AX,DS ; пересылка содержимого сегментного регистра ; в регистр
MOV [BX + 123],SS ; пересылка содержимого сегментного регистра ; в память

Команда PUSH имеет следующий формат в мнемонике ассемблера:

PUSH scr,

где операнд scr может иметь любой режим адресации, кроме непосредственной, или быть сегментным регистром.

Эта команда уменьшает содержимое регистра SP на 2 и затем пересылает слово, адресуемое своим операндом в элемент стека, находящийся по адресу SS:SP. При этом содержимое регистра флагов не изменяется. Важно заметить, что команда PUSH всегда помещает в стек 16-разрядные данные, т.е. при регистровой адресации ее операнда должны быть использованы только 16-разрядные регистры.

Команда PUSH имеет следующие форматы машинных кодов:

1) сохранение в стеке содержимого регистра

01010 reg

2) сохранение в стеке содержимого ячейки памяти

  mod 101 r/m disp_low disp_high

3) сохранение в стеке содержимого сегментного регистра

000 seg 110

Примеры использования команды PUSH:

PUSH AX ; помещение в стек содержимого регистра
PUSH [BX + DI + 1] ; помещение в стек содержимого ячейки памяти
PUSH CS ; помещение в стек содержимого CS

Команда POP имеет следующий формат в мнемонике ассемблера:

POP dest,

где операнд dest может иметь любой режим адресации, кроме непосредственной, или быть сегментным регистром.

Эта команда пересылает слово, находящееся по адресу SS:SP, в операнд dest, а затем увеличивает содержимое регистра SP на 2. При этом содержимое регистра флагов не изменяется. Важно заметить, что команда POP всегда извлекает из стека 16-разрядные данные, т.е. при регистровой адресации ее операнда должны быть использованы только 16-разрядные регистры.

Команда POP имеет следующие форматы машинных кодов:

1) извлечение из стека в регистр

01011 reg

2) извлечение из стека в ячейку памяти

  mod 000 r/m disp_low disp_high

3) извлечение из стека в сегментный регистр

000 seg 111

Примеры использования команды POP:

POP AX ; извлечение из стека в регистр
POP [BX + DI + 12]; ; извлечение из стека в ячейку памяти
POP DS ; извлечение из стека в сегментный регистр

Команда XCHG имеет следующий формат в мнемонике ассемблера:

XCHG dest,src,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, кроме непосредственной, если первый операнд имеет регистровую адресацию, и регистровую адресацию, если первый операнд адресует ячейку памяти.

Эта команда обменивает значения своих операндов. При этом содержимое регистра флагов не изменяется.


Команда XCHG имеет следующие форматы машинных кодов:

1) обмен содержимого регистра с аккумулятором (AX)

10010 reg

2) обмен содержимого регистра и регистра или памяти

1000011 w mod reg r/m disp_low disp_high

Примеры использования команды XCHG:

XCHG AX,BX ; обмен содержимого регистра и аккумулятора
XCHG BX,AX ; обмен содержимого аккумулятора и регистра
XCHG DX,[BX + 2] ; обмен содержимого ячейки памяти и регистра
XCHG [BX + 2],DX ; обмен содержимого регистра и ячейки памяти

Команда XLAT имеет в мнемонике ассемблера следующий формат:

XLAT

Эта команда не имеет операндов и использует содержимое регистра AL как смещение байта в 256-байтовой таблице, адресуемой DS:BX. Указанный байт замещает собой содержимое AL. Другими словами, выполнение команды XLAT заключается в помещении в регистр AL содержимого байта, находящегося в сегменте данных со смещением равным сумме содержимого регистров BX и AL. При этом содержимое регистра флагов не изменяется.

Команда XLAT имеет следующий формат машинного кода:

 

Пример использования команды XLAT:

MOV BX,20 ; помещаем в регист BX смещение таблицы перекодировки
MOV AL,5 ; помещаем в AL значение перекодируемого байта
XLAT ; осуществляем перекодировку

Команда IN имеет следующий формат в мнемонике ассемблера:

IN acc,port,

где acc – аккумулятор (AX или AL); port – непосредственный операнд или DX.

Эта команда передает байт или слово данных в аккумулятор из порта ввода. Порт указывается или непосредственным операндом со значением от 0 до 255, либо значением в регистре DX. При этом содержимое регистра флагов не изменяется.

Команда IN имеет следующие форматы машинных кодов:

1) чтение непосредственно заданного порта

1110010 w port

2) чтение из порта заданного в DX

1110110 w

При значении w = 0 данные из порта port помещаются в AL, а при w = 1 данные из порта port помещаются в AL, а из порта port + 1 – в AH.

Примеры использования команды IN:

IN AX,PORT_A ; чтение слова из портов PORT_A и PORT_A + 1
IN AL,PORT_B ; чтение байта из порта с номером PORT_B
IN AL,DX ; чтение байта из порта с номером заданным в DX

Команда OUT имеет следующий формат в мнемонике ассемблера:

OUT port,acc,

где acc – аккумулятор (AX или AL); port – непосредственный операнд или DX.

Эта команда передает содержимое аккумулятора в порт вывода. Порт указывается или непосредственным операндом со значением от 0 до 255, либо значением в регистре DX. При этом содержимое регистра флагов не изменяется.

Команда OUT имеет следующие форматы машинных кодов:

1) запись в непосредственно заданный порт

1110011 w port

2) запись в порт заданный в DX

1110111 w

При значении w = 0 данные из AL выводятся в порт port, а при w = 1 данные из AL выводятся в порт port, а из AH – в порт port + 1.

Примеры использования команды OUT:

OUT AX,PORT_A ; запись слова в порты PORT_A и PORT_A + 1
OUT AL,PORT_B ; запись байта в порт с номером PORT_B
OUT DX,AL ; запись байта в порт с номером заданным в DX

Команда LEA имеет следующий формат в мнемонике ассемблера:

LEA dest,src,

где dest – первый операнд, имеющий регистровую адресацию; scr – второй операнд, имеющий любой режим адресации, кроме регистровой и непосредственной.

Эта команда пересылает смещение адреса ее второго операнда в регистр, являющийся первым операндом. При этом значение регистра флагов не изменяется.

Команда LEA имеет следующий формат машинного кода:

  mod reg r/m disp_low disp_high

Примеры использования команды LEA:

LEA BX,[123] ; загрузка в регистр BX исполнительного адреса ; второго операнда, имеющего прямую ; адресацию
LEA SI,[BX + DI + 2] ; загрузка в SI исполнительного адреса второго ; операнда, имеющего базово-индексную ; адресацию

Команда LDS имеет следующий формат в мнемонике ассемблера:

LDS dest,src,

где dest – первый операнд, имеющий регистровую адресацию; scr – второй операнд, имеющий любой режим адресации, кроме регистровой и непосредственной.

Эта команда пересылает содержимое ячеек памяти, заданных своим вторым операндом, в пару регистров. Пересылаемые данные интерпретируются как дальний указатель памяти (полный адрес), составленный из сегмента и смещения. Cегментная составляющая адреса помещается в DS, а смещение – в регистр, заданный первым операндом. При этом значение регистра флагов не изменяется.

Команда LDS имеет следующий формат машинного кода:

  mod reg r/m disp_low disp_high

Примеры использования команды LDS:

LDS BX,[123] ; загрузка в регистр DS:BX содержимым ; двойного слова, адресуемого вторым ; операндом, имеющим прямую адресацию
LDS SI,[BX + DI + 2] ; загрузка в DS:SI содержимым двойного слова, ; адресуемого вторым операндом, имеющим ; базово-индексную адресацию

Команда LES имеет следующий формат в мнемонике ассемблера:

LES dest,src,

где dest – первый операнд, имеющий регистровую адресацию; scr – второй операнд, имеющий любой режим адресации, кроме регистровой и непосредственной.

Эта команда пересылает указатель (32-разрядный адрес, составленный из сегментной части и смещения), хранящийся в памяти и заданный своим вторым операндом в пару регистров: сегментная часть помещается в ES, а смещение – в регистр, заданный первым операндом. При этом значение регистра флагов не изменяется.

Команда LES имеет следующий формат машинного кода:

  mod reg r/m disp_low disp_high

Примеры использования команды LES:

LES BX,[123] ; загрузка в регистр ES:BX содержимым ; двойного слова, адресуемого вторым ; операндом, имеющим прямую адресацию
LES SI,[BX + DI + 2] ; загрузка в ES:SI содержимым двойного слова, ; адресуемого вторым операндом, ; имеющим базово-индексную адресацию

Команда LAHF не имеет операндов и помещает в регистр AH значения флагов SF, ZF, AF, PF и CF. При этом содержимое регистра флагов не изменяется. Эта команда имеет следующий формат машинного кода:

 

Значения флагов помещаются в регистр AH в формате:

(SF):(ZF): X :(AF): X :(PF): X :(CF),

где X – обозначает неопределенный бит.

Команда SAHF не имеет операндов и загружает определенные биты из регистра AH в регистр флагов. Эта команда имеет следующий формат машинного кода:

 

Содержимое регистра AH рассматривается в формате:

(SF):(ZF): X :(AF): X :(PF): X :(CF),

где X – обозначает неопределенный бит. При выполнении команды SAHF изменяются значения флагов SF, ZF, AF, PF и CF.

Команда PUSHF не имеет операндов и подобно команде PUSH сохраняет в стеке содержимое регистра флагов. При этом само содержимое этого регистра не изменяется. Данная команда имеет следующий формат машинного кода:

 

Команда POPF не имеет операндов и подобно команде POP извлекает из стека данные и помещает их в регистр флагов. При этом, естественно, все флаги изменяются. Данная команда имеет следующий формат машинного кода:

 

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

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

2. С помощью программы debug исследовать выполнение всех команд пересылки с любым возможным типом их операндов.

3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...