Команды передачи управления




Команда Комбинации операндов P1,P2,P3 Действие Какие флаги меняет Какие процессоры Расшифровка мнемоники команды
JMP метка     Безусловный переход на метку все Jump
JMP P1 r16/32 m16/32/48 Безусловный переход по адресу, хранящ-ся в Р1 все
JE метка JZ метка   Условный переход, если ZF=1 все Jump if Equal Jump if Zero
JNE метка JNZ метка   Условный переход, если ZF=0 все Jump if Not Equal Jump if NotZero
JS метка   Условный переход, если SF=1 все Jump if Sign
JNS метка   Условный переход, если SF=0 все Jump if No Sign
JP метка   Условный переход, если PF=1 все Jump if Parity
JNP метка   Условный переход, если PF=0 все Jump if Not Parity
JO метка   Условный переход, если OF=1 все Jump if Overflow
JNO метка   Условный переход, если OF=0 все Jump if Not Overflow
JA метка JNBE метка   Условный переход, если > (беззнак.) по CF=0 и ZF=0 все Jump if Above Jump if Not Below or Equal
JAE метка JNB метка JNC метка   Условный переход, если >= (беззнак.) Условный переход, если CF=0 все Jump if Above or Equal Jump if Not Below Jump if Not Carry
JB метка JNAE метка JC метка   Условный переход, если < (беззнак.) Условный переход, если CF=1 все Jump if Below Jump if Not Above or Equal Jump if Carry
JBE метка JNA метка   Условный переход, если £ (беззнак.):CF=1 или ZF=1 все Jump if Below or Equal Jump if Not Above
JG метка JNLE метка   Условный переход, если > (со знаком):ZF=0 и SF=OF все Jump if Greater Jump if Not Less or Equal
JGE метка JNL метка   Условный переход, если ³ (со знаком) по SF=OF все Jump if Greater or Equal Jump if Not Less
JL метка JNGE метка   Условный переход, если < (со знаком) по SF¹OF все Jump if Less Jump if Not Greater or Equal
JLE метка JNG метка   Условный переход, если £ (со знаком)ZF=1или SF¹OF все Jump if Less or Equal Jump if Not Greater
JCXZ метка   Условный переход, если CX=0 все Jump if CX is Zero
JECXZ метка   Условный переход, если ECX=0 386 > Jump if ECX is Zero
LOOP метка   Цикл на метку (по EСХ): if {ECX– –}>0: goto метка все Loop (англ. "петля")
LOOPZ метка LOOPE метка   Цикл на метку (по EСХ) пока ZF=1: if ({ECX– –}>0 && ZF=1): goto метка все Loop if Zero Loop if Equal
LOOPNZ метка LOOPNE метка   Цикл на метку (по EСХ) пока ZF=0: if ({ECX– –}>0 && ZF=0): goto метка все Loop if Not Zero Loop if Not Equal
CALL метка   Вызов процедуры по адресу метка все Call (англ. "вызов")
CALL P1 r16/32 m16/32/48 Вызов процедуры по адресу, хранящ. в Р1 все
RETN, RET   Ближний возврат из процедуры все Return Near
RETN const, RET const     Ближний возврат из процедуры c очисткой const байт из стека все
RETF, RET   Дальний возврат из процедуры все Return Far
RETF const, RET const   Дальний возврат из процедуры c очисткой const байт из стека все
INT const   Вызов прерывания с номером const все Interrupt
IRET   Возврат из прерывания в 16-битном режиме весь регистр FLAGS все Interrupt Return
IRETD   Возврат из прерывания в 32-битном режиме весь регистр EFLAGS 386 > Interrupt Return with Double word Regs
INT3   Вызов отладочного прерывания INT 3 все INT 3
INTO   Вызов прерывания INT4 если флаг OF=1 все INT if Overflow
BOUND P1,P2 r16, m32 r32, m64 Вызов прерывания INT5 если не выполняется: m32[15:0] £ r16 £ m32[31:16] m64[31:0] £ r32 £ m64[63:32] 286 > Check Array Bounds

 

Команды обработки строк

Последняя буква мнемоники команды определяет размер обрабатываемых данных: B – 1 байт, W – 2 байта, D – 4 байта.

Работа команд зависит от флага DF: когда DF=0, обработка строк ведется от младших адресов к старшим,

когда DF=1 – обработка ведется от старших адресов к младшим. Изменение флага DF – см. команды CLD, STD.

Строковые команды без префиксов REP, REPZ, REPNZ обрабатывают за-раз один элемент строки.

Команда Комбинации операндов P1,P2,P3 Действие Какие флаги меняет Какие процес-соры Расшифровка мнемоники команды
MOVSB, MOVSW, MOVSD,   пересылка 1 элемента строки: DS:[(E)SI] ® ES:[(E)DI], (E)SI(E)SI ±1/2/4, (E)DI(E)DI ±1/2/4 все все 386 > Move String of Byte / Word / Double Word
LODSB, LODSW, LODSD   Сохранение 1 элемента строки в аккумуляторе: DS:[(E)SI] ® AL/ AX/ EAX, (E)SI(E)SI ±1/2/4 все все 386 > Store String of Byte / Word / Double Word
STOSB, STOSW, STOSD     Запись 1 элемента строки из аккумулятора: AL/ AX/ EAX ® ES:[(E)DI], (E)DI(E)DI ±1/2/4 все все 386 > Load String of Byte / Word / Double Word
SCASB, SCASW, SCASD   Сравнение 1 элемента строки с аккумулятором: (ES:[(E)DI] – {AL/AX/EAX}), (E)DI (E)DI ±1/2/4 SF,ZF,PF,CF,AF,OF все все 386 > Scan String of Byte / Word / Double Word
CMPSB, CMPSW, CMPSD   сравнение элементов строк (DS:[(E)SI] – ES:[(E)DI]), (E)SI (E)SI ±1/2/4, (E)DI (E)DI ±1/2/4 SF,ZF,PF,CF,AF,OF все все 386 > Compare String of Byte / Word / Double Word
INSB, INSW, INSD   чтение элемента строки из порта c номером DX: ES:[(E)DI] port[DX], (E)DI (E)DI ±1/2/4 286 > 286 > 386 > IN String of Byte / Word / Double Word
OUTSB, OUTSW, OUTSD   запись элемента строки в порт c номером DX: port[DX] DS:[(E)SI], (E)SI (E)SI ±1/2/4 286 > 286 > 386 > OUT String of Byte / Word / Double Word
префикс REP …   Повторение следующей команды EСХ раз ZF все Repeat
префикс REPZ REPE   Повторение команды EСХ раз и пока ZF=1 ZF все Repeat if Zero / Equal
префикс REPNZ REPNE   Повторение команды EСХ раз и пока ZF=0 ZF все Repeat if Zero / Equal

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: