2015-05-25 56 views
1

所以我懷疑爲什麼我們使用ADD AL,07H如果AL包含大於10的東西? ADD AL 07的解釋是什麼? 這是代碼。使用匯編語言在屏幕上打印HEX ASCII等同字母數字字符

MOV AH,01H ;TAKE INPUT 
INT 21H 

MOV BL,AL ; SAVE VALUE OF AL, SO THAT IT CAN BE USED LATER 
MOV CL,04H 
SHR AL,CL ;SHIFT AL TOWARDS RIGHT BY 4 BITS 

CMP AL,0AH ;COMPARE IF AL HAS 10 
JB DIGIT 
ADD AL,07H 
DIGIT: 
    ADD AL,30H ;Add 30 to make HEX equivalent ASCII code 
    MOV RES,AL 

    AND BL,0FH 
    CMP BL,0AH 
    JB DIGIT1 
    ADD BL,7H 

DIGIT1: 
    ADD BL,30H 
    MOV RES+1,BL 

LEA DX,RES ; display the result 
    MOV AH,9 
    INT 21H 

謝謝。

+1

刪除它,你會明白爲什麼。附上一張ASCII圖表供參考。 – usr2564301

+0

..它是「大於或等於10」。 – usr2564301

回答

2

您的程序會(連續兩次)將4位值轉換爲可顯示的字符。結果將在下面的表格服從:

0 -> "0" "0" has ASCII 48 = 0 + 48 
1 -> "1" 
2 -> "2" 
3 -> "3" 
4 -> "4" 
5 -> "5" 
6 -> "6" 
7 -> "7" 
8 -> "8" 
9 -> "9" "9" has ASCII 57 = 9 + 48 
10 -> "A" "A" has ASCII 65 = 10 + 48 + 7 
11 -> "B" 
12 -> "C" 
13 -> "D" 
14 -> "E" 
15 -> "F" "F" has ASCII 70 = 15 + 48 + 7 

從這個表中可以看到,從9更改爲10.爲了彌補這7個字符的差距時,ASCII的不很好地相互跟隨(其持有的人物:; < =>?@)您使用說明add al,7add bl,7