Билет 4
10. Составить подпрограмму на Ассемблере, вычисляющую сумму отрицательных элементов массива из тысячи чисел, хранящегося в последовательных ячейках ОЗУ. Определить механизм передачи параметров в подпрограмму, привести пример вызова разработанной подпрограммы.
SummNegative1000: mov R1,#0 ; обнуление суммы
mov R3,#0 ; отрицаетельных элементов
mov R2,#10 ; загрузка счетчиков
L2: mov R3,#100 ; на 1000 элементов
L3: movx A,@DPTR ; чтение элемента массива
inc DPTR ; установка указателя на след. Элемент
rlc A
jnc L1 ; если тек. >=0 идти на L1
rrc A
add A,R1 ; вычисление
mov R1,A ; двухбайтовой
mov A,#0 ; суммы
addc A,R3 ; отрицательных
mov R3,A ; элементов
L1: djnz R3,L3 ; обработка счетчиков цикла
djnz R2,L2
ret ; возврат из подпрограммы
Пример вызова:
mov DPTR,#Massive ; загрузка в указатель адреса начала массива
acall SummNegative1000 ; вызов подпрограммы
11. Составить подпрограмму на Ассемблере, вычисляющую сумму элементов массива из тысячи байт, хранящегося в последовательных ячейках ОЗУ, равных константе, хранящейся в ячейке памяти программ (ПЗУ).
SummEq1000: mov R1,#0 ; обнуление суммы
mov R3,#0 ; равных элементов
mov R2,#10 ; загрузка счетчиков
L2: mov R3,#100 ; на 1000 элементов
L3: movx A,@DPTR ; чтение элемента массива
inc DPTR ; установка указателя на след. Элемент
cjne A,#Const,L1 ; если элемент не равен константе идти на L1
add A,R1 ; вычисление
mov R1,A ; двухбайтовой
mov A,#0 ; суммы
addc A,R3 ; равных константе
mov R3,A ; элементов
L1: djnz R3,L3 ; обработка счетчиков цикла
djnz R2,L2
ret ; возврат из подпрограммы
Пример вызова:
mov DPTR,#Massive ; загрузка в указатель адреса начала массива
acall SummEq1000 ; вызов подпрограммы
12. В последовательных ячейках ОЗУ хранится массив из тысячи целых положительных чисел. Составить подпрограмму, определяющую число элементов массива, попадающих в диапазон, границы которого заданы в двух произвольных ячейках памяти. Определить механизм передачи параметров в подпрограмму, привести пример вызова разработанной подпрограммы.
NumDiapazon1000: mov R1,#0 ; обнуление счетчиков mov R3,#0 ; элементов попадающих в диапазон
mov R2,#10 ; загрузка счетчиков
L2: mov R3,#100 ; на 1000 элементов
L3: movx A,@DPTR ; чтение элемента массива
inc DPTR ; установка указателя на след. Элемент
mov R4,A ; временное сохранение
clr c ; сравнение
subb A,R5 ; с минимумом
jc L1 ; если меньше минимума идти на L1
mov A,R6 ; временное сохранение
clr c ; сравнение
subb A,R4 ; с максимумом
jc L1 ; если больше максимума идти на L1
inc R1 ; инкремент
cjne R1,#0,L1 ; двухбайтового счетчика
inc R3 ; элементов из диапазона
L1: djnz R3,L3 ; обработка счетчиков цикла
djnz R2,L2
ret ; возврат из подпрограммы
Пример вызова:
mov DPTR,#Massive ; загрузка в указатель адреса начала массива
acall NumDiapazon1000 ; вызов подпрограммы