Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 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

логический сдвиг операда влево
на число бит в CL

SHR

r/m,1

логический сдвиг операнда вправо на 1 бит

SHR

r/m, CL

логический сдвиг операнда
вправо на число бит в CL

SAL

r/m,1

арифметический сдвиг операнда
влево на 1 бит

SAL

r/m, CL

арифметический сдвиг операнда
влево на число бит в CL

SAR

r/m,1

арифметический сдвиг операнда
вправо на 1 бит

SAR

r/m, CL

арифметический сдвиг операнда
вправо на число бит в 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

вращение с переносом операнда
влево на 1 бит

RCL

r/m, CL

вращение с переносом операнда влево на число бит в CL

RCR

r/m,1

вращение с переносом операнда
вправо на 1 бит

RCR

r/m, CL

вращение с переносом операнда
вправо на число бит в 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/
LOOPZ

label

цикл, пока равно (нуль)

LOOPNE/
LOOPNZ

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