Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП по циклу ЛР ОМПТ.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.81 Mб
Скачать

Директивы Ассемблера процессора 8080

Директива .org

[<имя>:] org <адрес> [;комментарий]

Она указывает адрес ячейки памяти, в которую следует поместить первый байт следующий за директивой org команды.

Пример 1.11:

begin: .org 100h ;Начало программы

MVI A,34h

MOV B,A

mm1: .org 300h ;Продолжение программы

LXI B,400h

.....

Директива .org 100h указывает, что байты команды нужно расположить в памяти с адреса 100h (h-шестнадцатеричная форма представления числа), а команда LXI B,400h разместится по адресу 300h. После трансляции этот фрагмент программы будет выглядеть следующим образом:

Адрес Число Метка Мнемокод Комментарий

0100 begin: .org 100h ;Начало программы

0100 3E 34 MVI A,34h

0102 47 MOV B,A

…………………………………………

0300 mml: .org 300h ;Продолжение программы

0300 01 00 04 LXI B,400h

…………………………………………

Директивы .db и .dw

[<имя>:] .db <число,число,..> [;комментарий]

Эта директива определяет значения ячеек памяти размером в байт. Значения определяются числами, записанными после директивы .db (define byte).

Пример 1.12:

Prog: .org 100h ;Начало программы

LDA Param1 ;

MOV D,A ;

LDA Param2+1 ;

ADD D ;

STA Param1+2 ;

…………………………

Data: .org 500h ;Область данных

Param1: .db 10h, 0h, 36h, 0A

Param2: .db 32h, 64h

Листинг трансляции выглядит так:

Адрес Число Метка Мнемокод Комментарий

0100 begin: .org 100h ;Начало программы

0100 3A 00 05 LDA Param1 ;

0103 57 MOV D,A ;

0104 3A 05 05 LDA Param2+1 ;

0107 82 ADD D ;

0108 32 02 05 STA Param1+2 ;

…………………………………………………

0500 Data: .org 500h ;Область данных

0500 10 00 36 Param1: .db 10h, 0h, 36h, 0A

0A

0504 32, 64 Param2: .db 32h, 64h

Можно определять ячейки размером в слово (два байта). Для этого служит директива .dw (define word). Если в предыдущем примере db заменить на dw, то часть листинга с областью данных может выглядеть следующим образом

Пример 1.13:

0500 Data: .org 500h ;Область данных

0500 0010 Param1: .dw 0010h, 0A36 h

0A36

0504 6432 Param2: .dw 6432h

Директива .equ

[<имя>:] .equ <число> [;комментарий]

Язык Ассемблера позволяет вместо адресов ячеек памяти оперировать с их символическими именами. Это является его преимуществом по сравнению с программированием в машинных кодах. Директива .equ присваивает имени в поле метки конкретное значение числа в поле операндов.

Пример 1.14:

Adr_Tbl .equ 500h ;Определение адреса начала таблицы данных

Adress .equ 400h ;Определение адреса байта данных

Prog: .org 100h ;Начало программы

LXI B,Adr_Tbl ;

LXI H,Adress ;

LDAX B ;

ADI 05 ;

MOV M,A ;

……………………………;

.org 400h ;Начало таблицы Adr_Tbl

.db 00, 01, 04, 09 ;

.org 500h ;Место байта данных Adress

.db 0

Директива .end

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

Методы адресации операндов команд

Выполнение процессором команд приводит либо к каким-то действиям над операндами, либо к изменению состояния процессора. Операнды в командах микропроцессора 8080 определяются одним из 5 способов (методов) адресации, представленных в табл. 1.3.

Пример 1.15

Адрес Число Метка Мнемокод Комментарий

0800 3E 03 MVI A,03 ;

команда пересылки числа 03 из состава команды в аккумулятор: операнд-источник 03 указан в составе команды при помощи непосредственного метода, а операнд-приёмник указан в аккумуляторе (регистр А) то есть регистровым методом.

Таблица 1.3

Способы адресации операндов в командах

Название

Описание

Непосредст-венный

Операнд содержится в байте B2 двухбайтной команды или в байтах B2, B3 трёхбайтной команды

Регистровый

Операнд находится в регистре, указываемом в коде команды

Прямой

Младший байт адреса операнда указывается в байте B2, a старший – в байте B3 команды

Косвенно-регистровый

Адрес операнда определяется парой регистров, указываемой в коде команды

Стековый

Адрес операнда определяется текущим содержимым регистра указателя стека SP

Пример 1.16

Адрес Число Метка Мнемокод Комментарий

0802 01 00 0B LXI B,0B00h ;

команда пересылки числа 0B00 из состава команды в регистровую пару BC: операнд-источник 0B00 указан в составе команды при помощи непосредственного метода, а операнд-приёмник указан в регистровой паре BC то есть регистровым методом.

Пример 1.17

Адрес Число Метка Мнемокод Комментарий

0805 02 STAX B ;

команда пересылки числа из аккумулятора в ячейку памяти с адресом взятым из регистровой пары BC: операнд-источник указан в аккумуляторе регистровым методом, а операнд-приёмник адресован через адрес, хранящийся в регистрах BC, то есть косвенно-регистровым методом.

Пример 1.18

Адрес Число Метка Мнемокод Комментарий

0806 32 01 0B STA 0B01h ;

команда пересылки из аккумулятора в ячейку памяти с адресом 0B01: операнд-источник указан в аккумуляторе регистровым методом, а операнд-приёмник адресован через адрес, входящий в состав самой команды, то есть прямым методом.

Пример 1.19

Адрес Число Метка Мнемокод Комментарий

0809 D5 PUSH D ;

команда записи в стек содержимого регистровой пары DE: операнд-источник определён в регистровой паре регистровым методом, а операнд-приёмник адресован через адрес вершины стека, хранящийся в регистре SP, то есть стековым методом.