Assembly 为什么mov dx,0修复了这个除法例程?
一个查找最大除数的简单循环,该除数是根的整数,在本例中,在345三角形中,除数为5Assembly 为什么mov dx,0修复了这个除法例程?,assembly,x86,dos,Assembly,X86,Dos,一个查找最大除数的简单循环,该除数是根的整数,在本例中,在345三角形中,除数为5 mov ax,3 mul ax push ax mov ax,4 mul ax pop bx add ax,bx
mov ax,3
mul ax
push ax
mov ax,4
mul ax
pop bx
add ax,bx
push ax ;save 25 decimal for repeated loops
mov bx,1
mov bp,sp
agin
mov dx,0 ;fixed problem
mov ax,[bp] ;25 decimal
inc bx ;starts at 2
div bx
cmp bx,ax
jb agin
out
然而,当程序从2变为3时,奇怪的事情发生了,我得到的是hex555D而不是8(8*3)
将mov dx,0放入修复状态并恢复正常
我不知道为什么,没有旗帜改变
有人知道为什么吗?这是有符号/无符号问题吗?指令将数字DX:AX除以操作数
DX是上面的单词。AX是较低的词。因此,如果要将AX除以BX,则需要将DX归零。指令将数字DX:AX除以操作数
DX是上面的单词。AX是较低的词。因此,如果要将AX除以BX,则需要将DX归零。干杯。我从来不知道以前除法的剩余部分可以做到这一点(因此它在16位模式下的工作方式类似于32位操作),这也是为什么会有“CWD”指令的原因!它有助于支持这些大型拆分寄存器操作。干杯。我从来不知道以前除法的剩余部分可以做到这一点(因此它在16位模式下的工作方式类似于32位操作),这也是为什么会有“CWD”指令的原因!它有助于支持这些大型拆分寄存器操作。