Студопедия

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

Разделы сайта

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






Команда обмена операндами - XCHG






Команда обмена XCHG (exchange - обменять) меняет между собой значения двух регистров или регистра и ячейки памяти. Операнды должны иметь одинаковый тип данных (байт− байт, слово− слово и т.д.). Несколько примеров: XCHG АХ, ВХ; Обменять значения двух словных регистров.

XCHG AL, B; Обменять значения двух байтовых регистров.

XCHG WORD_MEM, DX; Поменять значения ячейки памяти и регистра.

XCHG DL, BYTE­_ MEM; Поменять значения регистра и ячейки памяти.

3.2 Команды процессоров Intel 8086 – Intel 80386

Наиболее распространенные непривилегированные команды этих процессоров перечислены в таблице 3.6. Команды сгруппированы по выполняемым функциям:

1. Команды пересылки данных осуществляют обмен информацией между регистрами, ячейками памяти и портами ввода–вывода.

2. Арифметические команды выполняют арифметические операции над двоичными или двоично–десятичными числами.

3. Команды манипулирования битами выполняют арифметические и логические сдвиги, циклические сдвиги, логические операции над регистрами и ячейками памяти.

4. Команды обработки строк данных перемещают, сравнивают и сканируют строки данных.

5. Команды управления процессором устанавливают и сбрасывают флаги состояний, меняют режимы функционирования процессора.

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

7. Команды прерывания отвлекают процессор на обработку аппаратных или программных прерываний.

В таблице приведены мнемокоды команды. Для большинства команд, описаны функции команды с кратким алгоритмом выполнения. Он в сокращенной форме описывает ход исполнения команды, а также место нахождение приемника и иточника. Если команда изменяет регистр флагов, то указано состояние регистра флагов после исполнения команды.

Для понимания функционирования алгоритма, приведен пример использования команды. Например для команд пересылки MOV пр, ист, он дан в следующем виде: Пр: = ист. R / M, R / М / IM. Эту запись необходимо понимать так: приемнику присваивается содержимое источника. Приемником может быть регистр или ячейка памяти, а источником – регистр, ячейка памяти или непосредственное значение. Причем пересылки можно выполнять только из регистра в ячейку памяти или из ячейки памяти в регистр. Необходимо помнить, что пересылки типа «память – память» запрещены, также как и пересылки непосредственных данных в сегментные регистры. Данные сначала помещаются из памяти в один из регистров процессора, а затем из регистра пересылаются в ячейку памяти. В таблице 3.5 поясняются аббревиатуры и сокращения, используемые в описании алгоритма команд.

Таблица 3.5 − Пояснения используемых аббревиатур и сокращений

Сокращения, аббревиатура Значение
Пр. Приемник операнда
Ист. Источник операнда
Label Метка команды
R/M Операндом является содержимое регистра /или данных из памяти
Im Операндом является 8, 16 или 32- битовое непосредственное значение или символьное имя
Пр.: = ист. Присвоить значение, т.е. переслать содержимое источника в приемник
SS: [SP] Адрес операнда определяется суммой содержимого регистров SS и SP
AL 7 7- й разряд регистра AL
* Указанный разряд регистра флагов принимает значение 0 или 1.
-- Команда не влияет на флаг.
0 или 1 Новое состояние флага.
? Состояние флага не определено.

Таблица 3.6 Система команд процессоров Intel 8086 – Intel 80386

