如何解决如何使用 TASM 迭代 x86 程序集中的二进制值?
我需要根据 8 位二进制数在屏幕上显示 8 个方块。例如,11111111 将打印 8 个方格,而 10000000 将仅打印一个方格。我有一个子程序来打印每个有效的方块。我的问题是我不确定如何迭代二进制值来检查二进制值。如果我使用另一种语言,如 java 或 C,我会使用 for 循环遍历二进制数,检查每个数字是否为 1,如果是 1,则调用该方法打印一个正方形。我怎样才能在组装中做到这一点?使用的值可以来自内存或寄存器,但我不明白如何检查二进制文件中 1 的位置。
解决方法
使用 shl
(或 shr
)一次将一位移出进位。如果 CF=1,则绘制正方形。
如果掩码仍然至少有一个 ON 位(最小化迭代次数),则下一个代码仅循环返回:
mov al,[Mask]
shl al,1
jnc .b
.a:
call DrawSquare
.b:
shl al,1
jc .a
jnz .b
ps:确保 DrawSquare 不会破坏 AL
寄存器。也许使用不同的寄存器。
尝试循环 8 次(假设您使用的是字节值),针对 0x01 的 & 掩码测试每一次以决定是否打印框,然后在进入循环的下一次迭代之前进行移位。伪代码如下:
for 0..7
if value & 0x01 == 0x01: print box
value = value >> 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。