assembly - 如果除数为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 上工作?
解决方案
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
推荐阅读
- laravel - 在 laravel 通知上调用 null 上的成员函数 delay()
- c# - .Net 和 SQL - 具有长时间运行进程的事务
- javascript - How can i excute script New page in chrome extension?
- pandas - 索引值与航班(数据范围 A 行和 E 行)
- java - 在流中使用 Java 8 Supplier 实现惰性求值
- segmentation-fault - PThread 分段错误,增量器/减量器
- scala - Kafka-Spark Batch Streaming:WARN clients.NetworkClient:Bootstrap broker 断开连接
- grid - 从数据网格视图中选择行并选择
- amd - SystemJS:命名的 AMD 模块有时有空的默认值
- r - 使用 group_by 时不支持的类型