Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Организация ЭВМ и сетей - Лаба 01.rtf
Скачиваний:
2
Добавлен:
10.07.2019
Размер:
764.62 Кб
Скачать

Команды передачи данных.

ОБЩИЕ

Осуществляют передачу типа регистр - регистр, регистр - память, память - регистр. Наиболее известная из них MOV (передать, переслать) имеет вид

MOV dst, src ; dst := src передает содержимое источника в приемник. Может использовать все режимы адресации. Например:

MOV CX, DX - регистровая адресация, пересылает содержимое регистра CX в DX.

MOV CX, [SI] - косвенная регистровая, пересылает в регистр CX содержимое ячейки памяти, адрес которой содержится в SI. Пусть перед выполнением команды было определено содержимое следующих регистров:

(SI) = 100 - индексный регистр, содержимое должно быть известно, т. к. используем косвенную регистровую адресацию.

(DS) = A000 - определяет базовый адрес сегмента данных.

(A0100) = ABCD - ячейка памяти к которой происходит обращение (DS) * 10 + (SI).

В результате (CX) = ABCD.

Аналогично:

MOV [DI], 8400h ;Константа записывается по адресу из DI.

(DI) = 1000

(DS) = A345

(А4450) = 8400h.

XCHG dst, src ; Взаимный обмен данными между источником и приемником. Выполняется последовательность операций temp := dst, dst := src, src := temp. Например XCHG AL, BL ;обмен байтами между регистрами.

LEA reg, mem ;Загружает в регистр reg эффективный адрес mem. Например

Базовая индексная адресация. Эффективный адрес вычисляется как сумма содержимого регистров BX и SI и записывается в регистр BX.

LEA BX, [BX][SI]

(BX) = 0400

(SI) = 003C

(BX) = 043C

СТЕКОВЫЕ

PUSH dst ;переслать dst в стек.

POP dst ;выбрать переменную из стека и поместить ее в dst.

Вершина стека находится в памяти по адресу (SS)*16 + (SP) = 2F000 + 1000 = 30000. Число, которое нужно записать в стек, находится в ячейке (DS)*16 + (BX). Указатель стека уменьшается на 2 и число записывается по этому адресу. В результате получим: (2FFFE) = AAAA, (SP) = 0FFE

Для адресации вершины стека (TOS), содержащей последний включенный в стек элемент данных, предназначен указатель SP. Cтековые команды работают только со словами и автоматически модифицируют SP - при записи в стек указатель уменьшается, при извлечении увеличивается. Перед выполнением стековых операций должны быть определены регистры SP и SS. Например

PUSH [BX]

(DS) = 2800

(BX) = 0400

(SP) = 1000

(SS) = 2F00

(28400) = AAAA

Если теперь выполнить команду POP DX, то получим (DX) = AAAA, (SP) = 1000

Например взаимный обмен регистров своим содержимым можно реализовать так:

PUSH ES

PUSH DS

POP ES

POP DS

ВВОДА-ВЫВОДА.

Ввод и вывод всегда осуществляется через регистр AX - слова и AL - байты. Есть два варианта задания номера порта для ввода и вывода - непосредственно в команде (в этом случае можно адресовать 256 портов ввода-вывода) или через регистр DX (64К портов). Естественно содержимое регистров AX (AL) при выводе и DX при его использовании должно быть определено. Например

MOV AL, FFh - Данные для вывода записываются в AL.

OUT 80h, AL - Вывод байта из регистра AL в порт с адресом 80h.

MOV DX, 1234h - Адрес порта вывода заносится в DX.

MOV AX, 0Fh - Данные для вывода записываются в AX.

OUT DX, AX - Слово выводится в порт.

MOV DX, 1234h - Адрес порта вывода заносится в DX.

IN AX, DX - Слово данных считываются в AX

IN AL, ABh - Байт читается из порта AB