| ;**************************** D16_8 **************************** | ||
| ; Подпрограмма деления целых двоичных чисел без знака ; формата 16:8=(16,8). ; Входные параметры: (Н,L) - делимое, (С) - делитель. ; Выходные параметры: (D,E) - частное, (Н) - остаток. | ||
| ;**************************************************************** | ||
| D16_8: | MVI B, 8 | ; Счетчик циклов | 
| XRA A | ||
| ADD C | ; (А) - делитель | |
| ; Нормализация делителя: устранение левых нулей | ||
| CYCLE1: | RAL | |
| INR B | ||
| JNC CYCLE1 | ; Если выдвинутый разряд = 0 | |
| RAR | ||
| MOV C, A | ; (С) - нормализованный делитель | |
| DCR B | ||
| ; Сохранение величины сдвигов делителя | ||
| MOV A, B | ||
| SBI B | ||
| PUSH PSW | ||
| ; Нормализация делимого: устранение левых нулей | ||
| CYCLE2: | XRA A | |
| ADD H | ; (А) - СТБ делимого | |
| JM PER2 | ; Если старший разряд = 1 | |
| DAD H | ; Сдвиг делимого влево | |
| DCR B | ||
| JMP CYCLE2 | ; Зацикливание | |
| PER2: | LXI D, 0 | ; Обнуление частного | 
| ; Вычитание делителя из делимого, (А) - СТБ делимого | ||
| SUB C | ||
| INX D | ; Установка разряда частного = 1 | |
| JNC PER3 | ; Если разность > 0 | |
| DCX D | ; Сброс разряда частного = 0 | |
| ADD C | ; Восстановление делимого | |
| PER3: | MOV H, A | |
| ; Проверка счетчика циклов на 0 | ||
| XRA A | ||
| ADD B | ||
| JZ EXIT | ; Если счетчик = 0 | |
| ; Сдвиг влево частного (D,E) и остатка (Н,L) | ||
| CYCLE: | XCHG | |
| DAD H | ||
| XCHG | ||
| DAD H | ||
| MOV A, H | ; (А) - СТБ остатка | |
| JC PER4 | ; Если переполнение остатка | |
| ; Вычитание делителя из остатка | ||
| SUB C | ||
| JNC PER5 | ; Если разность > 0 | |
| ; Разность < 0, восстановление остатка | ||
| ADD C | ||
| MOV H, A | ||
| JMP PER6 | ||
| ; Переполнение остатка, установка разряда частного = 1 | ||
| PER4: | SUB C | ; Вычитание делителя | 
| PER5: | MOV H, A | |
| INX D | ; Разряд частного = 1 | |
| ; Проверка конца цикла | ||
| PER6: | DCR B | |
| JNZ CYCLE | ; Зацикливание | |
| ; Коррекция остатка: сдвиг вправо | ||
| EXIT: | POP PSW | ; (А) - счетчик сдвигов | 
| RZ | ; Если счетчик = 0 | |
| MOV C, A | ||
| XRA A | ||
| ADD H | ; (А) - остаток | |
| CYCLE3: | RAR | |
| DCR C | ||
| JNZ CYCLE3 | ; Зацикливание | |
| MOV H, A | ||
| RET | ||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.