;************************* C16_10F ***************************** |
||
; Подпрограмма преобразования двоичного беззнакового числа с ; фиксированной перед старшим разрядом запятой формата 16 в двоично; десятичное число с фиксированной запятой ( ,Р1Р2Р3Р4Р5) формата 5*4. ; Входной параметр: (В,С) - двоичное число. ; Выходные параметры: (A,H,L) - эквивалентное двоично-десятичное число. ; Используется подпрограмма M16_10F. |
||
;**************************************************************** |
||
; Последовательное умножение исходного числа на 10 |
||
C16_10F: |
CALL M16_10F |
|
PUSH PSW |
; Сохранение цифры Р1 |
|
CALL M16_10F |
||
PUSH PSW |
; Сохранение цифры Р2 |
|
CALL M16_10F |
||
PUSH PSW |
; Сохранение цифры Р3 |
|
CALL M16_10F |
||
PUSH PSW |
; Сохранение цифры Р4 |
|
CALL M16_10F |
||
MOV L, A |
; (L) - цифра Р5 |
|
; Упаковка цифр результата в регистры |
||
POP PSW |
; Восстановление цифры Р4 |
|
RLC |
||
RLC |
||
RLC |
||
RLC |
||
ORA L |
||
MOV L, A |
; (L) - цифры Р4, Р5 |
|
POP PSW |
; Восстановление цифры Р3 |
|
MOV H, A |
; (H) - цифра Р3 |
|
POP PSW |
; Восстановление цифры Р2 |
|
RLC |
||
RLC |
||
RLC |
||
RLC |
||
ORA H |
||
MOV H, A |
; (H,L) - цифры Р2Р3Р4Р5 |
|
POP PSW |
; Восстановление цифры Р1 |
|
RET |
; (А) - цифра Р1 |
|
;**************************** M16_10F ************************** |
||
; Подпрограмма умножения двоичного беззнакового числа ; с фиксированной перед старшим разрядом запятой ; формата 16 на основание десятичной системы: 10. ; Входной параметр: (В,С) - число с ФЗ. ; Выходные параметры: (A) - целая часть произведения (двоично; десятичная цифра), (В,С) - дробная часть произведения. |
||
;**************************************************************** |
||
; Подготовка регистров |
||
M16_10F: |
MOV H, B |
|
MOV L, C |
; (H,L) - число с ФЗ |
|
MOV D, B |
||
MOV E, C |
; (D,E) - число с ФЗ |
|
XRA A |
||
MOV B, A |
||
MOV C, A |
; (В,С) = 0 |
|
; Сдвиг числа с ФЗ влево на 1 разряд в (В,H,L) |
||
DAD H |
||
ADC B |
||
MOV B, A |
; (В,H,L) - (число с ФЗ)*2 |
|
; Сдвиг числа с ФЗ влево на 3 разряда в (С,D,E) |
||
XCHG |
; (H,L) - число с ФЗ |
|
DAD H |
; Первый сдвиг |
|
MOV A, C |
||
RAL |
||
MOV C, A |
||
DAD H |
; Второй сдвиг |
|
MOV A, C |
||
RAL |
||
MOV C, A |
||
DAD H |
; Третий сдвиг |
|
MOV A, C |
||
RAL |
||
MOV C, A |
||
XCHG |
; (С,D,E) - (число с ФЗ)*8 |
|
; Сложение сдвинутых чисел: умножение на 10 |
||
DAD D |
||
MOV A, B |
||
ADC C |
; (А,H,L) - (число с ФЗ)*10 |
|
MOV B, H |
||
MOV C, L |
; (В,С) - дробная часть |
|
RET |
; (А) - целая часть |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.