首页 > 解决方案 > 如果除数为0,如何编写产生0的除法函数?

问题描述

如果它尝试与 0 相除,则函数结果应为 0。

  org 100h
  mov al,b
  mov bl,c
  mov cl,0
  cmp bl,cl
  jmp posht;
  div bl
  mov ah,d
  mul ah
  mov ah,a
  sub ah,al
posht:
  mov al,0
  ret

a dw 10
b dw 8
c dw 4
d dw 2
zero dw 0

如何使此代码在汇编语言 emu8086 上工作?

标签: assemblyx86-16emu8086

解决方案


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

推荐阅读