首页 > 解决方案 > 汇编语言,检查数字是否可被 2 整除并在循环中打印数字的程序

问题描述

我有一个正在工作的宏,并且在汇编语言中获得了大量的数字。我一直在尝试制作一个可以打印可除以 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

标签: loopsassemblyx86numberscomparison

解决方案


如果要测试它是否可被 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

推荐阅读