使用汇编语言在屏幕上打印等同于字母数字字符的 HEX ASCII
Print the HEX ASCII equivalent of a Alphanumeric character on the screen using Assembly language
所以我的疑问是,如果 AL 包含大于 10 的值,为什么我们要使用 ADD AL,07H? ADD AL,07 的解释是什么?
这是代码。
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
谢谢。
您的程序(连续 2 次)将 4 位值转换为可显示字符。结果将遵循以下 table:
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
由此 table 您可以看到,当从 9 变为 10 时,ASCII 并不能很好地相互跟随。为了弥补这 7 个字符的差距(它包含字符 : ;<=>?@) 您使用了指令 add al,7
和 add bl,7
所以我的疑问是,如果 AL 包含大于 10 的值,为什么我们要使用 ADD AL,07H? ADD AL,07 的解释是什么? 这是代码。
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
谢谢。
您的程序(连续 2 次)将 4 位值转换为可显示字符。结果将遵循以下 table:
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
由此 table 您可以看到,当从 9 变为 10 时,ASCII 并不能很好地相互跟随。为了弥补这 7 个字符的差距(它包含字符 : ;<=>?@) 您使用了指令 add al,7
和 add bl,7