下面程序的功能是:从键盘输入一个字符,将该字符的 ASCII 码按 16 进制显示出来。将程序中缺少的语句补充完整。
例如,若输入字符是 ‘C’ ,则显示: THE ASCII OF C IS 43H
原题中留出的空在注释中以下划线括出,题目中所有注释均为后续添加,原题中不包含任何注释。
.386
STACK SEGMENT USE16 STACK ; STACK SEGMENT USE16 _STACK_
DB 100 DUP(0)
STACK ENDS
DATA SEGMENT USE16
MSG DB ‘THE ASCII OF A’
MSG_1 DB ‘ IS ’
; '41H' 为字符型,占 3 个存储单元
MSG_2 DB ‘41H’, 0AH, 0DH, ‘$’
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE, DS:DATA, SS:STACK
BEGIN:
MOV AX, DATA
MOV DS, AX ; _MOV DS, AX_
MOV AH, 1
INT 21H
MOV MSG_1-1, AL ; MOV MSG_1-1, _AL_
MOV BX, 1
L1:
; 低四位转为整数类型, 先处理个位数
AND AL, 0FH
; 小于 10 , 加 '0' 转为字符型
CMP AL, 10 ; CMP AL, _10_
JB L2
; 大于 10 , 减 10 加 'A' 转为字符型
SUB AL, 10 ; SUB AL, _10_
ADD AL, ‘A’
JMP L3
L2:
ADD AL, ‘0’ ; ADD AL, _‘0’_
L3:
MOV MSG_2[BX], AL
CMP BX, 0 ; _CMP BX, 0_
JZ L4
MOV AL, MSG_1-1
; 右移,处理高四位
SHR AL, 4
DEC BX
JMP L1
L4:
MOV AH, 9
LEA DX, MSG ; LEA DX, _MSG_
INT 21H ; _INT 21H_
MOV AX, 4C00H
INT 21H
JMP L1
CODE ENDS
END BEGIN
这类题可能会在给出程序时绕一些弯子,因此做题时需要尝试模拟程序执行过程,理解程序的设计思路。