我正在尝试进行'AND'操作,但最终得到错误的显示结果。 我的编码似乎很好但我不知道为什么它无法显示我想要的二进制结果。
这是我的操作代码:
mov ah, 09h
lea dx,sAnd
int 21h
mov ah, 09h
lea dx, sInputX
int 21h
mov ah,0ah
lea dx,x
int 21h
jmp VerifyX
mov ah, 09h
lea dx, sInputY
int 21h
mov ah,0ah
lea dx,y
int 21h
jmp Operation1
Operation1:
mov Al, x
and Al, y
mov result, Al
jmp CONVERSION
CONVERSION:
mov ah, 09h
lea dx, result
int 21h
答案 0 :(得分:0)
您正在从stdin读取字符串。因此,x
和y
中的值是字符串而不是数字,除非您要转换它们,这里没有显示。
现在假设用户输入9
作为第一个字符串,3
作为第二个字符串。
您将拥有的是:
x = 39h ; '9'
y = 33h ; '3'
39h AND 33h = 31h ; '1'
在这种情况下哪个是正确的,但是,这仅适用于单个数字值,因为只有低半字节才会改变,而且可以保持不变。如果你想输入更长的数字(即67和23)它将不再起作用。因此,在执行和操作之前,应将数字转换为二进制值,并且必须将结果转换回数字字符串。
您通常将输出存储在result
中,然后在09h
上使用int 21h
进行输出,但此函数最后需要一个带$
的字符串。因此,如果你没有把它作为第二个字符,你可能会在屏幕上看到垃圾,具体取决于result
包含的内容。