div2 |
div3 div4 |
divl cmp.w #0 6,htX100_msw jlo div2 |
; Сравнить делитель ; со старшим словом ; делимого
; Если меньше - переход ; на div2 sub.w #0 6,htX100_msw ; Вычесть б из старше-
rlc.w DIGITS jc div4 dec.w IRBT j z div3 |
; го слова
Сдвинуть результат влево через бит переноса Если в carry "1", то завершаем
Декремент счётчика цикла Если счётчик = 0:завершение
Делимое X 2 |
rla.w htX100_lsw rlc.w htXlOOjnsw jnc divl
Если в carry «0» переход
к divl sub.w #0 6,htX100 msw ; Вычесть 6 из старше-
; го слова
setc ; Установить carry в «1»
jmp div2 ; Повтор
clrc ; Очистить carry
ret ; Возврат из подпрограммы
.^■k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k-k г
Hex2bcd ; Подпрограмма перевода 16-битного шестнадцате
; ричного значения
; DIGITS, в двоично-десятичное (BCD) входные
; данные 1б-бит шестнадцатеричные в выходные
; там же в BCD
г * * * * * -,
mov | #16,r9 |
clr | r8 |
clr | r7 |
rla | DIGITS |
dadd | r7,r7 |
dadd | r8,r8 |
dec | r9 |
jnz | L$l |
mov | r7,DIGITS |
ret |
в R9 число бит Обнулить R8 Обнулить R7
L$l rla DIGITS ; Арифметический сдвиг DIGITS
влево
Десятичное сложение source + carry —> destination
Декремент счётчика бит Все 16 бит обработаны? Результат —> DIGITS Возврат из подпрограммы