В программе использована команда зацикливания LOOP, заменяющая пару команд – декремент и условный переход по ненулевому результату. Обозначение BEG [SI] в команде суммирования ADD указывает на то, что эффективный адрес очередного слова определяется суммированием начального адреса BEG и содержимого индексного регистра SI.
Число тактов для команды ADD AX, BEG [SI] определяется как n' = 9 + nЕА, где nеа — число тактов для вычисления эффективного адреса. В данном случае EA = (SI) + disp H,L, где disp H,L — смещение, непосредственно задаваемое в команде как адрес ячейки BEG [SI] (относительная регистровая адресация). При этом nEA = 9 и n'=18.
Число тактов для команды LOOP ROT при выполнении условия (СХ) ¹ 0 равно 17, при невыполнении - 5. Число тактов для команды MOV RES,АХ равно n" = 9 + nЕА, и, поскольку имеет место прямая адресация памяти, nЕА = 6 и n" =15.
Цикл выполняется N раз, поэтому суммарное число тактов
n = (4 + 4 + 2) + (18 + 4 + 17)×N + (18 + 4 + 5 + 15) = 52 + 39N.
При fт = 5 МГц и N = 100 общее время выполнения фрагмента программы
Р6.62. Фрагмент программы:
MOV BL,OA7H ;3агрузка в регистр BL константы k1
MOV CL,95H ;3агрузка в регистр CL константы k2
INPUT: IN 07 ;Ввод в регистр AL набора
;переменных D из порта 07
XOR BL,AL ;Сравнение байтов k1и D
JZ OUT1 ;Переход к OUT1 при kl = D
XOR CL,AL ;Сравнение байтов k2 и D
JZ OUT1 ;Переход от OUT1 при k2 = D
JMP OUT0 ;Переход от OUT0
OUT1: MOV AL,01H ;3агрузка регистра AL единицей
OUT 05 ;Вывод единичного результата
;через порт 05
JMP INPUT ;Возврат к INPUT
OUT0: MOV AL, ООН ;3агрузка регистра AL нулем
OUT 05 ;Вывод нулевого результата через порт 05
JMP INPUT ;Возврат к INPUT
Команды XOR — исключающее ИЛИ (сумма по mod 2) позволяют сравнить содержимое регистра AL, т. е. входной набор переменных, с содержимым регистров BL и CL, т.е. с минтермами. При совпадении (BL) или (CL) с (AL) (BL)Å(AL) = 0 или (CL)Å(AL) = 0, и через порт 05 выводится единица, в противном случае — нуль.
Р6.63. Фрагмент программы:
MOV АХ, [ВХ] ;3агрузка операнда X в регистр АХ
MUL АХ, [СХ] ;Умножение X на Y
ADD AX, [DX] ;Прибавление Т
ADD AX, АХ ;Удвоение результата
СМР АХ,015ЕН ;Сравнение с константой 350
JS PROC1 ;Переход по адресу PROC1 при z < 350
OUT 02 ;Вывод результата
В программе используется операция беззнакового умножения MUL. Поскольку операнды 8 битовые, произведение может иметь 16 бит, и для результата используется регистр АХ. Для перехода по метке PROC1 используется команда сравнения СМР и условный переход по отрицательному результату JS.
Р6.64. Программно-доступными узлами МК1816 являются: 8-разрядное АЛУ, стираемое и перепрограммируемое ППЗУ емкостью 1 Кбайт, регистровое ОЗУ емкостью 64 байт. 8-разрядный программируемый таймер-счетчик, 8-уровневый указатель стека, программно-управляемые схемы ввода-вывода (27 линий), 12-разрядный счетчик команд.
Р6.65. Поскольку счетчик команд МК1816 содержит 12 разрядов, адресуемая емкость памяти 212 = 4К ячеек.
Р6.66. Внутреннее ОЗУ МК1816 имеет общую емкость 64 байта (рис. Р6.3, а). Два банка 8-битовых РОНов RBO и RB1 по 8 регистров в каждом банке, т. е. всего 16 регистров, доступны командам с прямой адресацией. Остальные 48 регистров доступны командам с косвенной адресацией, причем адреса размещаются в аккумуляторе или РОНах— R0 и R1 каждого банка. Банк выбирается с помощью команды SEL RB0 или SEL RB1. При выполнении каждой из этих команд номер выбранного банка фиксируется, и в дальнейшем, вплоть до подачи другой команды, используются РОНы только этого банка. Ячейки ОЗУ с адресами 8...23 адресуются также указателем стека и могут быть использованы в качестве 8-уровневого стека.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.