Система команд процессора 80386.
Система команд процессоров фирмы Intel сложилась исторически, начиная с первых разработок фирмы. Все микропроцессоры этой фирмы оказались совместимы снизу вверх, что чрезвычайно привлекательно всем разработчикам программных продуктов. Система команд процессора 80386, приведенная в этой главе, позволяет использовать как 16 – ти, так и 32 – х разрядные регистры процессора, расширенную систему команд применимую для ЭВМ, работающей в реальном (то есть в режиме эмуляции процессора 8086) и защищенном (мультипрограммном) режимах.
Команды сгруппированы по выполняемым функциям. Приведен мнемокод команды, алгоритм ее выполнения, дано краткое описание, указано состояние регистра флагов и приведен пример использования команды в программе. Алгоритм дан в краткой форме. Например для команд пересылки операндов MOVпр,ист, он дан в следующем виде: Пр: = ист. R / M, R / М / IM.
Эту запись необходимо понимать так: Приемнику присваивается содержимое источника. Приемником может быть регистр или ячейка памяти, а источником – регистр, ячейка памяти или непосредственное значение. Причем пересылка осуществляется из регистра в ячейку памяти или из ячейки памяти в регистр. Непосредственное данное может пересылаться и регистр и в ячейку памяти.
Важным для команд является понятие “операнд”. Это то значение данных, которое обрабатывает команда. Операнд обычно рассматривается как “источник” или “приемник”, в зависимости от того, берет команда данные или помещает данные в него. Приемниками могут быть регистры или ячейки памяти, а источниками - еще и непосредственные данные. Обычно операнды могут иметь любой размер (байт, слово, двойное слово и т.д.).
В большинстве команд с несколькими операндами все операнды должны иметь одинаковый размер (тип). Место нахождения операнда определяется форматом команды.
В таблице 3.1 , в алфавитном порядке, перечислены наиболее часто употребляемые команды, при создании программ по контрольным заданиям.
Если Вы просматриваете эти методические пособия на компьютере, то можете быстро перейти на подробное описание необходимой команды, нажав Ctrl и щелкнув на нужной команде. Подробное описание этих команд приведено в разделе 2 этой главы.
Таблица 3.1 Наиболее часто употребляемые команды Ассемблера
№ | Мнемокод | Назначение |
ADC r,r/m./im | Сложить два операнда с учетом флага переноса | |
ADD r/m,m/im/r | Сложить два операнда | |
CALL label | Вызов процедуры | |
CBW | Конвертировать байт в слово | |
CMP r/m,im/im | Сравнить два операнда | |
CWD | Конвертировать слово в двойное слово | |
DEC r/m/im | Декремент (уменьшение) операнда на 1 | |
DIV r/m | Целочисленное деление без знака | |
IDIV r/m | Целочисленное деление со знаком | |
IMUL r/m | Целочисленное умножение со знаком | |
INC r/m/im | Инкремент (увеличение) операнда на 1 | |
INT im | Вызов прерывания | |
JE label | Перейти на метку label, если равно (ZF =1) | |
JG label | Перейти на метку label, если больше (SF=OF) | |
JL label | Перейти на метку label, если меньше (SF<>OF) | |
JMP label/r/m | Перейти на метку label безусловно | |
JS label | Перейти на метку label, если знак (SF=1) | |
JZ label | Перейти на метку label, если ноль (ZF=1) | |
LEA r,r/m | Загрузка смещения эффективного адреса | |
LOOP label | Управление циклом | |
MOV r/m,r/m/im | Пересылка данных | |
MUL r/m | Беззнаковое умножение | |
NOT r/m | Инвертирование (логическое НЕ) | |
POP r/m | Извлечь данные из стека в операнд | |
PUSH r/m | Переслать операнд в стек | |
RET | Возврат в основную программу | |
SUB r/r/m/r,r/r/m/im | Вычитание | |
TEST r/m,r/m/im | Логическое сравнение | |
XCHG r/m,r/m | Обмен операндами | |
XOR r,r/m/im | Исключающее ИЛИ (неравнозначность) |
В таблице 3.2 поясняются используемые в описании синтаксиса команд аббревиатуры и сокращения.
Таблица 3.2 Пояснения используемых аббревиатур и сокращений
Сокращения, аббревиатура | Значение |
Пр. | Приемник операнда |
Ист. | Источник операнда |
Label | Метка команды |
R/M | Операндом является содержимое регистра (одно или n* байтного) /или данных из памяти (одно или n* байтных). |
Im | Операндом является 8- ми, 16- ти или 32-х битовое непосредственное значение - константа или символьное имя. |
Пр.: = ист. | Присвоить значение, т.е. переслать содержимое источника в приемник. |
[SS: SP] | Адрес операнда определяется суммой содержимого регистров SS и SP |
AL 7 | 7- й разряд регистра AL |
* | Указанный разряд регистра флагов принимает значение 0 или 1. |
-- | Команда не влияет на флаг. |
0 или 1 | Новое состояние флага. |
В таблице 3.3 приведен список логических функций реализуемых командами прямо либо косвенно.
Таблица 3.3 Таблица истинности логических функций
P | Q | P and Q | P or Q | P xor Q | Not P | Not Q |
В таблице 3.4 приведена система команд целочисленного процессора Intel 80386, которая позволяет использовать как 16 – ти, так и 32 разрядные регистры и данные. В таблице приведен мнемокод команд их описание, пример использования в программе и указано действие команды на флаги.
Таблица 3.4 Система команд процессора Intel 80386
3.4.1 Команды пересылки данных | |||||||||||||||||||||||||||
3.4.1.1 Пересылка данных без преобразования | |||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры. | |||||||||||||||||||||||||
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)SI] : = DS:[(E)DI] | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||
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 ; или ячейку памяти. | |||||||||||||||||||||||||||
POPA | Восстановить из стека регистры DI, SI, BP, SP, BX, DX, CX, AX | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||
Popa;Извлекает 8 слов из вершины стека, помещает их в указанные регистры и увеличивает регистр SP на 16 | |||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||||||||||||||||||||||||||
POPAD | Загрузить из стека регистры EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||||||||||||||||||
Popad ;Извлекает 8 двойных слов из стека, помещает их в 32-х разрядные регистры и увеличивает регистр SP на 32. | ||||||||||||||||||||||||||||||||||||||||||||
XCHG пр, ист | Обмен Пр< = > ист. Приемник - регистр , источник- регистр или ячейка памяти. | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||||||||||||||||||
Xchg ax,bx; Взаимный обмен между регистрами Xchg ax,memили памятью и регистром. | ||||||||||||||||||||||||||||||||||||||||||||
XLAT | Преобразование кодов AL:= [DS:BX + AL]. | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||||||||||||||||||
Применяется для трансляции таблиц из одного кода в другой. Пример использования команды XLAT приведен в программе параграф 6.3 | ||||||||||||||||||||||||||||||||||||||||||||
3.4.1.2 Пересылка данных с преобразованием. | ||||||||||||||||||||||||||||||||||||||||||||
MOVZX пр, ист. | Пересылка байта или слова с расширением нулями до размера приемника. Пр:= [0] + ист. R, R/M. | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||||||||||||||||||
Movzx ax,62H; Перемещает 62Н в AL и 00 в AH. | ||||||||||||||||||||||||||||||||||||||||||||
MOVSX пр, ист. | Пересылка байта или слова со знаковым расширением до размера приемника Пр:= [3H] + ист. | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||||||||||||||||||
Movsx ax,92h;Перемещает 92Н в AL и FF в AH. | ||||||||||||||||||||||||||||||||||||||||||||
3.4.2 Команды ввода- вывода | ||||||||||||||||||||||||||||||||||||||||||||
INпр,ист | Ввод операнда из порта в регистр. Пр.- рег. (al,ax,eax) Ист. - im (порт №), или содержимое рег. DX | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||||||||||||||||||
Mov dx,20 ; Номер порта для команды IN помещаем в DX. IN eax,dx ; Вводит двойное слово в EAX. Из порта 20. | ||||||||||||||||||||||||||||||||||||||||||||
OUTпр,ист | Вывод операнда из регистра в порт Пр.- ib (порт или содержимое DX) Ист. - рег. (al,ax,eax) | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||||||||||||||||||
Mov al,20h; Загружает код пробела в AL. Out 30,al ;Выводит его в порт №30. | ||||||||||||||||||||||||||||||||||||||||||||
3.4.3 Команды пересылки адреса | ||||||||||||||||||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||||||||||||||||||||||||||
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.4.4 Арифметические команды | ||||||||||||||||||||||||||||||||||||||||||||
3. 1.4.1 Команды сложения | ||||||||||||||||||||||||||||||||||||||||||||
ADDпр,ист. | Сложение Пр:= пр + ист, Пр., Ист.-рег/память /непосредственное значение. | * | -- | -- | -- | * | * | * | * | * | ||||||||||||||||||||||||||||||||||
Add ax,memw; добавить содержи- мое ячейки памяти к регистру AX.. Add memw,ax; или наоборот. Add al,10; добавить 10 к AL. Add ax,bx ; сложить два регистра. | ||||||||||||||||||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||||||||||||||||||||||||||
ADC пр,ист. | Сложение с переносом. Пр:= пр + ист + CF | * | -- | -- | -- | * | * | * | * | * | ||||||||||||||||||||||||||||||||||
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:=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.4.4.2 Команды вычитания | ||||||||||||||||||||||||||||||||||||||||||||
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) | ||||||||||||||||||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||||||||||||||||||||||||
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.4.4.3 Команды умножения | |||||||||||||||||||||||||||||||||||||
MULист. | Беззнаковое умножение. AX := AL × ист. DX : AX := AX × ист. EDX : EAX := EAX × ист. | * | -- | -- | -- | ? | ? | ? | ? | * | |||||||||||||||||||||||||||
Mov al,80H ;В АL загружается 128 Mov bl,47H ; В ВL загружается 64 Mul bl ; В AX результат 2000. | |||||||||||||||||||||||||||||||||||||
IMULист. IMUL пр,ист. | Знаковое умножение AX := AL × ист. DX : AX = AX × ист EDX : EAX:= EAX × ист | * | -- | -- | -- | ? | ? | ? | ? | * | |||||||||||||||||||||||||||
Mov al,80H ;В АL загружается -128 Mov bl,47H ; В ВL загружается 64 Imul bl ; В AX результат E000Н. | |||||||||||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||||||||||||||||||||||||
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 формате. | |||||||||||||||||||||||||||||||||||||
3.4.4.4 Команды деления | |||||||||||||||||||||||||||||||||||||
DIVист. | Беззнаковое деление. Пр:= пр / ист. Ист.-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; Деление учетверенного слова / двойное слово | |||||||||||||||||||||||||||||||||||||
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. | |||||||||||||||||||||||||||||||||||||
3.4.5 Команды расширения знака | |||||||||||||||||||||||||||||||||||||
CBW | Преобразовать байт в слово AL 7® AH 8- 15 | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||||||||||
Mov al,0FCH; Загрузим – 4 в AL. Cbw ; В АХ 0FFFCH (- 4) | |||||||||||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||||||||||||||||||||||||
CWD | Преобразовать слово в двойное слово AX 15® DX 0- 15 | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||||||||||
Mov ax,0006H; Загрузим 6 в АХ. Cwd ; DX:AX:= 0000:0006H | |||||||||||||||||||||||||||||||||||||
CWDE | Преобразовать слово в расширенное знаковое слово AX 15® EAX 16- 31 | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||||||||||
Mov ax,0FFFCH; Загрузим – 4 в АХ. CWDE ; EAХ := 0FFFFFFFCH, (-4) | |||||||||||||||||||||||||||||||||||||
CDQ | Преобразовать двойное слово в учетверенное слово EAX 31® EDX 0 –31 | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||||||||||
Mov eax,0FFFFFFFCH; – 4 в EАХ. CDQ ; EDХ : EAX = 0FFFFFFFFH: 0FFFFFFFCH (- 4) | |||||||||||||||||||||||||||||||||||||
3. 4.6 Команды манипулирования битами | |||||||||||||||||||||||||||||||||||||
3.4.6.1 Логические команды | |||||||||||||||||||||||||||||||||||||
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Н | |||||||||||||||||||||||||||||||||||||
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 применяется для реализации функций проверки и сравнения бит. | |||||||||||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||||||||||||||||||||||||
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; Переход на метку М1. | |||||||||||||||||||||||||||||||||||||
3.4.6.2 Команды сдвига | |||||||||||||||||||||||||||||||||||||
SAL Пр., счетчик (n) | Сдвиг арифметичес-кий влево n CF, пр:= пр.,CL/im n- кол-ство сдвигов. Заносится в CL, или im, если = 1 n максимальное = 31 | * | -- | -- | -- | * | * | ? | * | * | |||||||||||||||||||||||||||
Mov ax, 1110100101010111B; В АХ 0Е957Н. Mov cl, 4 ; В CL количество сдвигов. Sal ax,cl ; В АХ 1001010101110000В , - 9570Н, CF =0 Sal ax, 1; В АХ 0010101011100000В, CF=1 | |||||||||||||||||||||||||||||||||||||
SAR Пр., счетчик (n) | Сдвиг арифметичес-кий вправо N CF, пр:= пр., CL/im n- кол-ство сдвигов. Заносится в CL, или im, если = 1 n максимальное = 31 | * | -- | -- | -- | * | * | ? | * | * | |||||||||||||||||||||||||||
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 или im (если = 1) n максимальное = 31 | * | -- | -- | -- | * | * | ? | * | * | |||||||||||||||||||||||||||
Mov ax, 1110100101010111B; В АХ 0Е957Н. Mov cl, 4 ; В CL количество сдвигов. Shl ax,cl ; В АХ 1001010101110000В , - 9570Н. Shl ax, 1; В АХ 0010101011100000В. | |||||||||||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||
SHR Пр., счетчик (n) | Сдвиг логический вправо N CF, пр:= пр, CL/im n- кол- во сдвигов; в CL или im, если = 1 n максимальное = 31 | * | -- | -- | -- | * | * | ? | * | * | ||||||||||
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 | ||||||||||||||||||||
RCR Пр., счетчик (n) | Сдвиг циклический вправо с флагом пе-реноса. Биты выдви-гаемые с одного конца операнда вводятся в его через CF с другого конца. N CF, пр.:= пр. 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 пр. := пр. n максимальное = 31 | * | -- | -- | -- | -- | -- | -- | -- | * | ||||||||||
Mov ax, 45EAH ; Данные в АХ. Mov CL,4; Кол-во бит сдвига в CL ROL ax,cl ; В АХ 5ЕA4Н. Mov Tab, 4F64H; Данные в ячейку Tab. ROL Tab, cl; В ячейке Tab F644H. | ||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||
ROR Пр, счетчик (n) | Сдвиг циклический вправо. Биты выдви-гаемые с одного конца операнда вводятся в его с другого конца. N пр. := пр. n максимальное =31 | * | -- | -- | -- | -- | -- | -- | -- | * | ||||||||||
Mov ax, 45EAH ; Данные в АХ. Mov CL,4; Кол-во бит сдвига в CL ROR ax,cl ; В АХ A45ЕН. Mov Tab, 4F64H; Данные в ячейку Tab. ROR Tab, cl; В ячейке Tab 44F6H. | ||||||||||||||||||||
3.4.6.3 Операции с битами и строками битов | ||||||||||||||||||||
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 | ||||||||||||||||||||
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. | ||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||
BSRпр.,ист. | Обратный поиск бита. Пр:= N первого единичного бита при сканировании источника со старших разрядов | -- | -- | -- | -- | -- | * | -- | -- | -- |
Mov ax,6650h ; Данные в АХ. BSR вх, ах; В ВХ заносится 11. Mov tab,6400h ; Данные в ячейку tab. BSR вх, tаb; В ВХ заносится 1. |
Дата добавления: 2016-01-26; просмотров: 2675;