Билет 3
7. Составить подпрограмму на Ассемблере, подсчитывающую число ненулевых элементов массива из тысячи чисел, хранящихся в последовательных ячейках ОЗУ. Определить механизм передачи параметров в подпрограмму, привести пример вызова разработанной подпрограммы.
NonZero1000: mov R1,#0 ; обнуление счетчика
mov R3,#0 ; ненулевых элементов
mov R2,#10 ; загрузка счетчиков
L2: mov R3,#100 ; на 1000 элементов
L3: movx A,@DPTR ; чтение элемента массива
inc DPTR ; установка указателя на след. элемент
jz L1 ; если тек. элемент ноль идти на L1
inc R1 ; инкремент
cjne R1,#0,L1 ; двухбайтового счетчика
inc R3 ; ненулевых элементов
L1: djnz R3,L3 ; обработка счетчиков цикла
djnz R2,L2
ret ; возврат из подпрограммы
Пример вызова:
mov DPTR,#Massive ; загрузка в указатель адреса начала массива
acall NonZero1000 ; вызов подпрограммы
8. К порту вывода МПС подключен ЦАП .Предложить фрагмент принципиальной функциональной) электрической схемы МПС . Составить программу генерации на выходе ЦАП сигнала указанной формы с регулируемыми параметрами.
Start: mov P1,#0 ; формирование нулевого состояния участка t2
acall Delay2 ; реализация интервала t2
Next: inc P1 ; формирование очередного шага участка t1
acall Delay1 ; реализация интервала t1
mov A,P1
cjne A,#Amplitude, Next ; проверка на ампл. значения
sjmp Start
9. Составить подпрограмму на Ассемблере, преобразующую 8 - разрядное двоичное число в двоично - десятичный вид , т.е. вычисляющую байты, соответствующие сотням, десяткам и единицам.
BCDConvertor: mov B,#10 ; делим 1-й раз
div AB ; на 10
mov R0,B ; в остатке кол-во единиц в числе
mov B,#10 ; делим 2-й раз
div AB ; на 10
mov R1,B ; в остатке число десятков в числе
mov R2,A ; в частном число сотен в числе
ret ; возврат
Пример вызова:
mov A,#Znach ; загрузка числа
acall NonZero1000 ; вызов подпрограммы