在asm中显示二进制数

时间:2013-11-26 07:53:09

标签: assembly binary x86 x86-16

我正在尝试进行'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

1 个答案:

答案 0 :(得分:0)

您正在从stdin读取字符串。因此,xy中的值是字符串而不是数字,除非您要转换它们,这里没有显示。

现在假设用户输入9作为第一个字符串,3作为第二个字符串。

您将拥有的是:

x = 39h   ; '9'
y = 33h   ; '3'

39h AND 33h = 31h ; '1'

在这种情况下哪个是正确的,但是,这仅适用于单个数字值,因为只有低半字节才会改变,而且可以保持不变。如果你想输入更长的数字(即67和23)它将不再起作用。因此,在执行和操作之前,应将数字转换为二进制值,并且必须将结果转换回数字字符串。

您通常将输出存储在result中,然后在09h上使用int 21h进行输出,但此函数最后需要一个带$的字符串。因此,如果你没有把它作为第二个字符,你可能会在屏幕上看到垃圾,具体取决于result包含的内容。