提问人:Root 提问时间:11/12/2023 最后编辑:Sep RolandRoot 更新时间:11/13/2023 访问量:55
Emu8086 存储 8 位数字问题
Emu8086 storing 8-bit number issue
问:
在这个问题中,我问为什么我的代码不起作用,我认为问题只是当程序试图打印出 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
答:
1赞
Sep Roland
11/13/2023
#1
如果我键入 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
有关同一循环的更好/优化版本,请阅读我对您之前问题的回答 无法理解为什么程序集不工作 即使从值寄存器中正确复制值,输出也不会显示正确的结果
评论
11000000
0C0h
60h
1100000
cmp al,1
ja input
jcc
jmp
jmp