Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Юрий Владимирович самый уважаемы человек =)экза...doc
Скачиваний:
3
Добавлен:
12.09.2019
Размер:
1.41 Mб
Скачать

36. Команди блочної обробки даних

Команда формирует результат, выполняя указанную арифметическую или логическую операцию с одним или двумя операндами.

Первый операнд - всегда регистр (Rn). Второй операнд может быть регистром с сдвигом (Rm), или 8-битной константой с циклическим сдвигом (Imm) (в зависимости от значения бита "I" в команде). Флаги CPSR могут оставаться без изменений (S = 0) или выставлены в зависимости от результата выполнения этой команды (S = 1). Некоторые операции в команде (ТЕСТ, TEQ, CMP, CMN) не записывают результат в регистр Rd. Они используются только для того, чтобы в зависимости от результата установить/сбросить флаги CPSR (только при S = 1). Команды и результаты их работы перечислены в табл. 7.

Флаги регистра CPSR

Все операции обработки данных разделяются на логические и арифметические. Логические операции (AND, EOR, ТЕSТ, TEQ, ORR, MOV, BIC, MVN) выполняют логические побитовые операции на всех битах операнда или операндов. Если бит команды "S" будет установлен (и Rd - это не R15, см. ниже), то состояние флага "V" в регистре CPSR не изменится; флаг переноса "C" будет установлен исходя из результата многорегистрового циклического сдвига (или останется без изменений, если операция изменения сдвига - LSL #0). Флаг "Z" будет установлен, только если результат - все нули, и флаг "N" будет установлен в зависимости от значения бита 31 результата операции.

Таблица 7. Команды обработки данных в режиме ARM

Мнемоника ассемблера

Код

Действие

AND

0000

операнд1 AND операнд2

EOR

0001

операнд1 EOR операнд2

SUB

0010

операнд1 - операнд2

RSB

0011

операнд2 - операнд1

ADD

0100

операнд1 + операнд2

ADC

0101

операнд1 + операнд2 + перенос

SBC

0110

операнд1 - операнд2 + перенос - 1

RSC

0111

операнд2 - операнд1 + перенос - 1

TST

1000

как AND, но результат не будет записан

TEQ

1001

as EOR, но результат не будет записан

CMP

1010

as SUB, но результат не будет записан

CMN

1011

as ADD, но результат не будет записан

ORR

1100

операнд1 OR операнд2

MOV

1101

операнд2 (операнд1 игнорируется)

BIC

1110

операнд1 AND NOT операнд2 (бит сброшен)

MVN

1111

NOT операнд2 (операнд1 игнорируется)

37. Команды ввода и вывода

Для выполнения операций ввода и вывода микропроцессор 8088 имеет команды IN и OUT соответственно. Каждое устройство ввода-вывода IBM PC имеет один или больше встроенных регистров, с которыми могут работать эти команды. Каждое устройство ввода-вывода имеет адрес для каждого регистра в устройстве. Это адресное пространство отличается от адресного пространства памяти; всего существует 216, или 65536 адресов ввода-вывода, доступных микропроцессору 8088. В IBM PC 512 из этих адресов назначены системному каналу ввода-вывода и могут использоваться различными адаптерами. Другие 256 адресов используются на системной плате для управления подключенными туда устройствами ввода-вывода.

Команда IN пересылает данные из устройства ввода-вывода в регистр AL. Эта команда может указать адрес устройства ввода-вывода двумя различными способами. Если адрес устройства находится в пределах 0 - 255, он может содержаться в команде как непосредственное значение. Если адрес больше 255, команда сообщает это косвенно. В случае косвенной команды адрес устройства ввода-вывода содержится в регистре DX. Регистр DX может содержать адреса всех устройств ввода-вывода, включая те, номера которых меньше 256.

Аналогично работает команда OUT, за исключением того, что она записывает регистр AL в регистр устройства ввода-вывода. Адреса в команде OUT указываются так же, как и в команде IN.

Команды IN и OUT также могут пересылать слова в устройства ввода-вывода и из них. В случае работы со словами источником и приемником является регистр AX. Так как у микропроцессора 8088 однобайтовая внешняя шина, устройства ввода-вывода IBM PC работают только с байтами при любых операциях ввода-вывода. Это означает, что операции ввода-вывода слов не используются в персональной ЭВМ. Однако пословные операции ввода-вывода имеют смысл в системе с микропроцессором 8086, который имеет тот же набор команд.

В ПК передача информации между ЦП и внешними устройствами, как правило, осуществляется через порты. Порт - это некоторый регистр размером в байт или слово, причем этот регистр находится вне ЦП и не имеет никакого отношения к обычным регистрам типа AX, SI и т. п. Вообще-то все порты являются байтовыми, но два соседних порта рассматриваются как порт размером в слово. Порты нумеруются, их номера – от 0 до 0FFFFh. Таким образом, потенциально может быть 65536 портов, однако реально их значительно меньше (несколько десятков). С каждым внешним устройством связан свой порт или несколько портов, их номера заранее известны.

Как ЦП, так и внешнее устройство может записывать информацию в порт и может считывать из него. Со стороны ЦП (а точнее, той программы, которую он выполняет) эти операции осуществляются с помощью следующих машинных команд:

Чтение из порта (ввод): IN AL,n или IN AX,n

Запись в порт (вывод): OUT n,AL или OUT n,AX

По команде IN в регистр AL(AX) переносится содержимое порта с номером n, а команда OUT реализует обратное действие: в порт с номером n записывается содержимое регистра AL(AX).

Номер порта (n) в этих командах может быть задан двояко – либо явным числом от 0 до 255, либо регистром DX, значение которого и трактуется как номер порта. Например:

IN AL,97h         ;AL:= порт 97h

MOV DX,836

OUT DX,AX     ;порт 836:=AX

Первый вариант операнда n используется, когда номер порта небольшой и известен заранее, а второй вариант – когда номер порта может быть любым или когда он становится известным только во время счета программы.

Сценарий ввода-вывода через порты существенно зависит от специфики того внешнего устройства, с которым ведется обмен, но достаточно типичным является следующий сценарий.