Главная страница

Emu8086 Запускаем программу Emu8086 и создаём новый файл через меню file new com template (Файл Новый Шаблон файла com). В редакторе исходного кода после этого мы увидим следующее Рис. Создание нового файла в Emu8086


Скачать 251.21 Kb.
НазваниеEmu8086 Запускаем программу Emu8086 и создаём новый файл через меню file new com template (Файл Новый Шаблон файла com). В редакторе исходного кода после этого мы увидим следующее Рис. Создание нового файла в Emu8086
Дата05.04.2018
Размер251.21 Kb.
Формат файлаdocx
Имя файлаEmu8086.docx
ТипДокументы
#40430
страница6 из 10
1   2   3   4   5   6   7   8   9   10

Арифметические и логические команды


Большинство арифметических и логических команд влияют на регистр состояния процессора (или Флаги

регистр состояния процессора 

Как вы можете видеть, в этом регистре 16 бит. Каждый бит называется флагом и может принимать значение 1 или 0


  • Carry Flag (CF) - перенос - этот флаг устанавливается в 1, когдаслучается беззнаковое переполнение. Например, если вы увеличили байт 255 + 1 (результат не помещается в диапазоне 0...255). Если переполнение не происходит, этот флаг установлен в 0

  • Zero Flag (ZF) - ноль - устанавливается в 1, если результат равен нулю. Если результат не нулевой, то этот флаг устанавливается в 0

  • Sign Flag (SF) - знак - установлен в 1, если результат -отрицательное число. Если результат положительный, то этот флаг устанавливается в 0. Обычно этот флаг принимает значение старшего значащего бита. 

  • Overflow Flag (OF) - переполнение - устанавливается в 1, если случается переполнение при арифметических операциях со знаком. Например, если вы увеличили байт 100 + 50(результат не помещается в диапазоне -128...127). 

  • Parity Flag (PF) - контроль четности - этот флаг устанавливается в 1, если в младших 8-битовых данных четное число. Если число нечетное, то этот бит установлен в 0. Даже если результат - это слово, то анализируются только 8 младших бит! 

  • Auxiliary Flag (AF) - внешний перенос - установлен в 1, если случилось переполнение без знака младших 4-х битов (т.е. перенос из 3-го бита). 

  • Interrupt enable Flag (IF) - прерывание - если этот флаг установлен в 1, то процессор реагирует на прерывание от внешних устройств. 

  • Direction Flag (DF) - направление - этот флаг используется некоторыми командами для обработки цепочки данных. Если флаг установлен в 0 - обработка происходит в прямом направлении, если 1 - в обратном. 

Имеются три группы команд.

Первая группа: ADDSUB,CMPANDTESTORXOR

Эти типы операндов поддерживаются:
REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory: [BX], [BX+SI+7], переменная, и т.п...

immediate: 5, -24, 3Fh, 10001101b, и т.п...

После операции между операндами результат всегда записывается в первый операнд. Команды CMP и TEST воздействуют только на флаги и не записывают результат (эта команда используется для принятия решения во время выполнения программы). 

Эти команды влияют только на флаги:
       CFZFSFOFPFAF.


  • ADD - Прибавить второй операнд к первому. 

  • SUB - Вычесть второй операнд из первого. 

  • CMP - Вычесть второй операнд из первого только для флагов.

  • AND - Логическое И между всеми битами двух операндов. При этом соблюдаются правила:

1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

Как видите, мы получаем 1 только в том случае, если оба бита равны 1

  • TEST - То же самое, что AND, но только для флагов

  • OR - Логическое ИЛИ между всеми битами двух операндов. При этом соблюдаются правила:

1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0

Как видите, мы получаем 1 каждый раз, когда хотя бы один бит равен 1

  • XOR - Логическое XOR (исключающее ИЛИ) между всеми битами двух операндов. При этом соблюдаются правила:

1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0

Как видите, мы получаем 1 каждый раз, когда биты имеют различное значение. 

Вторая группа: MULIMULDIVIDIV

Эти типы операндов поддерживаются:
REG
memory

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory: [BX], [BX+SI+7], переменная, и т.п...

Команды MUL и IMUL влияют только на эти флаги:
       CFOF
Если результат превышает размер операнда, то эти флаги установлены в 1, если результат умещается в размер операнда, то эти флаги установлены в 0

Для команд DIV и IDIV флаги не определены.


  • MUL - беззнаковое умножение:

если операнд - это байт:
AX = AL * операнд.

если операнд - это слово:
(DX AX) = AX * операнд.

  • IMUL - умножение со знаком:

если операнд - это байт:
AX = AL * операнд.

если операнд - это слово:
(DX AX) = AX * операнд.

  • DIV - беззнаковое деление:

если операнд - это байт:
AL = AX / операнд
AH = остаток (модуль). .

если операнд - это слово:
AX = (DX AX) / операнд
DX = остаток (модуль). .

  • IDIV - деление со знаком:

если операнд - это байт:
AL = AX / операнд
AH = остаток (модуль). .

если операнд - это слово:
AX = (DX AX) / операнд
DX = остаток (модуль). .

Третья группа: INCDECNOTNEG

Эти типы операндов поддерживаются:
REG
memory

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory: [BX], [BX+SI+7], переменная, и т.п...

Команды INC и DEC влияют только на эти флаги:
       ZFSFOFPFAF.

Команда NOT не влияет ни на какие флаги!

Команда NEG влияет только на эти флаги:
       CFZFSFOFPFAF.


  • NOT - инвертирование каждого бита операнда. 

  • NEG - Меняет знак операнда (дополнение до двух). Обычно она инвертирует каждый бит операнда, а затем прибавляет к нему единицу. Например, 5 преобразуется в -5, а -2 преобразуется в 2.


1   2   3   4   5   6   7   8   9   10


написать администратору сайта