Команды пересылки данных
Пересылка данных без преобразования
Мнемокод Описание команд Флаги, пояснения, примеры.
OF DF IF TF SF ZF AF PF CF
MOVпр, ист   Пересылка операнда Пр: = ист. R / M, R / М / IM -- -- -- -- -- -- -- -- --
Mov ax, bx; Копирует содержимое ВХ в АХ. Mov ax, tab; Копирует содержимое ячейки Tab в АХ. Mov вl, 78; Переслать const в регистр
MOVSB MOVSW MOVSD Пересылка цепочки байт, слов, двойных слов с автомодифи-кацией индексов. Пр: = ист. ES: [(E)DI]: =DS: (E)SI] -- -- -- -- -- -- -- -- --
Cld; Направление вперед. Lds si, tab1; Указали источник. Les di, tab2; Указали приемник. Mov cx, 5; Счетчик повторения Rep Movsw; Копирует 5 слов
PUSHист.   Запись операнда в стек SS: [SP]: = ист. Ист – M/ R/ IM -- -- -- -- -- -- -- -- --
Push ax; Заносит содержимое АХ в стек по адресу [ss: sp]
PUSHA Запись в стек значений регистров AX, CX, DX, BX, SP, BP, SI, DI. -- -- -- -- -- -- -- -- --
Pusha; Сохраняет в стеке по адресу SS: [SP] содержимое всех 16- разрядных РОН.
PUSHAD   Запись в стек значений регистров EAX, ECX, EDX, EBX ESP, EBP, ESI, EDI. -- -- -- -- -- -- -- -- --
Pushad; Сохраняет в стеке по адресу SS: [SP] содержимое 32- разрядных регистров общего назначения.
POPпр. Восстановить операнд из стека Пр: = SS: [SP]; M/ R: = SS: [SP]   -- -- -- -- -- -- -- -- --
Рop ax; Извлекает из вершины стэка слово и записывает его в регистр АХ Pop mem; или ячейку памяти.
                                     

 

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры.  
OF DF IF TF SF ZF AF PF CF  
POPA Восстановить из стека регистры DI, SI, BP, SP, BX, DX, CX, AX. -- -- -- -- -- -- -- -- --  
Popa; Извлекает 8 слов из стека, помещает их в указанные регистры и увеличивает SP на 16.  
POPAD Загрузить из стека регистры EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX. -- -- -- -- -- -- -- -- --
Popad; Копирует 8 двойных слов из стека, в регистры и увеличивает регистр SP на 32.
XCHG пр, ист Обмен Пр< = > ист. Приемник - регистр, источник- регистр или ячейка памяти. -- -- -- -- -- -- -- -- --
Xchg ax, bx; Взаимный обмен между регистрами Xchg ax, memили памятью и регистром.
XLAT     Преобразование кодов. AL: = DS: [BX + AL] -- -- -- -- -- -- -- -- --
Применяется для трансляции таблиц. Пример использования команды XLATприведен в разделе 5.4.
Пересылка данных с преобразованием  
MOVZX пр, ист. Пересылка операнда с расширением нулями до размера приемника. Пр: = [0] + ист. R, R/M. -- -- -- -- -- -- -- -- --  
Movzx ax, 62H; Перемещает 62Н в AL и 00 в AH.  
MOVSX пр, ист. Пересылка операнда со знаковым расширением до размера приемника Пр: = [3H] + ист. -- -- -- -- -- -- -- -- --  
Movsx ax, 92h; Перемещает 92Н в AL и FF в AH.    
Команды ввода-вывода
INпр, ист Ввод операнда из порта в регистр. Пр.- рег. (al, ax, eax) Ист. - im (порт №), или содержимое рег. DX. -- -- -- -- -- -- -- -- --  
Mov dx, 20; Номер порта для команды IN помещаем в DX. IN eax, dx; Вводит двойное слово в EAX. Из порта 20.  
                                           

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
OUTпр, ист Вывод операнда из регистра в порт Пр.- ib (порт или содержимое DX) Ист.- рег. (al, ax, eax). -- -- -- -- -- -- -- -- --
Mov al, 20h; Загружает код пробела в AL. Out 30, al; Выводит его в порт №30.
Команды пересылки адреса
LEAпр, ист. Загрузка исполнительного адреса в регистр Пр. – регистр Ист. - яч. памяти/рег. -- -- -- -- -- -- -- -- --
Lea bx, mem1; Загрузка адреса ячейки памяти mem1 в регистр BX..  
LDSпр, ист. Загрузка полного адреса в приемник. Пр.- это DS и один из РОН. Ист.- адрес ячейки памяти. -- -- -- -- -- -- -- -- --
Lds di, tab1; Загрузка адреса сегмента данных в регистр DS, а смещение tab1 в DI.
LESпр, ист. Загрузка полного адреса в приемник. Пр. – ES и один из РОН. Ист.- адрес ячейки памяти. -- -- -- -- -- -- -- -- --
Les si, tab2; Загрузка адреса сегмента данных в ES, а смещение tab2 в регистр SI.  
LFSпр, ист. Загрузка полного адреса в приемник Пр. - FS. и один из РОН. Ист. - адрес ячейки памяти. -- -- -- -- -- -- -- -- --
Lfs ax, tab3; Загрузка адреса сегмента данных в FS, а смещение tab3 в регистр в AX.  
LGSпр, ист. Загрузка полного адреса в приемник. Пр. - GS. и один из РОН. Ист.- адрес ячейки памяти. -- -- -- -- -- -- -- -- --
Lgs cx, tab4; Загрузка адреса сегмента данных в GS, а смещение tab3 в регистр в CX.  
                                     

 

Продолжение таблицы 3.6

Арифметические команды
Команды сложения
Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
ADDпр, ист. Сложение операндов Пр: = пр + ист r/m/i, r/m/im. * -- -- -- * * * * *
Add ax, memw; Добавить содержи- мое ячейки памяти к регистру AX. Add memw, ax; или наоборот. Add al, 10; Добавить 10 к AL. Add ax, bx; Сложить два регистра.
ADC пр, ист. Сложение операндов и флага переноса СF. Пр: = пр + ист + CF r/m/i, r/m/im. * -- -- -- * * * * *
Mov ax, 956; Загружает 3ВСН в АХ. Mov bx, 373; Загружает 175Н в ВХ. Add al, bl; Суммирует 0ВСН и 75Н. Результат: 31Н, CF=1. Adc ah, bh; Суммирует 3, 1 и CF, результат в АХ = 531Н (1329).
AAA ASCII- коррекция AL после сложения Если AL > 9, то инкремент AL на 6. AL: =0000XXXX+6 Установить AL: = 0000XXXX AH: = AH + 1. ? -- -- -- ? ? * ? *  
Mov al, 38; Загружаем слагаемые представленные в ASCII формате. Mov bl, 34; AL и BL. Add al, bl; К AL прибавили 4. Aaa; AX=0102H, CF=AF=1 OR ax, 3030H; Преобразуем результат в ASCII код.  
DAA Десятичная коррекция AL после сложения упакован- ных десятичных (ВСД) чисел. ? -- -- -- * * * * *  
Mov ax, 18H; 18ВСД в AL. Add al, 6; AL + 6BCD =1ЕН. Daa; в АХ 24ВСД, CF=0, AF=1.  
INCпр Инкремент приёмника. Пр.: = пр. + 1 Пр. – рег./память. * -- -- -- * * * * --  
Mov ax, 956; Загружает 956 (3ВСН) в АХ. Inc ax; Теперь в АХ 957 (3ВДН), то есть содержимое регистра увеличивается на единицу.  
                                                           

 

