【发布时间】:2018-06-03 19:31:25
【问题描述】:
我有一个正在运行的宏,并且在汇编语言中获得了大量的数字。我一直在尝试制作一个可以打印可被 2 整除的数字的程序。在我看来,我编写的比较脚本有问题。
mov cx, number1
check:
mov dx, cx
mov bx, 2
div bx
cmp ax, 0
je divide
add ax, 1
loop:
divide:
printNumber ax
add ax, 2
cmp ax, number2
je end
jmp loop
【问题讨论】:
-
你认为
div bx做了什么,你为什么这么认为? -
它将 dx:ax 的注册表除以 bx 中的值,因为该数字占用 2 个字节。至少我是这么教的
-
div将剩余部分放入 DX,而不是 AX。此外,在输入时,DX 是股息的 high 一半,所以你正在做(cx << 16 + garbage_in_AX) / 2。如果您想查看实际发生的情况,请使用调试器单步执行。分支也是一团糟,而且看起来不正确。这太复杂了。在二进制中你只需要检查 CX 的低位test cl, 1
标签: loops assembly x86 numbers comparison