2013-11-26 110 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包含的內容。