Продолжение таблицы 3.6

Команды вычитания
Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
SUBпр, ист. Целочисленное вычитание. Пр.: = пр. – ист. * -- -- -- * * * * *
Mov ax, 1329; Загружает 531H в AX, Mov bx, 373; Загружает 175H в BX, Sub ax, bx; AX = 956 (3BCH).
SBBпр, ист. Вычесть с заемом. Вычитает из приемника источник и содержимое флага CF. Пр.: = пр. – ист. – CF * -- -- -- * * * * *
Mov ax, 1329; Загрузить 531H в AX. Mov bx, 373; Загрузить 175H в BX. Sub al, bl; Вычесть 75H из 31H, Sbb ah, bh; Вычесть 1 и CF из 5, давая 3. Полная разность в AX = 956 (3BCH)
DECпр. Декремент операнда. Уменьшение операнда на 1. Пр.: = пр. – 1 * -- -- -- * * * * --
Mov ax, 956; Загружает 3ВСН в АХ. Dec ax; Уменьшает АХ на 1, АХ = 955 (3ВВН).
NEGпр.   Изменение знака. Инвертирование и инкремент операнда. Пр.: = пр. + 1 или Пр.: = 0 – пр. * -- -- -- * * -- * *
Mov ax, 579BH; В АХ 579ВН. Neg ax; В АХ 0А865Н (то же что и вычитание операнда из нуля.
AAS   ASCII- коррекция AL после вычитания Если AL > 9 То AL: =0000XXXX-6 Установить AL: =0000XXXX AH: =AH - 1 * -- -- -- ? ? * ? *
Mov al, 34Н; Загружаем вычитаемые представленные в ASCII формате Mov bl, 38Н; в AL и BL. Sub al, bl; Из AL вычли 8. Aas; AX=FF06H, CF=AF=1. OR ax, 0030H; Преобразуем результат в ASCII код.
CMPпр., ист. Сравнение. Вычитает второй операнд из первого, устанавливая признаки в регистре флагов. Пр. – ист. * -- -- -- * * * * *
Mov ax, 956; Загружает 3ВСН в АХ Mov bx, 373; Загружает 175Н в ВХ Cmp ax, bx; Вычитает из ax, bx и устанавливает флаги. В АХ осталось 956.
                                                     

Продолжение таблицы 3.6

Команды умножения
Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
MULист. Беззнаковое умножение. AX: = AL × ист.   * -- -- -- ? ? ? ? *
Mov al, 80H; В АL загружается 128. Mov bl, 47H; В ВL загружается 64. Mul bl; В AX результат -2000 (7D0).  
IMULист. IMUL пр, ист. Знаковое умножение AX: = AL × ист. DX: AX = AX × ист EDX: EAX: = EAX × ист * -- -- -- ? ? ? ? *
Mov al, 80H; В АL загружается -128. Mov bl, 47H; В ВL загружается 64. Imul bl; В AX результат E000Н.
AAM Преобразование данных из ASCII кода, в двоичный код после умножения. Делит AL на 10. Частное в AH. Остаток в AL. ? -- -- -- * * ? * ?
Mov al, 35H; Сомножители в ASCII Mov cl, 39H; формате. And al, 0FH; Преобразуем в And cl, 0FH; двоичный код. Mul cl; Умножим AL на CL. AAM; Преобразуем результат. OR ax, 3030H; Представим его в ASCII формате.  
Команды деления
DIVист. Беззнаковое деление. Пр: = DX: AX / ист. Ист.-DB -байт Частное AL: = AX/ист Остаток AH: = AX/ист Ист.- DW- слово AX: DX: = DX: AX/ ист Ист. – DD- дв. слово EDX, EAX: =EDX, EAX / ист.   ? -- -- -- ? ? ? ? ?
Mov al, byte1; Переслать в AL байт. Sub ah, ah; Расширить делимое. Div byte2; Деление байта на байт. Mov ax, word1; В АН слово. Div byte1; Деление слова на на байт. Mov dx, word2; В DX слово2. Mov ax, word3; В AX слово3. Div word1; Дв.слово на слово Mov edx, dword4; В ЕDX дв.слово. Mov eax, dword5; В ЕAX дв.слово. Div dword6; Деление учетверенного слова на двойное слово  
                                     

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
IDIVист. Знаковое деление. Выполняет деление знаковых чисел. Пр: = пр / ист. ? -- -- -- ? ? ? ? ?
Mov ax, 956; Загрузим 3ВСН в АХ. Mov bx, -300; В BX 0FED4H. Idiv bx; AL = -3 (0FFFDH) в AH =56.
  AAD Преобразование данных в ASCII-коде в двоичный код перед делением. AL: = (AL+ (10× AH)) ? -- -- -- * * ? * ?
Mov ax, 1405H; Делимое в АХ. Mov bl, 3; Делитель загрузим в ВХ. And 0F0F; Распакуем делимое. Aad; Коррекция делимого.(в АХ 45) Idiv BL; Результат в АХ = 15.
Команды расширения знака
CBW Преобразовать байт в слово. AH 8- 15: = AL 7 -- -- -- -- -- -- -- -- --
Mov al, 0FCH; Загрузим – 4 в AL. Cbw; В АХ 0FFFCH (- 4).
CWD Преобразовать слово в двойное слово DX 0- 15 : = AX 15 -- -- -- -- -- -- -- -- --
Mov ax, 0006H; Загрузим 6 в АХ. Cwd; DX: AX: = 0000: 0006H.  
CWDE Преобразовать слово в расширенное знаковое слово EAX 16- 31 : = AX 15 -- -- -- -- -- -- -- -- --
Mov ax, 0FFFCH; Загрузим -4 в АХ. CWDE; EAХ: = 0FFFFFFFCH, (-4).  
CDQ Преобразовать двойное слово в учетверенное слово EDX 0 –31 : = EAX 31 -- -- -- -- -- -- -- -- --
Mov eax, 0FFFFFFFCH; -4 в EАХ. CDQ; EDХ: EAX = 0FFFFFFFFH: 0FFFFFFFCH (- 4)
Команды манипулирования битами
Логические команды
AND пр., ист Конъюкция ^ (логическое И) Пр: = пр. ист. R: = R R, M: = R M, R: = R M, R/M: = R/M im   -- -- -- * * ? *  
Mov ax, 5963H; Загружает 16– ричное число в АХ. Mov bx, 6CA5H; Загружает 16– ричное число в АХ. And ax, bx; Теперь АХ содержит 4821Н.  
                                                       

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
OR пр, ист. Дизъюнкция (логическое ИЛИ) Пр: = пр. ист. R: = R R, M: = R M, R= R M, R: = R im, M: = M im.   -- -- - * * ? *  
Mov ax, 5963H; Загружает 16– ричное число в АХ. Mov bx, 6CA5H; Загружает 16– ричное число в АХ. Or ax, bx; Теперь АХ содержит 7DE7H.  
XOR пр, ист Неравнозначность (исключающее ИЛИ) Пр: = пр. ^ ист. R: = R ^ R, M: = R ^ M, R: = R ^ M, R: = R ^ im, M: = M ^ im   -- -- -- * * ? *  
Mov ax, 5963H; Загружает 16– ричное число в АХ. Xor ax, 6CA5H; AX = 35C6H; SF= 0, PF= 1. Команда XOR применяется для реализации функций проверки и сравнения бит.  
NOTпр. Инвертирование (логическое НЕ) пр: = пр; , -- -- -- -- -- -- -- -- --
Mov ax, 579BH; Загрузим данные в АХ. Not ax; Получим в АХ 0А864Н
TEST пр., ист. Сравнить логически и установить флаги SF, ZF, RF. Пр: = пр. ^ ист. R/M R, R/M im   -- -- -- * * ? * *
Mov ax, 9563H; Загрузим данные в АХ. Test ax, 0C6A5H; SF = 1, ZF = 0, PF = 1 Jnz M 1; Переход на метку М.
Команды сдвига
SAL Пр., счетчик (n) Сдвиг арифметичес-кий влево n CF, пр: = пр., CL/im n- количество сдвигов, заносится в CL, если 2< n < 31, и im, если равно 1. * -- -- -- * * ? * *
Mov ax, 1110100101010111B; В АХ 0Е957Н. Mov cl, 4; В CL количество сдвигов. Sal ax, cl; В АХ 1001010101110000В, - 9570Н, CF =0 Sal ax,; В АХ 0010101011100000В, CF=1
                                       

 

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
SAR пр., счетчик (n) Сдвиг арифметичес-кий вправо n CF, пр: = пр., CL/im n- количество сдвигов, заносится в CL, если 2< n < 31, и im, если равно 1. * -- -- -- * * ? * *
Mov ax, 1110100101010111B; В АХ 0Е957Н. Mov cl, 4; В CL количество сдвигов. Sar ax, cl; В АХ 1111111010010101В, -0FE95Н. CF = 0 Sar ax, 1; В АХ 1111111101001010В CF = 1
SHL пр., Счетчик (n) Сдвиг логический влево n CF, пр: = пр, CL/im n- количество сдвигов, заносится в CL, если 2< n < 31, и im, если равно 1. * -- -- -- * * ? * *
Mov ax, 1110100101010111B; В АХ 0Е957Н. Mov cl, 4; В CL количество сдвигов. Shl ax, cl; В АХ 1001010101110000В, - 9570Н. Shl ax, 1; В АХ 0010101011100000В.
  SHR пр., счетчик (n)     Сдвиг логический вправо n CF, пр: = пр, CL/im n- количество сдвигов, заносится в CL, если 2< n < 31, и im, если равно 1. * -- -- -- * * ? * *
Mov ax, 1110100101010111B; В АХ 0Е957Н. Mov cl, 4; В CL количество сдвигов. Shr ax, cl; В АХ 0000111010010101В, 0E95Н. Shr ax, 1; В АХ 0000011101001010В  
RCL пр., счетчик (n)   Сдвиг циклический влево с флагом переноса. Биты, выдвигаемые с одного конца операнда, вводятся через CF с другого конца. n CF, пр.= пр. CF. n макс. = 31 * -- -- -- -- -- -- -- *
Mov ax, 45EAH; Данные в АХ. Mov CL, 4; Кол-во бит сдвига в CL STC; Занести в CF 1. RCL ax, cl; В АХ 5ЕААН. CF = 0 Mov Tab, 5F64H; Данные в ячейку Tab. RCL Tab, cl; В яч. Tab F642H. CF=1
                                                                     

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
    RCR пр., счетчик (n) Сдвиг циклический вправо с флагом переноса. Биты, выдвигаемые с одного конца операнда, циклически вводятся в него через CF с другого конца. n максимальное = 31 * -- -- -- -- -- -- -- *
Mov ax, 45EAH; Данные в АХ. Mov CL, 4; Количество бит сдвига (n) в CL STC; Занести в CF 1. RCR ax, cl; В АХ 545ЕН. CF = 1 Mov Tab, 4F64H; Данные в ячейку Tab. RCR Tab, cl; В яч. Tab F64AH. CF=0
ROL пр., счетчик (n) Сдвиг циклический влево. Биты, выдвигаемые с одного конца операнда, вводятся в него с другого конца. n максимальное = 31 * -- -- -- -- -- -- -- *
Mov ax, 45EAH; Данные в АХ. Mov CL, 4; Кол-во бит сдвига в CL ROL ax, cl; В АХ 5ЕA4Н. Mov Tab, 4F64H; Данные в ячейку Tab. ROL Tab, cl; В ячейке Tab F644H.
ROR пр, счетчик (n) Сдвиг циклический вправо. Биты, выдвигаемые с одного конца операнда, в циклически водятся в него с другого конца. n максимальное =31 * -- -- -- -- -- -- -- *
Mov ax, 45EAH; Данные в АХ. Mov CL, 4; Кол-во бит сдвига в CL ROR ax, cl; В АХ A45ЕН. Mov Tab, 4F64H; Данные в ячейку Tab. ROR Tab, cl; В ячейке Tab 44F6H.  
Операции с битами и строками битов
BTбаза, смещение Проверка бита. Указанный в базе и смещении бит из источника пересылается в CF CF: = бит источника. -- -- -- -- -- -- -- -- *
Mov ax, 6652h; Данные в АХ. BT ax, 1; Первый бит данных (1) в CF. Jb met1; Передача управления в met1. BT tab, 31; 31-й бит данных tab в CF. Jae met2; Если CF=0, переход в met2.
                                                         

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
BTSбаза, смещение Проверка и установка бита. Бит по адресу: база +смещение: = 1. BTS R/M, R/ im -- -- -- -- -- -- -- -- *
Выбирает бит и устанавливает в 1. Mov ax, 6652h; Данные в АХ. BTS ax, 2; Устанавливает 2-й бит в 1. В АХ 6656Н, в CF занесется 0.
BTRбаза, смещение Проверка и сброс бита. Бит по адресу: база +смещение: = 0.BTR R/M, R/ im -- -- -- -- -- -- -- -- *
Выбирает бит и устанавливает в 0. Mov ax, 6652h; Данные в АХ. BTR ax, 1; Устанавливает 1-й бит в 0. В АХ 6650Н, в CF занесется 1.
BTC база, cмещение Проверка и инверсия бита. Инвертировать бит по адресу: база +смещение. -- -- -- -- -- -- -- -- *
Mov ax, 6652h; Данные в АХ. BTC ax, 1; Инверсия первого бита. Теперь в АХ 6650Н, в CF -1.
BSFпр., ист. Прямой поиск бита. Пр: = N первого единичного бита источника. -- -- -- -- -- * -- -- --
Mov ax, 6650h; Данные в АХ. BSF вх, ах; В ВХ заносится 4. Mov tab, 6400h; Данные в ячейку tab. BSF вх, tаb; В ВХ заносится 10.
BSR пр., ист. Обратный поиск бита. Пр: = N первого единичного бита источника при сканировании источника с младших разрядов Mov ax, 6650h; Данные в АХ. BSR вх, ах; В ВХ заносится 11. Mov tab, 6400h; Данные в ячейку tab. BSR вх, tаb; В ВХ заносится 1.
Команды обработки строк
Команды сравнения строк
REP REPE REPNE REPZ REPNZ Повторять Повторять, пока равно. Повторять, пока не равно. Повторять, пока ноль. Повторять, пока не ноль. Префиксы повторений для строковых команд. Количество повторений в регистре СХ или (ЕСХ). При каждом выполнении команды СХ или (ЕСХ) уменьшаются на 1.
                                           

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
* -- -- -- * * * * *
CMPS пр., ист.     Сравнить строки. Вычитает из источника приемник. DS: [(E)SI]- ES: [(E)DI] IF DF= 1, (E)DI: = (E)DI-1, (2), (4), (E)SI: = (E)SI- 1, (2), (4) CLD; Установить флаг DF в 0. Mov cx, 100; Установить счетчик цикла на 100. Repe Cmps tab1, tab2; Сравнивать 100 элементов до нахождения несовпадающих.
CMPSВ Сравнить строки байтов. DS: [(E)SI]- ES: [(E)DI] IF DF= 0, то (E)DI: = (E)DI+1 (E)SI: = (E)SI +1 * -- -- -- * * * * *
STD; Установить флаг DF в 1. Mov cx, 100; Установить счетчик цикла на 100. Repne Cmpsb tab1, tab2; Сравнивать 100 байтов до нахождения совпадающих.
CMPSW   Сравнить строки слов.   [DS[E)SI]-[ES[E)DI] IF DF: = 0, то (E)DI: = (E)DI+ 2 (E)SI: = (E)SI+ 2 IF DF: = 1, то (E)DI: = (E)DI- 2 (E)SI: = (E)SI- 2   * -- -- -- * * * * *
STD; Установить флаг DF в 1. Mov cx, 100; Установить счетчик цикла на 100. Repne Cmpsw tab1, tab2; Сравнивать 100 слов до нахождения совпадающих. Je m1; При совпадении, передать управление в m1.
CMPSD   Сравнить строки двойных слов.   DS: [(E)SI]- ES: [(E)DI] IF DF: = 0, то (E)DI: = (E)DI+ 4 (E)SI: = (E)SI+ 4 IF DF: = 1, то (E)DI: = (E)DI- 4 (E)SI: = (E)SI- 4   * -- -- -- * * * * *
CLD; Установить флаг DF в 0. Mov cx, 100; Установить счетчик цикла на 100. Repne Cmpsd tab1, tab2; Сравнивать 100 двойных слов, до нахождения совпадающих. Je m1; Передать управление в m1, при совпадении.
                                     

Продолжение таблицы 3.6

Команды пересылки строк
Мнемокод Описание команд Флаги, пояснения, примеры
    OF DF IF TF SF ZF AF PF CF
MOVS Пр., ист.   Пересылать строковые данные Пр: = ист ES: [DI]: = DS: [SI] СХ: = СХ-1 -- -- -- -- -- -- -- -- --
CLD; Установить DF = 0. Lea SI, tabist; Адрес источника в SI, Lea DI, ES: tabpr; а приемника в DI. Mov CX, 100; Кол. элементов в СХ Rep Movs tabpr, tabist; Переслать 100 элементов.
MOVSB Переслать строку байт. ES: [DI]: = DS: [SI] IF DF: = 0, то DI: = DI+ 1 SI: = SI+ 1 IF DF: = 1, то DI: = DI- 1 SI: = SI- 1 -- -- -- -- -- -- -- -- --
CLD; Установить DF = 0. Lea SI, tabist; Адрес источника в SI, Lea DI, ES: tabpr; а приемника в DI. Mov CX, 100; Кол. элементов в СХ Rep Movs tabpr, tabist; Переслать 100 байт.
MOVSW Пересылать строку слов. ES: [DI]: = DS: [SI] IF DF: = 0, то DI: = DI+ 2 SI: = SI+ 2 IF DF: = 1, то DI: = DI- 2 SI: = SI- 2 -- -- -- -- -- -- -- -- --
CLD; Установить DF = 0. Lea SI, tabist; Адрес источника в SI, Lea DI, ES: tabpr; а приемника в DI. Mov CX, 100; Кол. элементов в СХ. Rep Movs tabpr, tabist; Переслать 100 слов.
MOVSD Пересылать строку двойных слов. ES: [DI]: =DS: [SI] IF DF: = 0, то [(E)SI]: = [(E)SI+ 4] [(E)DI]: =[(E)DI+ 4] IF DF: = 1, то [(E)DI]: = [(E)DI- 4] [(E)SI]: = [(E)SI- 4] -- -- -- -- -- -- -- -- --
CLD; Установить DF = 0. Lea SI, tabist; Адрес источника в SI, Lea DI, ES: tabpr; а приемника в DI. Mov CX, 100; Кол. Элементов в СХ. Rep Movs tabpr, tabist; Переслать 100 двойных слов.
                                       

 

Продолжение таблицы 3.6

Операции со строками символов  
Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
LODSист. Чтение из строки. AL, (AX), (EAX): = DS: [ (E)SI] IF DF = 0, то [(E)SI]: = [(E)SI + 1, (2), (4)] IF DF =1, то [(E)SI]: = [(E)SI - 1, (2), (4)] -- * -- -- -- -- -- -- --
Lea SI, tab1; Смещение tab1 в SI, а Lea DI, ES: tab2; смещение tab2 в DI. Mov CX, 200; Счетчик элементов. Repe Cmps tab1, tab2; Искать совпадающие. Je met1; Совпали? Переход на met1. Met1: Dec SI; Подправим регистр SI. Lods tab1; Элемент в AL, (AX), (EAX).
LODSB   Чтение байта из строки. AL: = DS: [(E)SI ] IF DF= 0, то [(E)SI]: = [(E)SI+1] IF DF= 1. то [(E)SI]: = [(E)SI-1] -- * -- -- -- -- -- -- --
Lea SI, tab1; Смещение tab1 в SI, а Lea DI, ES: tab2; смещение tab2 в DI. Mov CX, 200; Счетчик элементов. Repe Cmpsb; Искать совпадающие. Je met1; Совпали? Переход на met1. Met1: Dec SI; Подправим регистр SI. Lodsb; Элемент в AL.
LODSW   Чтение слова из строки. AX: = [ DS: (E)SI ] IF DF= 0. то [(E)SI]: = [(E)SI+2] IF DF= 1. то [(E)SI]: = [(E)SI-2] -- * -- -- -- -- -- -- --
Lea SI, tab1; Смещение tab1 в SI, Lea DI, ES: tab2; а смещение tab2 в DI. Mov CX, 200; В СХ элементов. Repe Cmpsw; Искать совпадающие. Je met1; Совпали? Переход на met1. met1: Mov SI, SI-2; Коррекция SI. Lodsw; Элемент в AX.  
  LODSD   Чтение двойного слова из строки.   EAX: = [ DS: (E)SI ] IF DF= 0, то [(E)SI]: = [(E)SI+4] IF DF= 1, то [(E)SI]: = [(E)SI-4] -- * -- -- -- -- -- -- --
Lea SI, tab1; Смещение tab1 в SI, а Lea DI, ES: tab2; смещение tab2 в DI. Mov CX, 200; Счетчик элементов. Repe Cmpsd; Искать совпадающие. Je met1; Совпали? Переход на met1. met1: Mov SI, SI-4; Подправим SI. Lodsd; Элемент в EAX.  
                       

 

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
STOSпр   Запись в строку. ES: [(E)DI]: = AL; (AX); (EAX) IF DF = 0, то (E)DI: = (E)DI+1(2)(4) IF DF =1, то (E)DI: =(E)DI-1(2)(4)   -- * -- -- -- -- -- -- --
Lea DI, ES: tab; Адрес строки в DI. Mov AX, 0101Н; Число в АХ. Mov CX, 10; Установить счетчик. REP STOS tab; Записать в tab 10 слов. Mov CX, 10; Установить счетчик. Mov AX, 1256; Число в АХ. REP STOS tab; Записать в tab 10 слов.
STOSB   Запись байта в строку ЕS: [(E)DI]: = AL IF DF= 0. то [(E)DI]: = [(E)DI+ 1] IF DF= 1 [(E)DI]: = [(E)DI- 1] -- * -- -- -- -- -- -- --
Lea DI, ES: tab; Адрес строки в DI. Mov AL, 01Н; Число в АL. Mov CX, 10; Установить счетчик. REP STOSB tab; Записать в tab 10 байт.
STOSW Запись слова в строку. ES: [(E)DI]: = AX IF DF= 0, то [(E)DI]: = [(E)SI+ 2] IF DF= 1, то [(E)DI]: = [(E)DI- 2] -- * -- -- -- -- -- -- --
Lea DI, ES: tab; Адрес строки в DI. Mov AX, 0125Н; Число в АX. Mov CX, 10; Установить счетчик. REP STOSW; Записать в tab 10 слов.
STOSD   Запись двойного слова в строку. ES: (E)DI: = EAX IF DF= 0, то [(E)DI]: = [(E)DI+ 4] IF DF= 1, то [(E)DI]: = [(E)DI- 4] -- * -- -- -- -- -- -- --
Lea DI, ES: tab; Адрес строки в DI. Mov EAX, 012567Н; Число в EАX. Mov CX, 10; Установить счетчик. REP STOSD; Записать в таблицу tab 10 двойных слов.
SCASпр. Сканировать строки. Сравнивает элементы массива. AL(AX)(EAX) -ES: (E)DI, IF DF = 0 (E)DI: = (E)DI+1(2)(4) IF DF =1 (E)DI: =(E)DI-1(2)(4) * * -- * * * * * *
Lea DI, ES: tab; Адрес строки в DI. Mov AX, 0125Н; Искомое число в АX. Mov CX, 100; Установить счетчик. REPNE SCAS tab; Сравнивать пока не найдем в tab число равное 0125Н.  
                                                                           

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
SCASB Сканировать строку байтов. Результат сравнения в регистре флагов. AL - ES: (E)DI IF DF= 0 (E)DI: = (E)DI+ 1 IF DF= 1 (E)DI: = (E)DI- * * -- * * * * * *
Lea DI, ES: tab; Адрес строки в DI. Mov AL, 25Н; Искомое число в АL. Mov CX, 100; Установить счетчик. REPNE SCASB; Сравнивать пока не найдем в tab число равное 25Н. DEC DI; Поправим DI. Mov BX, DI; Номер совпадающей ячейки в BX.
SCASW Сканировать строку слов. AX - ES: (E)DI Результат сравнения в регистре флагов. IF DF= 0 (E)DI: = (E)DI+ 2 IF DF= 1 (E)DI: = (E)DI- 2 * * -- * * * * * *
Lea DI, ES: tab; Адрес строки в DI. Mov AX, 0125Н; Искомое число в АX. Mov CX, 100; Установить счетчик. REPNE SCASW; Сравнивать пока не найдем в tab число равное 0125Н. SUB DI, 2; Поправим DI. Mov BX, DI; Номер совпадающей ячейки в BX.
Команды управления программой
Команды безусловной передачи управления
JMPимя JMPLabel Безусловный переход Передает управление на метку, безусловно. IP: = [R]/ Label Адрес перехода в регистре или метке ячейки памяти. -- -- -- -- -- -- -- -- --
JMP shortmet; Короткий переход на -128или +127 байт. JMPmet2; Ближний переход на JMP nearmet2; -32768 или 32767 байт. JMP farmet3; Дальний переход более 65536 байт.
CALLимя Вызов процедуры. IP: = [R]/имя [SS: SP]: = IP SP: = SP-2 -- -- -- -- -- -- -- -- --
4F05 Callpr; Вызов процедуры pr и 4F08 Mov ax, bx; запись в стек адреса возврата (4F08).
RET Возврат из процедуры. IP: = [ SS: SP ] SP: = SP+2   -- -- -- -- -- -- -- -- --
Ret pr; Выйти из процедуры и вернуться в основную программу по адресу 4F08. Эта команда аканчивает процедуру.
                                       

 

Продолжение таблицы 3.6

Команды условных переходов без учета знака операнда
Мнемокод Описание команд Флаги, пояснения, примеры
    OF DF IF TF SF ZF AF PF CF
JAmet1JNBEmet1 Перейти на метку, если: - выше; -не ниже и не равно. IF CF= 0 и ZF= 0 IP: = [близкая метка] -- -- -- -- -- --   --  
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax, bx; Сравнить с числом в ВХ. Jamet; Перейти на met1, если АХ больше содержимого ВХ.
JAEmet2 JNB met2 JNCmet2 Перейти, если: - выше или равно; - не ниже; - нет переноса. IF CF= 0 -- -- -- -- -- -- -- --  
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax, bx; Сравнить с числом в ВХ. Jaemet1; Перейти на met2, если АХ больше содержимого ВХ.
JBmet3 JNAEm3 JCmet3 Перейти, если: - ниже; -не выше и не равно; - есть перенос. IF CF= 1 -- -- -- -- -- -- -- --  
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax, bx; Сравнить с числом в ВХ. Jbmet3; Перейти на met3, если АХ Меньше содержимого ВХ.
JBEmet4 JNAmet4 Перейти, если: -ниже или равно; -не выше. IF CF= 1 или ZF= 1 IP: = [близкая метка] -- -- -- -- -- --   --  
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax, bx; Сравнить с числом в ВХ. Jbemet4; Перейти на met4, если АХ меньше или равно ВХ.
JE zero Перейти на метку, если АХ равен нулю. IF ZF= 1 IP: = [близкая метка] -- -- -- -- --   -- -- --
Mov ax, 25; Загрузить число 25 в АХ. Sub ax, bx; Вычесть из АХ ВХ. Je zero; Перейти на метку zero, если АХ равно ВХ.
JNEmet5 JNZ met5 Перейти, если: -не равно; - не нуль. IF ZF=0 IP: = [близкая метка] -- -- -- -- --   -- -- --
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax, bx; Сравнить с числом в ВХ. Jnemet5; Перейти на met5, если АХ не равно ВХ.
JPEmet6 Перейти, если в АХ четное число единиц. IF PF= 1 IP: = [близкая метка] -- -- -- -- -- -- --   --
Mul bx; Умножить АХ на ВХ. Jpеmet6; Перейти на met6, если в АХ чётное число единиц.
                       

 

Продолжение таблицы 3.6

Мнемокод Описание команд Флаги, пояснения, примеры
OF DF IF TF SF ZF AF PF CF
JPOmet7 Перейти, если в АХ нечетное число единиц. IF PF= 0 IP: = [близкая метка] -- -- -- -- -- -- --   --
Mov ax, 25; Загрузить число 25 в АХ. Mul bx; Умножить на ВХ. Jpоmet7; Перейти на met7, если в АХ нечётное число единиц.
Команды перехода с учетом знака операнда
JGmet1 JNLEmet1 Перейти, если: - больше; - не меньше и не равно. IF ZF= 0 и SF= OF   * -- -- -- *   -- -- --
Mov ax, 7025; Загрузить число в АХ. Add ax, bx; Сложить с ВХ. Jg met1; Перейти на met1, если при сложении возник перенос.
JGEmet2 JNLmet2 Перейти, если: - больше или равно; - не меньше. IF SF= OF met2- близкая метка. * -- -- -- * -- -- -- --
Cmp ax, bx; Сравнить с ВХ. Jgemet2; Перейти на met2, если AX больше или равен BX.
JLmet3 JNGEmet3 Перейти, если: - меньше; - не больше и не равно. IF SF ≠ OF IP: = [met3] мet3- близкая метка. * -- -- -- * -- -- -- --
Mov ax, 7025; Загрузить число в АХ. Cmp ax, bx; Сравнить с ВХ. Jlmet3; Перейти на met3, если AX меньше BX.
JCXZмет4 Перейти, если: - значение CX= 0. IF CX= 0 IP: = [близкаяметка] Cmp сx, 0; СХ равен 0? JCXZmet4; Перейти на met, если да.
JLEmet5 JNG met5   Перейти, если: - меньше или равно - не больше IF ZF= 1 или SF≠ OF IP: = [близкая метка] * -- -- -- *   -- -- --
Mov ax, 7025; Загрузить число в АХ. Cmp ax, bx; Сравнить с ВХ. Jlеmet5; Перейти на met5, если AX меньше BX.
JLEmet5 JNG met5 Перейти, если: - меньше или равно - не больше IF ZF= 1 или SF≠ OF IP: = [близкая метка] * -- -- -- *   -- -- --
Mov ax, 7025; Загрузить число в АХ. Cmp ax, bx; Сравнить с ВХ. Jlеmet5; Перейти на met5, если AX меньше BX.
                                                                         





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.