б) (А) = 0А, t = 123,5 мкс;
в) (А) = FF, t = 2,812 мс;
г) (Порт 05) = 77, t = 74 мкс;
д) Программа содержит два цикла: внешний (ячейки 0107…0110) и внутренний (ячейки 0109…010С); первый выполняется 64(16) = 100 раз, второй FA(16) = 250 раз;
(Порт 05) = 01; t = 0,5(10 + 7 + (7 + (5 + 10)×250 + 5 + 10)×100 + 10) = 0,5×377227 » 0,1886 с.
Р6.33. LDA
C1
FD
MOV B, A
LDA
C2
FD
ADD B
STA
C1
FD
Р6.34. 0000 LDA
01 01
02 1F
03 MOV B, A
04 LDA
05 02
06 1F
07 MOV C, A
08 SUB B
09 JP
0A 10
0B 00
0C MOV A, B
0D OUT
0E FF
0F HLT
10 MOV A, C
11 OUT
12 FF
13 HLT
Р6.35. а) Все операнды переводим в 16-ричную систему счисления, для умножения и деления на 2, 4, 8 используем операции сдвига:
а) MVI A
25
MOV B, A
MVI A
1E
RAR
MOV C, A
MOV A, B
SUB C
RAR
ADI
0B
HLT
Р6.36.
а) IN
05
ADD A
INR A
STA
33
22
HLT
д) 0000 IN
01 08
02 MOV B, A
03 IN
04 05
05 MOV C, A
06 SUI
07 08
08 JP
09 11
0A 00
0B MOV A, C
0C ADD B
0D STA
0E 33
0F 22
10 HLT
11 MOV A, C
12 SUB B
13 STA
14 33
15 22
16 HLT
Р6.37. С помощью команды CALL осуществляется вызов подпрограммы вычисления величины p = log2x; во время выполнения подпрограммы адрес возврата 0007 запоминается в стеке; подпрограмма заканчивается командой RET, после которой выполняется очередная команда программы INR A: (порт 06) = 1 + log2(2a – 1).
Р6.38. 0000 IN
01 05
02 MOV B, A
03 CALL
04 00
05 11
06 INR A
07 MOV C, A
08 MOV A, B
09 ADD A
0A CALL
0B 00
0C 11
0D ADD C
0E OUT
0F 06
10 HLT
Вызов подпрограммы p = cosx осуществляется с помощью команды CALL дважды.
Р6.39. 0000 IN
01 11
02 MOV D, A
03 MOV E, A
04 MOV C, A
05 MVI B
06 00
07 CALL
08 00
09 20
0A ADD E
0B MOV C, A
0C INR B
0D MOV A, B
0E SUI
0F 05
10 JM
11 07
12 00
13 MOV A, C
14 STA
15 00
16 30
17 HLT
Вызов подпрограммы, с помощью которой вычисляются степени х, осуществляется циклически с помощью команды CALL.
Промежуточные результаты суммирования хранятся в регистре С. Счет циклов проводится в регистре В.
Р6.40. а) используем для загрузки константы 100 = 64(16) регистр В.
MVI B, 64H;
MET: DCR B ;
JNZ MET ;
б) Поскольку константу 1000 = 3Е8(16) нельзя разместить в одном регистре, используем регистровую пару ВС. Один из вариантов программы следующий:
LXI B,03E8H ;Загрузка регистровой пары ВС константой
MT: DCX B ;Декремент регистровой пары ВС
MOV A,C ;Пересылка (А)¬(С)
ORA B ;Логическое сложение (А)¬(А)Ú(B)
JNZ MT ;Условный переход по ненулевому результату
При выполнении операции DCX признаки результата не формируются, поэтому для проверки содержимого регистровой пары ВС приходится предварительно выполнять логическое сложение содержимого В и С. Очевидно, что (В)Ú(С) = 0 только при (В) = (С) = 0.
Р6.41. Вычисление произведения двух 8-разрядных положительных двоичных чисел П = M×N с помощью МП КР580, в системе команд которого команды умножения нет, может быть организовано в виде циклической процедуры, каждый цикл которой содержит команды проверки очередного разряда множителя суммирования и сдвига. Для вычисления произведения П к накапливающейся сумме частичных произведений Пi (i = 8,…, 1) добавляется множимое М, если очередной разряд множителя Ni = 1, после чего осуществляется сдвиг; при Ni = 0 для единообразия циклов к Пiприбавляется 0 и также осуществляется сдвиг. Число циклов определяется числом разрядов множителя N, т.е. равно 8. Анализ Ni можно начинать со старших разрядов (i = 8) и сдвигать накапливающуюся сумму влево, либо с младших разрядов (i = 1) и сдвигать ее вправо. Схема алгоритма, соответствующая первому варианту, представлена на рис. Р6.1. Отметим, что поскольку произведение двух 8-разрядных двоичных чисел сожержит 16 разрядов, для хранения накапливающейся суммы частичных произведений Пi и результата П требуется пара РОНов МП.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.