- •3.11.1 Команды пересылки данных
- •Команды пересылки общего назначения
- •Xchg приемник, источник
- •Команды загрузки адресных значений
- •Команды обращения к стеку
- •Команды пересылки флагов
- •Команды ввода/вывода
- •In аккумулятор, порт
- •In аккумулятор, dx.
- •3.11.2. Арифметические команды
- •Типы арифметических данных
- •Команды инкрементирования и декрементирования
- •Inc приемник
- •Команды сложения и вычитания
- •Команды расширения знака
- •Команды умножения и деления
- •Imul источник.
- •Команды десятичной коррекции
- •Сложение в bdc-формате
- •Вычитание в bcd-формате
- •Сложение в ascii-формате
- •Вычитание в ascii-формате
- •Умножение в ascii-формате
- •Деление в ascii-формате
- •3.11.3 Логические команды
- •Команды логических операций
- •Команды сравнения
- •Команды сдвигов
- •Команды логических сдвигов
- •Команды арифметических сдвигов
- •Команды циклических сдвигов
- •3.11.4. Команды передачи управления
- •Команды безусловных переходов
- •Команды условных переходов
- •Команды перехода по состоянию арифметических флагов
- •Команды перехода по соотношению между числами
- •Команды перехода по состоянию регистра cx
- •Команды управления циклами
- •Команды для организации подпрограмм
- •Команды прерываний
- •3.11.5. Команды обработки строк
- •Строковые примитивы
In аккумулятор, порт
In аккумулятор, dx.
В качестве аккумулятора при пересылке байтов должен указываться регистр AL, а при пересылке слов - регистр AX.
При прямой адресации адрес порта "порт" указывается прямо в команде и может иметь десятичное значение от 0 до 255, что позволяет адресоваться к 256 однобайтным или двухбайтным портам ввода.
При косвенной адресации адрес порта выбирается из регистра DX, что позволяет адресоваться к 64 кбайт однобайтных портов или 32 кбайт двухбайтных портов.
Пример 3.55:
IN AX, 200 ;Ввод слова из порта 200
IN AL, PortPrint ;Ввод байта из порта, заданного
;поименованной константой PortPrint
IN AL, DX ;Ввод байта из порта по адресу из DX
Команда вывода OUT осуществляет вывод байта или слова из аккумулятора МП в порт вывода. С точки зрения используемых аккумуляторов и режимов адресации она идентична команде ввода IN и записывается в следующих форматах:
OUT порт, аккумулятор
OUT DX, аккумулятор.
Пример 3.56:
OUT 30h, AX ; Вывод слова в порт 30h
OUT DX, AL ; Вывод байта в порт, указанный в DX
Все команды пересылки данных, кроме POPF и LAHF, не изменяют флагов МП.
3.11.2. Арифметические команды
Арифметические команды обеспечивают выполнение всех арифметических операций над данными различных типов. Их можно разделить на следующие подгруппы:
1) команды инкрементирования и декрементирования;
2) команды сложения и вычитания;
3) команды расширения знака;
4) команды умножения и деления;
5) команды десятичной коррекции.
Прежде, чем приступить к описанию самих команд, рассмотрим типы данных, которыми они оперируют.
Типы арифметических данных
МП ВМ86/ВМ88 могут обрабатывать двоичные и десятичные числа, представленные в следующей форме:
1) двоичные беззнаковые целые числа;
2) двоичные знаковые целые числа;
3) десятичные числа в упакованном BCD -формате;
4) десятичные числа в неупакованном ASCII - формате.
Двоичные числа могут иметь длину 8 или 16 битов. У числа без знака все биты представляют его значение. Следовательно, двоичные числа без знака могут принимать значения от 0 до 255 (8-битные) или до 65535 (16-битные).
У чисел со знаком старший бит (D7 или D15) указывает знак числа (0 - число положительно или равно нулю, 1 - число отрицательно), а остальные биты - его значение. Числа со знаком представляются в дополнительном коде и могут принимать значения от (-128) до +127 (8-битные) или от (-32768) до +32767 (16-битные). Более длинные двоичные числа представляются последовательностью байтов или слов в памяти и обрабатываются последовательно.
Десятичные числа могут быть только беззнаковыми целыми числами. При этом десятичные операции выполняются только над байтами, и десятичные числа представляются последовательностью байтов в упакованном или неупакованном формате. В упакованном BCD-формате каждый байт содержит две десятичные цифры в коде 8-4-2-1. Следовательно, один десятичный байт в BCD-формате может содержать значения от 00 до 99.
В неупакованном ASCII-формате каждый байт десятичного числа содержит только одну десятичную цифру в коде 8-4-2-1 в младшей тетраде. Поэтому десятичный байт в ASCII-формате может содержать значения от 0 до 9. При этом старшая тетрада в операциях умножения и деления должна иметь нулевое значение, а в операциях сложения и вычитания ее значение несущественно.
Каким же образом МП узнает с каким типом данных он имеет дело? Он об этом совершенно не заботится и трактует все операнды только как двоичные числа. Необходимая трактовка операндов осуществляется программистом путем соответствующей обработки данных.