mov bl,c
mov cl,0
cmp bl,cl
jmp posht
Чтобы на самом деле выручить, если делитель окажется равным 0, вам нужно изменить это безусловное jmp
на условное: je
(скачок, если равен).
Прежде чем вы сможете выполнить (теперь разрешенное) деление, вам все равно нужно очистить регистр AH
, поскольку инструкция div bl
разделит все AX
, а не только AL
.
Вам нужно переосмыслить, как ваша функция сообщает о своем результате.На данный момент, независимо от того, равен делителю ноль или нет, AL
всегда будет сообщать, что он равен 0. Как вы будете различать?
mov ax, b ; 8 Also defines AH
mov bl, c ; 4
cmp bl, 0
je posht ; Bail out on zero divisor
div bl ; 8 / 4 --> AL=2 AH=0
mov ah, d ; 2
mul ah ; 2 * 2 --> AX=4
mov ah, a ; 10
sub ah, al ; 10 - 4 --> AH=6
... ; ?
RET
posht:
mov al, 0
ret