;r2 = low
;r3 = high
;r0 = адрес BCD, младший первым
WordToBCD:
mov r4,#0 ;сотни
mov a,r2 ;младший байт числа
CalcHundreds: ;цикл подсчета сотен
clr C ;сбросим C для вычитания
subb a,#100 ;отнимаем 100
xch a,r3 ;acc=старый старший байт, r3=мл-100=новый младший
subb a,#0 ;учтем перенос
xch a,r3 ;r3=новый старший, acc=новый младший
jc FormBCD ;если был заем, значит число меньше сотни
inc r4 ;иначе больше и мы добавляем очередную сотню
jmp CalcHundreds ;проверяем дальше
FormBCD: ;имеем в acc две младшие десятичные цифры, а в r4 - две старшие
add a,#100 ;был заем, число отрицательное, добавим 100, чтобы вернуть значение
call FormTwoBCD ;преобразуем!
mov a,r4 ;две старшие цифры
FormTwoBCD: ;преобразуем число < 100 в две десятичные цифры
mov b,#10 ;будем делить на 10
div ab ;a=частное, b=остаток
mov @r0,b ;младший вперед
inc r0
mov @r0,a ;старшая цифра
inc r0
ret
end
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.