DIV组装的错误答案

时间:2015-06-18 23:10:42

标签: 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

cmp dx,0
jne looop

当cx = 3时 我会得到ax = 3
但是div di
ax将变为H = 55 L = 56
和dx = 1
请问你能告诉我这里我做错了什么吗?

1 个答案:

答案 0 :(得分:3)

div di将32位数量dx:ax除以di。我们不知道您的bx有什么价值,但可能会产生dx=1(由于adc dx, dx)。所以除法将是0x10003 / 3 = 0x5556余数1,这正是你所看到的。

PS:学会使用调试器,并根据需要读取指令集引用。