Анализ по машинным циклам и тактам выполнения двух (однобайтной и трёхбайтной) произвольно выбранных команд из программы 2.3.
Команда LDA 0В00 - загружает число из памяти с адресом 0B00 в аккумулятор процессора (A)
Формат команды -3 байта, число тактов в команде – 13, количество машинных циклов – 4.
Во время выполнения команда LDA 0В00 в первом цикле (адрес 0800)извлекает первый байт команды(3А), во втором(0801) – извлекает второй байт(00), в третьем(0802) – третий байт(0В), а в четвёртом – выполняет саму команду.
Команда LDA 0B00 не влияет ни на какие признаки.
Команда CMA - инвертирует число в аккумуляторе.
Также как и команда LDA не влияет ни на какие признаки.
Формат команды -1 байт, количество машинных тактов в команде – 4, количество машинных циклов – 1.
Команда СМА за один цикл извлекает байт команды и выполняет её.
Диаграмма 1 - Временная диаграмма выполнения микро-ЭВМ команды MOV A,M из программы 2.4
В первом такте каждого машинного цикла процессор выводит слово состояние PSW (Processor Status Word). Это слово содержит характеристики начавшегося машинного цикла. Его биты будут интерпретированы системным контроллером и преобразованы в сигналы управления обменом в данном машинном цикле.
С начала второго такта процессор формирует сигнал SYNC для стробирования приема байта состояния PSW в системный контроллер. Затем, по фронту CLK2, процессор выдает сигнал DBIN. А системный контроллер, дешифрировав байт PSW, установит активный уровень сигнала (строб чтение памяти). Этот сигнал инициирует адресованную ячейку к выдаче на линии данных своего содержимого.
Третий такт начинается когда читаемые данные установлены и сигнал READY равен 1. В этом такте процессор примет данные с линии D0..7 и отправит их в регистр команд. Затем снимет свой сигнал DBIN со входа системного контроллера, а последний в ответ снимет свой сигнал с линии управления шины.
В четвёртом такте процессор снимает адрес команды с шины адреса. Её состояние становится неопределённым.
0001 0000 ; Программа 2.4.
0002 0000 ; Инвертирование однобайтного числа
0003 0000 ;Входной параметр: M(0B00) - исходное число
0004 0000 ;Выходной параметр: M(0B01) - результат инвертирования
0005 0800 .org 0800h ; Область программы
0006 0800 21 00 0B LXI H,0B00h ; HLђ0B00
0007 0803 7E MOV A,M ; AђM(HL)
0008 0804 2F CMA ; инвертировать число в A
0009 0805 23 INX H ; HLђHL+1
0010 0806 77 MOV M,A ; A'M(HL)
0011 0807 CF RST 1 ; вернуться в монитор
0012 0808 ;в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться ;командой RST 7.
0013 0B00 .org 0B00h ;Область данных
0014 0B00 E5 .db 0E5h ;исходный байт
0015 0B01 00 .db 00 ;результат
0016 0B02 .end
tasm: Number of errors = 0
Видоизмененная программа 2.4.
; Программа 2.4.
; Инвертирование однобайтного числа
;Входной параметр: M(0B00) – исходное число
;Выходной параметр: M(0B01) – результат инвертирования
.org 0800h ; Область программы
MVI A, 0E5
CMA ; инвертировать число в A
STA 0B01h ; A’M(0B01)
RST 7 ; вернуться в монитор
;в микро-ЭВМ УМК-80 для возврата в монитор следует пользоваться ;командой RST 7.
.org 0B00h ;Область данных
.db 0E5h ;исходный байт
.db 00 ;результат
.end
Вывод: в данной программе число определяется в коде команды (при помощи команды MVI), что позволяет сократить размер программы или держать в ее составе данные для ее выполнения.