;************************** D16_16 ****************************** |
||
; Подпрограмма деления целых двоичных чисел без знака ; формата 16:16=(16,16) с целым частным. ; Входные параметры: (Н,L) - делимое, (В,С) - делитель. ; Выходные параметры: (D,E) - частное, (Н,L) - остаток. |
||
;**************************************************************** |
||
D16_16: |
XCHG |
; (D,E) - делимое |
LXI H, 0 |
; Обнуление остатка |
|
MVI A, 16 |
; Счетчик циклов |
|
; Сдвиг влево остатка (Н,L) и делимого (частного (D,E)) |
||
CYCLE: |
PUSH PSW |
; Сохранение счетчика |
DAD H |
||
XRA A |
||
XCHG |
||
DAD H |
||
XCHG |
||
; Вычитание делителя из остатка |
||
ADC L |
; Учет переноса от сдвига |
|
SUB C |
||
MOV L, A |
||
MOV A, H |
||
SBB B |
||
MOV H, A |
||
; Проверка знака разности и коррекция частного |
||
INX D |
; Установка разряда частного = 1 |
|
JNC PER |
; Если разность > 0 |
|
DAD D |
; Восстановление остатка |
|
DCX D |
; Сброс разряда частного = 0 |
|
; Проверка конца цикла |
||
PER: |
POP PSW |
; Восстановление счетчика |
DCR A |
||
JNZ CYCLE |
; Зацикливание |
|
RET |
;************************** D16_16A **************************** |
||
; Подпрограмма деления целых двоичных чисел без знака ; формата 16:16=16,16 с дробным частным. ; Делимое меньше делителя. ; Входные параметры: (H,L) - делимое, (В,С) - делитель. ; Выходные параметры: (D,E) - частное, (H,L) -остаток. |
||
;**************************************************************** |
||
; Дополнение делителя (В,С) |
||
D16_16A: |
MOV A, B |
|
CMA |
||
MOV B, A |
||
MOV A, C |
||
CMA |
||
MOV C, A |
||
INX B |
||
MVI A, 16 |
; Счетчик циклов |
|
; Сдвиг частного (D,E) и остатка (H,L) влево |
||
CYCLE: |
XCHG |
|
DAD H |
; Сдвиг частного |
|
XCHG |
||
DAD H |
; Сдвиг остатка |
|
JC PER1 |
; Если переполнение остатка |
|
; Сложение остатка с дополнительным кодом делителя |
||
PUSH H |
; Сохранение остатка |
|
DAD B |
||
JNC PER2 |
; Если сумма < 0 |
|
; Сумма частного > 0, разряд частного = 1 |
||
INX SP |
||
INX SP |
; Баланс стека |
|
INX D |
; +1 в частное |
|
JMP PER3 |
||
; Переполнение остатка, разряд частного = 1 |
||
PER1: |
DAD B |
; Формирование остатка |
INX D |
; +1 в частное |
|
JMP PER3 |
||
; Сумма < 0, восстановление остатка |
||
PER2: |
POP H |
|
; Проверка конца цикла |
||
PER3: |
DCR A |
|
JNZ CYCLE |
; Зацикливание |
|
RET |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.