在this问题中,我问为什么我的代码不起作用,我认为问题仅出现在程序尝试打印 ASCII 字符时,但从那时起我意识到还有另一个问题。
任务是接受8个字符1和0,并将结果保存在寄存器中。
我的算法如下:
这是我的代码中应该执行此操作的部分:
mov cx,0
mov bl,8
input:
mov ah,07h
int 21h
cmp al,46
sub al,30h
cmp al,0
je valid
cmp al,1
je valid
jmp input
valid:
sub bl,1
cmp bl,0
je exit
shl cl,1
add cl,al
jmp input
但是当我使用模拟器检查寄存器
cl
时,它从未真正显示我想要的内容,例如,如果我输入11000000
,值60h
最终会保存在cl
寄存器中,这显然是不正确的.我做错了什么?
如果我输入 11000000,值 60h 最终会被保存在 cl 寄存器中,这显然是不正确的。我做错了什么?
代码正确,要求输入 8 个有效的二进制数字。然而,由于决定离开循环的指令的特定位置,第八位数字不存储在 CL 寄存器中。您不允许
shl cl,1
add cl,al
发生在第八位数字上。
快速修复是将您的代码更改为:
valid:
sub bl,1
cmp bl,0
je exit <<< exits too soon the 8th time
shl cl,1 <<< these need to execute
add cl,al <<< the 8th time also
jmp input
至:
valid:
shl cl, 1
add cl, al
dec bl
jnz input
为了获得同一循环的更好/优化版本,请阅读我对上一个问题的回答无法理解为什么程序集不起作用,即使从值寄存器正确复制了值,输出也没有显示正确的结果