Робоча секція

; Початок коду, що виконується

ORG 0

GOTO BEGIN

ORG 100

BEGIN

; Початок першого кроку ділення

CLRW ; Очистити регістр W

MOVLW B'0000 0010’ ; Запис константи в лічильник

MOVWF TIME ; кількості віднімань

CALL DIV10 ; Виклик процедури ділення на 10

RLF START, 1 ; Зрушення діленого на два

RLF START, 1 ; розряди ліворуч

MOVLW ENDSTART ; Завантажити молодші

; розряди діленого в регістр W

ADDWF START ; Завантажити 9-й і 10-й

; біти початкового числа

; в молодші розряди регістра START

; Закінчення першого кроку ділення

MOVLF B'0000 0100’

MOVWF TIME

CALL DIV10

MOVLF START ; Збереження молодшої декади

MOVLW DEC1 ; 2/10 числа в регістрі DEC1

MOVLW REZ ; Частку від ділення на 1-му

MOVWF START ; кроці завантажити в START

CLRF REZ ; Очистити регістр REZ

; Початок другого кроку ділення

MOVLW B'0000 0100’

MOVWF TIME

CALL DIV10

DIV10 ; Процедура ділення на 10

FIRST

SUBWF START

BTFSC STATUS, C ; Перевірка прапорця переносу

GOTO NOTFLAG1 ; Якщо С = 0, то перехід по мітці

ADDWF START ; Відновлення START

BCF STATUS, 0 ; Очистити прапорець переносу

RLF REZ, 1 ; Зрушення ліворуч частки

RRF TEN, 1 ; Зрушення праворуч дільника

GOTO NOTFLAG

NOTFLAG1 RRF TEN, 1 ; Зрушення праворуч дільника

MOVLW TEN ; Завантажити дільник в W

NOTFLAG DECFSZ TIME, 1 ; Декремент TIME, пропустити

; команду, якщо 0 (якщо регістр

; TIME онулився)

GOTO FIRST

RETURN ; Кінець процедури DIV10

END

 

Зворотне перетворення (з двійково-десяткового коду в двійковий) здійснюється діленням початкового числа на 16 за правилами десяткової арифметики.

Окрім розглянутого вище способу перетворення чисел з однієї системи числення в іншу, можна скористатися більш простим способом «двох лічильників». При цьому способі з початкового коду віднімається, а до нового коду додається по одиниці до онулення початкового коду, причому віднімання здійснюється «в старій», а додання в «новій» системі числення.