汇编语言,检查数字是不是可被 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 整除并在循环中打印数字的程序的主要内容,如果未能解决你的问题,请参考以下文章

可被 k 整除的子数组数

可被 3 整除的二进制数的正则表达式

打印第三个数字和所有可被2整除的元素

查找变量是不是可被 2 整除

数字总和可被 K 整除的子数组的数量

当read()阻塞时如何退出while循环