Мета роботи: ознайомитись із командами умовного та безумовного переходів в асемблері, навчитись будувати на їх основі цикли та розгалуження програми.
1. Розробіть програму підрахунку кількості комірок пам'яті зі значеннями, відмінними від A3h.
Без підпрограми:
org 0c100h
mov r0,#50h
mov r3,#10h
MARK2: mov A,@r0
CJNE A,#3Ah,MARK1
inc r0
inc r1
DJNZ r3, MARK2
MARK1: inc r0
DJNZ r3, MARK2
JMP $
END
З підпрограмою:
org 0c100h
mov r0,#50h
mov r3,#10h
MARK3: mov A,@r0
subb A,#3Ah
JZ MARK1
JNZ MARK2
JMP $
MARK1: CALL MARK4
CJNE r0,#60h,MARK3
JMP $
MARK2: CALL MARK5
CJNE r0,#60h,MARK3
JMP $
MARK4: inc r1
inc r0
ret
MARK5: inc r0
ret
END
2. Напишіть підпрограму обчислення чисел Фібоначчі.
Алгоритм:
А(1)=1
А(2)=1
А(i)=A(i-2)+A(i-1)
Без підпрограми:
$NOMOD51
mov r0,#10
mov r1,#0
mov A,#1
Mark: mov B,A
ADDC A,r1
mov r1,B
DJNZ r0,Mark
jmp $
end
З підпрограмою:
org 0c100h
mov A,#1
mov r1,#100
MARK: CALL FIB
DJNZ r1,MARK
jmp $
FIB:
mov B,A
ADD A,r0
mov r0,B
ret
END
3. Написати підпрограму, що сканує в циклі стан регістрів R0-R7поточного регістрового банку. Якщо значення регістра дорівнює нулю–відповідний номеру регістра біт акумулятор теж скидається. Якщо регістр не дорівнює нулю–у біт акумулятора записується одиниця.
org 0c100h
mov B,#00000001b
MAIN: mov A,@r0
CJNE A,#0,MARK2
JMP MARK1
MARK1: inc r0
xch A,B
RLC A
xch A,B
CJNE r0,#8,MAIN
JMP $
MARK2: inc r0
ORL A,B
xch A,B
RLC A
xch A,B
CJNE r0,#8,MAIN
JMP $
END
Висновок: Отже, ми ознайомились із командами умовного та безумовного переходів в асемблері, навчились будувати на їх основі цикли та розгалуження програми.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.