2013-11-26 60 views
1

我正在尝试执行“AND”操作,但最终得到错误的显示结果。 我的编码看起来不错,但我只是不知道为什么它不能显示我想要的二进制结果。在asm中显示二进制数

这是我的操作代码:

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

您正在阅读从标准输入的字符串。所以你的值在xy是字符串,而不是数字,除非你正在转换它们,你没有在这里显示。

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

你将有则是:

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

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

在这种情况下是正确的,但是,这仅适用于单一的数字值的工作,因为只有低四位会改变,hinibble保持不变。如果你想输入更长的数字(即67和23),它将不再工作。因此,在进行操作之前,应将数字转换为二进制值,并将结果转换回数字字符串。

的方法,另外你存储的输出result,然后int 21h使用09h输出,不过这个功能需要在年底与$的字符串。所以如果你没有把它作为第二个字符,你可能会在屏幕上看到垃圾,这取决于result包含的内容。