Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
2. Термины «больше» и «меньше» используются при учёте знака числа.
3. Слова xor и or обозначают соответствующие логические операции.
6.3. Итерации
Инструкции управления итерациями могут быть использованы для регулирования повторений программных циклов. Они используют содержимое регистра CX как счётчик повторений. Подобно условным переходам инструкции этой группы являются самоотносительными и могут осуществлять только короткие передачи управления, т. е. в пределах от –128 до +127.
LOOP короткая-метка ЦИКЛ
Инструкция LOOP уменьшает содержимое регистра CX на 1 и передаёт управление по указанному адресу, если в CX не 0; в противном случае выполняется следующая за LOOP инструкция.
LOOPE/LOOPZ короткая-метка ЦИКЛ, ПОКА РАВНО/НУЛЬ
Эти два обозначения являются различными мнемониками одной инструкции, по которой содержимое регистра CX уменьшается на 1, и управление передаётся по указанному адресу, если в CX не 0 и флаг ZF равен 1; в противном случае выполняется следующая инструкция.
LOOPNE/LOOPNZ короткая-метка ЦИКЛ, ПОКА НЕ РАВНО/НЕ НУЛЬ
Эти два обозначения являются различными мнемониками одной инструкции, по которой содержимое регистра CX уменьшается на 1, и управление передаётся по указанному адресу, если в CX не 0 и флаг ZF равен 0; в противном случае выполняется следующая инструкция.
JCXZ короткая-метка ПЕРЕХОД, ЕСЛИ В CX 0
Инструкция JCXZ передаёт управление по указанному адресу, если регистр CX содержит 0; в противном случае выполняется следующая за JCXZ инструкция. Инструкция JCXZ может использоваться в начале цикла для распознавания ситуации, когда CX уже содержит 0.
6.4. Прерывания
Инструкции этой группы позволяют использовать в программах сервисные функции, обеспечиваемые через аппарат прерываний операционной системы. С этой целью генерируется программное прерывание, эффект которого подобен эффекту аппаратных прерываний. Однако процессор не выполняет цикл передачи подтверждения прерывания, если прерывание инициировано программой или связано с NMI.
Инструкции прерываний каждая по-своему влияют на состояния флагов процессора.
INT номер-прерывания ПРЕРЫВАНИЕ
Инструкция INT активизирует процедуру, предусмотренную для обработки прерывания с указанным номером. Указатель стека SP уменьшается на 2, в стек помещаются флаги (в формате инструкции PUSHF) и флаги TF и IF устанавливаютя в 0 (для запрета пошагового режима и маскируемых прерываний). Затем SP уменьшается еще на 2, и в стек заносится содержимое регистра CS. Адрес указателя прерывания (т. е. местонахождение адреса программы обработки прерывания) вычисляется путём умножения указанного в инструкции INT номера на 4: второе слово указателя замещает значение регистра CS. SP снова уменьшается на 2, и в стек помещается содержимое регистра IP, а в сам IP заносится первое слово указателя.
Если указан номер прерывания 3, ассемблер генерирует короткую (1 байт) форму инструкции, известную как прерывание по достижении точки выхода.
Программные прерывания могут использоваться как «вызовы супервизора», т. е. для запроса сервиса операционной системы, в частности, процедур, написанных для обработки аппаратных прерываний.
INTO ПРЕРЫВАНИЕ, ЕСЛИ ЕСТЬ ПЕРЕПОЛНЕНИЕ
По инструкции INTO генерируется программное прерывание, если установлен в 1 флаг OF; в противном случае управление передается следующей инструкции без активизации процедуры обработки прерывания. Инструкция INTO обращается к требуемой процедуре (номер прерывания – 4) через указатель прерывания, расположенный по 16-ричному адресу 10, устанавливает в 0 флаги TF и IF и в остальном работает также, как INT. Инструкция INTO может использоваться после арифметических или логических операций для обработки возможных переполнений.
INT3 ТОЧКА ВЫХОДА
Выполнение этой инструкции эквивалентно прерыванию с номером 3 («достигнута точка выхода»). Ассемблер генерирует короткую, 1-байтную машинную инструкцию.
IRET ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ
По инструкции IRET управление возвращается в точку прерывания путём восстановления из стека содержимого регистров IP и CS и значений флагов, помещённых туда при возникновении прерывания. Эта инструкция используется для выхода как из программных, так и из аппаратных прерываний.
7. Инструкции управления процессором
Инструкции этого типа позволяют программно управлять различными функциями CPU и условно подразделяются на 3 группы, соответствующие 3-м типам операций: манипуляции с флагами, синхронизация и пустая операция. Только 1-я группа инструкций влияет на состояния флагов процессора.
7.1. Операции с флагами
CLC УСТАНОВИТЬ В 0 ФЛАГ ПЕРЕНОСА
Флаг переноса CF устанавливается в 0; состояния остальных флагов не изменяются. Использование инструкций CLC, STC и CMC весьма полезно в сочетании с инструкциями вращения RCL и RCR.
STC УСТАНОВИТЬ В 1 ФЛАГ ПЕРЕНОСА
Флаг переноса CF устанавливается в 1; состояния остальных флагов не изменяются. Использование инструкций CLC, STC и CMC весьма полезно в сочетании с инструкциями вращения RCL и RCR.
CMC ДОПОЛНЕНИЕ ФЛАГА ПЕРЕНОСА
Состояние флага переноса CF изменяется на противоположное; состояния остальных флагов не меняются. Использование инструкций CLC, STC и CMC весьма полезно в сочетании с инструкциями вращения RCL и RCR.
CLD УСТАНОВИТЬ В 0 ФЛАГ НАПРАВЛЕНИЯ
Флаг направления DF, используемый в инструкциях обработки строк, устанавливается в 0, что обеспечивает автоматическое увеличение содержимого регистров SI и/или DI. Состояния остальных флагов не изменяются.
STD УСТАНОВИТЬ В 1 ФЛАГ НАПРАВЛЕНИЯ
Флаг направления DF, используемый в инструкциях обработки строк, устанавливается в 1, что обеспечивает автоматическое уменьшение содержимого регистров SI и/или DI. Состояния остальных флагов не изменяются.
CLI УСТАНОВИТЬ В 0 ФЛАГ РАЗРЕШЕНИЯ ПРЕРЫВАНИЙ
Флаг разрешения прерываний IF устанавливается в 0, в результате чего процессор не будет распознавать внешние запросы на прерывания, появляющиеся на линии INTR, т. е. блокируются маскируемые прерывания. Немаскируемые прерывания, появляющиеся на линии NMI, воспринимаются как программные прерывания. Инструкция CLI на состояния других флагов не влияет.
STI УСТАНОВИТЬ В 1 ФЛАГ РАЗРЕШЕНИЯ ПРЕРЫВАНИЙ
Флаг разрешения прерываний IF устанавливается в 1; остальные флаги своих значений не меняют. При IF=1 процессор способен распознавать маскируемые прерывания, появляющиеся на линии INTR. Заметим, однако, что прерывание не будет распознано до тех пор, пока не выполнится следующая за STI инструкция.
7.2. Внешняя синхронизация
HLT ОСТАНОВ ПРОЦЕССОРА
Инструкция HLT переводит процессор в состояние останова, которое будет сохраняться до тех пор, пока не произойдет одно из следующих событий:
1. Появление сигнала на линии RESET.
2. Появление запроса на немаскируемое прерывание (на линии NMI).
3. Появление запроса на маскируемое прерывание (на линии INTR).
Выполнение инструкции HLT на состояния флагов не влияет. HLT может использоваться как альтернатива бесконечному программному циклу, когда программа ожидает прерывание.
WAIT ОЖИДАНИЕ
Инструкция WAIT переводит процессор в состояние ожидания, которое будет сохраняться до тех пор, пока линия TEST неактивна. На состояния флагов WAIT не влияет.
ESC код-внешней-операции, источник ВЫХОД
По этой инструкции внешнему по отношению к 8086/8088 процессору передаются указанные код операции и операнд. Код-внешней-операции представляет собой 6-битовую непосредственно представленную константу, по которой ассемблер формирует машинную инструкцию. Внешний процессор имеет монитор системного транспортёра и при выполнении процессором 8086/8088 инструкции ESC захватывает этот код операции. Если в качестве источника задан регистр, процессор 8086/8088 ничего не делает. Если указан операнд памяти, процессор получает содержимое памяти и «отбрасывает» его. Внешний процессор может захватить операнд памяти при чтении его процессором из памяти.
LOCK БЛОКИРОВАТЬ ТРАНСПОРТЕР
LOCK представляет собой 1-байтный префикс, который заставляет процессор 8086/8088 (минимальной конфигурации) блокировать сигнал транспортёра LOCK на время выполнения следующей инструкции. Состояния флагов не изменяются.
7.3. Пустая операция
NOP ПУСТАЯ ОПЕРАЦИЯ
Процессор не выполняет никаких действий.
Приложение. Инструкции процессоров 8086/8088
Условные обозначения
accum – аккумулятор AL или AX
reg – один из регистров данных: AX, AL, AH, BX, BL, BH, CX, CL, CH, DX, DL или DH
segreg – один из регистров сегмента: CS, DS, SS или ES
r/m – один из общих операндов:
– регистр
– адрес памяти
– индексный операнд
– базированный операнд
– базо-индексный операнд
immed -8- или 16-битовое значение: константа или число
mem – один из операндов памяти:
– метка
– переменная
– символ
label – метка инструкции
src – источник в операциях со строками
dest – приёмник в операциях со строками
Инструкции пересылки данных
Код оп. | Операнды | Функция |
MOV | accum, mem | пересылка: память в аккумулятор |
MOV | mem, accum | пересылка: аккумулятор в память |
MOV | r/m, immed | пересылка: непосредственное в операнд |
MOV | r/m, reg | пересылка: регистр в операнд |
MOV | r/m, segreg | пересылка: регистр сегмента в операнд |
MOV | reg, immed | пересылка: непосредственное в регистр |
MOV | reg, r/m | пересылка: операнд в регистр |
MOV | segreg, r/m | пересылка: операнд в регистр сегмента |
PUSH | r/m | запоминание в стеке 16-битового операнда |
PUSH | reg | запоминание в стеке 16-битового регистра |
PUSH | segreg | запоминание в стеке регистра сегмента |
PUSHF | запоминание в стеке флагов | |
POP | r/m | извлечение из стека 16-битового операнда |
POP | reg | извлечение из стека 16-битового регистра |
POP | segreg | извлечение из стека регистра сегмента |
POPF | извлечение из стека флагов | |
XCHG | accum, reg | обмен аккумулятора с регистром |
XCHG | r/m, reg | обмен операнда с регистром |
XCHG | reg, accum | обмен регистра с аккумулятором |
XCHG | reg, r/m | обмен регистра с операндом |
XLAT | mem | перекодировка байта |
LEA | r/m | загрузка исполнительного адреса |
LDS | r/m | загрузка операнда с DS |
LES | r/m | загрузка операнда с ES |
LAHF | загрузка флагов в AH | |
SAHF | запись AH в регистр флагов | |
IN | accum, immed | ввод из порта (8-битовый непоср.) |
IN | accum, DX | ввод из порта, заданного в DX |
OUT | immed, accum | вывод в порт (8-битовый непоср.) |
OUT | DX, accum | вывод в порт, заданный в DX |
Арифметические, логические и инструкции сдвига
Код оп. | Операнды | Функция |
ADD | accum, immed | сложение непосредственного |
ADD | r/m, immed | сложение непосредственного с операндом |
ADD | r/m, reg | сложение регистра с операндом |
ADD | reg, r/m | сложение операнда с регистром |
ADC | accum, immed | сложение с переносом непосредственного |
ADC | r/m, immed | сложение с переносом непосредственного |
ADC | r/m, reg | сложение с переносом регистра с операндом |
ADC | reg, r/m | сложение с переносом операнда с регистром |
INC | r/m | увеличение операнда на 1 |
INC | reg | увеличение 16-битового регистра на 1 |
AAA | настройка ASCII для сложения | |
DAA | десятичная настройка для сложения | |
SUB | accum, immed | вычитание непосредственного |
SUB | r/m, immed | вычитание непосредственного из операнда |
SUB | r/m, reg | вычитание регистра из операнда |
SUB | reg, r/m | вычитание операнда из регистра |
SBB | accum, immed | вычитание с заемом непосредственного |
SBB | r/m, immed | вычитание с заёмом непосредственного |
SBB | r/m, reg | вычитание с заёмом регистра из операнда |
SBB | reg, r/m | вычитание с заёмом операнда из регистра |
DEC | r/m | уменьшение операнда на 1 |
DEC | reg | уменьшение 16-битового регистра на 1 |
NEG | r/m | дополнение до 2 операнда |
CMP | accum, immed | сравнение непосредственного |
CMP | r/m, immed | сравнение непосредственного с операндом |
CMP | r/m, reg | сравнение регистра с операндом |
CMP | reg, r/m | сравнение операнда с регистром |
AAS | настройка ASCII для вычитания | |
DAS | десятичная настройка для вычитания | |
MUL | r/m | умножение аккумулятора на операнд |
IMUL | r/m | целочисленное умножение аккумулятора |
AAM | настройка ASCII для умножения | |
DIV | r/m | деление аккумулятора на операнд |
IDIV | r/m | целочисленное деление аккумулятора |
AAD | настройка ASCII для деления | |
CBW | преобразование байта в слово | |
CWD | преобразование слова в двойное слово | |
NOT | r/m | инверсия операнда |
AND | accum, immed | побитовое И непосредственного |
AND | r/m, immed | побитовое И непосредственного с операндом |
AND | r/m, reg | побитовое И регистра с операндом |
AND | reg, r/m | побитовое И операнда с регистром |
OR | accum, immed | побитовое ИЛИ непосредственного |
OR | r/m, immed | побитовое ИЛИ непосредственного |
OR | r/m, reg | побитовое ИЛИ регистра с операндом |
OR | reg. r/m | побитовое ИЛИ операнда с регистром |
XOR | accum, immed | побитовое исключающее ИЛИ непосредственного с аккумулятором |
XOR | r/m, immed | побитовое исключаюшее ИЛИ непосредственного с операндом |
XOR | r/m, reg | побитовое исключающее ИЛИ |
XOR | reg, r/m | побитовое исключающее ИЛИ |
TEST | accum, immed | побитовое сравнение непосредственого |
TEST | r/m, immed | побитовое сравнение непосредственного |
TEST | r/m, reg | побитовое сравнение регистра с операндом |
TEST | reg, r/m | побитовое сравнение операнда c регистром |
SHL | r/m,1 | логический сдвиг операнда влево на 1 бит |
SHL | r/m, CL | логический сдвиг операда влево |
SHR | r/m,1 | логический сдвиг операнда вправо на 1 бит |
SHR | r/m, CL | логический сдвиг операнда |
SAL | r/m,1 | арифметический сдвиг операнда |
SAL | r/m, CL | арифметический сдвиг операнда |
SAR | r/m,1 | арифметический сдвиг операнда |
SAR | r/m, CL | арифметический сдвиг операнда |
ROL | r/m,1 | вращение операнда влево на 1 бит |
ROL | r/m, CL | вращение операнда влево на число бит в CL |
ROR | r/m,1 | вращение операнда вправо на 1 бит |
ROR | r/m, CL | вращение операнда вправо на число бит в CL |
RCL | r/m,1 | вращение с переносом операнда |
RCL | r/m, CL | вращение с переносом операнда влево на число бит в CL |
RCR | r/m,1 | вращение с переносом операнда |
RCR | r/m, CL | вращение с переносом операнда |
Инструкции обработки строк
Код оп. | Операнды | Функция |
MOVS | dest, src | пересылка строки |
MOVSB | пересылка строки побайтно | |
MOVSW | пересылка строки по словам | |
CMPS | dest, src | сравнение строк |
CMPSB | сравнение строк по байтам | |
CMPSW | сравнение строк по словам | |
SCAS | dest | сканирование строки |
SCASB | сканирование строки по байтам | |
SCASW | сканирование строки по словам | |
LODS | dest | загрузка строки |
LODSB | загрузка байта | |
LODSW | загрузка слова | |
STOS | dest | сохранение строки |
STOSB | сохранение байта | |
STOSW | сохранение слова |
Инструкции передачи управления
Код оп. | Операнды | Функция |
JA/JNBE | label | переход, если выше |
JAE/JNB | label | переход, если выше или равно |
JB/JNAE | label | переход, если ниже |
JBE/JNA | label | переход, если ниже или равно |
JC | label | переход, если был перенос |
JE/JZ | label | переход, если равно (нуль) |
JG/JNLE | label | переход, если больше |
JGE/JNL | label | переход, если больше или равно |
JL/JNGE | label | переход, если меньше |
JLE/JNG | label | переход, если меньше или равно |
JMP | label | безусловный переход по метке |
JMP | r/m | безусловный переход по косвенному адресу |
JNC | label | переход, если не было переноса |
JNE/JNZ | label | переход, если не равно (не нуль) |
JNO | label | переход, если не было переполнения |
JNP/JPO | label | переход, если нет четности |
JNS | label | переход, если нет знака |
JO | label | переход, если было переполнение |
JP/JPE | label | переход, если есть четность |
JS | label | переход, если есть знак |
JCXZ | label | переход, если в CX – нули |
CALL | label | вызов процедуры по имени |
CALL | r/m | вызов процедуры по косвенному адресу |
RET | [immed] | возврат из процедуры |
LOOP | label | цикл |
LOOPE/ | label | цикл, пока равно (нуль) |
LOOPNE/ | label | цикл, пока не равно (не нуль) |
REP | повторение | |
REPE/REPZ | повторение, пока равно (нуль) | |
REPNE/ REPNZ | повторение, пока не равно (не нуль) | |
INT3 | программное прерывание с кодом 3 (1-байтная команда) | |
INT | immed | программное прерывание (0-255) |
INTO | прерывание по переполнению | |
IRET | возврат из прерывания |
Инструкции управления процессором
Код оп. | Операнды | Функция |
STC | установка флага переноса | |
CLC | сброс флага переноса | |
CMC | дополнение флага переноса | |
STD | установка флага направления | |
CLD | сброс флага направления | |
STI | установка флага разрешения прерывания | |
CLI | сброс флага разрешения прерывания | |
HLT | останов системы | |
WAIT | ожидание активности шины TEST | |
ESC | immed, r/m | переключение кода для внешнего процессора с 6-битовым непосредственным и операндом |
LOCK | блокировка шины при выполнении | |
NOP | нет операции |
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 |


