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

Исходный текст программы разрабатывается на основе её алгоритма. Команды исходного текста пишутся сначала в форме мнемокодов. Например, простейшая программа 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