汇编语言,检查数字是不是可被 2 整除并在循环中打印数字的程序
Posted
技术标签:
【中文标题】汇编语言,检查数字是不是可被 2 整除并在循环中打印数字的程序【英文标题】:Assembly language, program to check if a number is divideable by 2 and print numbers in a loop汇编语言,检查数字是否可被 2 整除并在循环中打印数字的程序 【发布时间】: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
【参考方案1】:
如果您要测试它是否可被 2 整除的数字在 number1 中并且您知道单词除法 div bx
实际上除以 DX:AX
那么您需要将数字移动到AX
和零 DX
。
check:
mov ax, number1
xor dx, dx
mov bx, 2
div bx
然后,实际的决定来自检查这个除以 2 的 余数。余数在 DX
寄存器中!
cmp dx, 0
je divisible
但是所有这些都是多余的,因为测试一个数字是否可以被 2 整除只是查看其最低位的简单问题:
test number1, 1
jz divisible
【讨论】:
以上是关于汇编语言,检查数字是不是可被 2 整除并在循环中打印数字的程序的主要内容,如果未能解决你的问题,请参考以下文章