Answer the question
In order to leave comments, you need to log in
Check out the program for calculating the arithmetic mean in Assembler?
It is necessary to calculate the arithmetic mean of four integer one-byte unsigned numbers that are in the data memory. The result is stored in the buffer located in the data memory. Here is my code. Yes, yes, I understand that he is very miserable, ugly and generally terrible. But doing it right is important. Is he faithful?
.include "m16def.inc"
.list
.def number_one = R1
.def number_two = R2
.def number_three = R3
.def number_four = R4
.def sum_l = R5 ; сумма, младший разряд
.def sum_h = R6 ; сумма, старший разряд
.def counter = R20 ; счётчик чисел
.def mean_l = R23 ; среднее, младший разряд
.def mean_h = R24 ; среднее, старший разряд
.dseg
buf_one: .byte 1
buf_two: .byte 1
buf_three: .byte 1
buf_four: .byte 1
buf_sum: .byte 4
buf_counter: .byte 1
.cseg
Init:
clr sum_l
clr sum_h
clr counter
clr mean_l
clr mean_h
Start:
; сначала производим суммирование и увеличение счётчика до четырех соответственно
add sum_l, number_one ; сложить младшие разряды
brcc add_8 ; если флаг переноса не нулевой...
inc sum_h ; значение старшего разряда увеличить на 1
inc counter
add sum_l, number_two
brcc add_8
inc sum_h
inc counter
add sum_l, number_three
brcc add_8
inc sum_h
inc counter
add sum_l, number_four
brcc add_8
inc sum_h
inc counter
add_8: ; а иначе -- ничего не делать
Divide:
; производим деление
clr mean_l
clr mean_h
divsumxcounter:
tst counter ; если counter = 0, выходим из подпрограммы
breq dv3 ; с признаком ошибки С=1 (произошла ошибка)
sub sum_l,counter
sbc sum_h,counter
brcs end_divsumcounter ; если перенос в минус -- то на выход
inc mean_l ; иначе увеличиваем результат на 1 -- младший байт
brne divsumxcounter ; если не было переноса -- то обратно
inc mean_h ; иначе следующий байт на 1
rjmp divsumxcounter ; обратно
end_divsumcounter:
clc ; успешно выполнено
ret
dv3:
sec ; выполнено с ошибкой
ret
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question