Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 2).doc
Скачиваний:
155
Добавлен:
08.03.2015
Размер:
380.93 Кб
Скачать

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. При этом старшая тетрада в операциях умножения и деления должна иметь нулевое значение, а в операциях сложения и вычитания ее значение несущественно.

Каким же образом МП узнает с каким типом данных он имеет дело? Он об этом совершенно не заботится и трактует все операнды только как двоичные числа. Необходимая трактовка операндов осуществляется программистом путем соответствующей обработки данных.