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

Команды процессора выполняют действия с операндами. Сначала они отыскивают исходные операнды, называемые операндами-источниками. Затем – выполняют операции с исходными операндами. И, наконец, отправляют полученный результат, называемый операнд-приемник, в определенную ячейку памяти, регистр процессора или порт интерфейса внешнего устройства. У любого операнда есть свой адрес хранения. Процессор имеет различные способы указания адресов операндов для отыскания операндов при чтении и для их размещения при записи. Всего микропроцессор 8080 имеет 5 способов адресации операндов, которые представлены в табл. 1.3.

Признаки результатов операций

При выполнении арифметических и логических операций с однобайтными двоичными операндами процессор имеет возможность не только получить байт результата в своем аккумуляторе, но и указать на некоторые признаки результата операции. Это реализовано через установку битов регистра признаков процессора. Его формат показан в табл. 1.4, а значения отдельных битов признаков – в табл. 1.5.

Биты регистра признаков устанавливаются командами арифметических, логических и сдвиговых операций. Они могут быть использованы другими командами в качестве объекта анализа или анализируемого условия. Анализировать состояния битов признаков могут команды условных переходов, условных вызовов подпрограмм или условных возвратов из подпрограмм. Кроме того, бит CY может принимать участие в арифметических, логических и сдвиговых операциях вместе с другими операндами.

Представление программы

Исходный текст программы разрабатывается на основе её алгоритма. Команды исходного текста пишутся сначала в форме мнемокодов. Например, простейшая программа 2.3, извлекающая число из ячейки памяти с адресом 0B00h, инвертирующую его и записывающая результат в память по адресу 0B01h.

; Программа 2.3. (в мнемокодах)

; Инвертирование однобайтного числа

;Входной параметр: M(0B00) – исходное число

;Выходной параметр: M(0B01) – результат инвертирования

.org 0800h ; Область программы

LDA 0B00h ; прочитать число из памяти с адресом 0B00 в ; аккумулятор процессора (A)

CMA ; инвертировать число в A

STA 0B01h ; записать число из A в память по адресу 0B01

RST 1 ; вернуться в монитор

;в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться ;командой RST 7.

.org 0B00h ;Область данных

.db 0E5h ;исходный байт

.db 00 ;результат

.end

Затем, для записи программы в оперативную память, необходимо перевести мнемокоды команд в машинные коды, то есть выполнить трансляцию программы. Так как команды в программе могут быть одно-, двух- или трёхбайтные, то они должны занимать соответственно одну, две или три ячейки памяти.

Программа 2.3 (размещение по адресам памяти)

Инвертирование однобайтного числа

Входной параметр: M(0B00) – исходное число

Выходной параметр: M(0B01) – результат инвертирования

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

0800 3A ;код команды LDA

0801 00 ;младший байт адреса команды LDA

0802 0B ;старший байт адреса команды LDA

0803 2F ;код команды CMA

0804 32 ;код команды STA

0805 01 ;младший байт адреса команды STA

0806 0B ;старший байт адреса команды STA

0807 CF ;код команды RST 1*

* в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться командой RST 7, имеющей код FF.

Запись многобайтных команд удобно производить в более компактной и удобной для анализа форме – одной строкой. В начале строки указывается адрес первого байта такой команды и при этом понимается, что, в зависимости от длины, байты команды в памяти будут занимать от одной до трёх последовательно расположенных ячеек.

; Программа 2.3 (в мнемокодах и кодах)

; Инвертирование однобайтного числа

;Входной параметр: M(0B00) – исходное число

;Выходной параметр: M(0B01) – результат инвертирования

.org 0800h ; Область программы

0800 3A 00 0B LDA 0B00h ;AßM(0B00)

0803 2F CMA ; инвертировать число в A

0804 32 01 0B STA 0B01h ;AàM(0B01)

0807 CF RST 1 ;возврат в Монитор

;в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться ;командой RST 7.

.org 0B00h ;Область данных

.db 0E5h ;исходный байт

.db 00 ;результат

.end

В программе 2.3 для определения операнда в памяти используется прямой метод адресации. В следующей программе 2.4 выполняются те же действия над исходным операндом, но для его определения в памяти применён уже косвенный метод адресации.

; Программа 2.4.

; Инвертирование однобайтного числа

;Входной параметр: M(0B00) – исходное число

;Выходной параметр: M(0B01) – результат инвертирования

.org 0800h ; Область программы

LXI H,0B00h ; HLß0B00

MOV A,M ; AßM(HL)

CMA ; инвертировать число в A

INX H ; HLßHL+1

MOV M,A ; AàM(HL)

RST 1 ; вернуться в монитор

;в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться ;командой RST 7.

.org 0B00h ;Область данных

.db 0E5h ;исходный байт

.db 00 ;результат

.end

Порядок выполнения работы