Assembly 来自DIV组件的错误答案
我有一部分代码Assembly 来自DIV组件的错误答案,assembly,x86,Assembly,X86,我有一部分代码 mov di,3 mov cx,16 looop: xor dx,dx shl bx,1 adc dx,dx cmp cx,16 je cx16 (it's will dec cx and jump loop) push dx dec cx cmp cx,0 je cx0 mov ax,cx div di cm
mov di,3
mov cx,16
looop:
xor dx,dx
shl bx,1
adc dx,dx
cmp cx,16
je cx16 (it's will dec cx and jump loop)
push dx
dec cx
cmp cx,0
je cx0
mov ax,cx
div di
cmp dx,0
jne looop
当cx=3时我将得到ax=3
但是
div di
ax将变为H=55 L=56
dx=1
你能告诉我我做错了什么吗?
div di
将32位的数量dx:ax
除以di
。我们不知道您的bx
的值是多少,但它可能会产生dx=1
(由于adc-dx,dx
)。所以除法将是0x10003/3=0x5556
余数1
,这正是您看到的
PS:学习使用调试器,并根据需要阅读指令集参考。当我运行您的程序时,在
div di
之后,我得到al=5,ah=0,dx=0
。我用的是EMU8086。在'div di'之前,ax=15(因为cx是16,但是dec x
),di=3
和dx=0
,所以,15/3=5。所以答案取决于机器?我忘了je cx16将dec cx取决于你想做什么,你可能需要在div
之前将dx归零。你能给我推荐一本关于汇编的书吗