- •Организация памяти.
- •Прграммная модель мп.
- •Ввод - вывод.
- •Внутренние операции мп.
- •Организация обмена с ву.
- •Прерывания.
- •Система команд и режимы адресации мп.
- •Программирование мп.
- •Команды передачи данных.
- •Команды арифметических операций.
- •Команды логических операций и сдвигов.
- •Команды передачи управления.
- •Команды управления мп.
- •Примеры программ.
- •Директивы.
- •Структура ассемблерной программы.
- •Пример оформления программы.
- •2. Порядок выполнения работы.
- •3.Варианты заданий:
- •Контрольные вопросы.
- •5 Содержание отчета.
- •6 Список литературы.
Команды передачи данных.
ОБЩИЕ
Осуществляют передачу типа регистр - регистр, регистр - память, память - регистр. Наиболее известная из них 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.
(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
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