结构推理
设某班有30位同学,现需将某课程的成绩通过键盘输入依次存放在TAB缓冲区中(得分范围0~99)。采用子程序的结构形式编程,找出最高分送显示器输出。要求:
(1)编写一键盘输入子程序。
(2)编写一将两个数字的ASCII码转换成一字节压缩BCD码的子程序。
(3)编写一字节压缩BCD码转换为ASCII码的子程序。
(4)编写一屏幕显示输出子程序。
(5)写出主程序调用子程序的程序段。
【正确答案】STACK SEGMENT STACK ‘STACK’
DW 100 DUP(0)
STACK ENDS
DATA SEGMENT
TAB DB 30 DUP(0)
N = $-TAB
MAX DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SI,TAB
MOV CX,N
CALL INDIS
MOV AH,4CH
INT 21H
INDIS PROC
PUSH AX
PUSH CX
PUSH SI
PUSH CX
CALL KBIN
POP CX
POP SI
MOV AL,0
LA: CMP AL,[SI]
JNB NEXT
MOV AL,[SI]
NEXT: INC SI
LOOP LA
MOV MAX,AL
CALL BBCD
POP CX
POP AX
RET
INDIS ENDP
KBIN PROC
PUSH AX
PUSH BX
PUSH CX
L1: MOV AH,1
INT 21H
CMP AL,30H
JB L1
CMP AL,39H
JA L1
MOV BH,AL
L2: MOV AH,1
INT 21H
CMP AL,30H
JB L2
CMP AL,39H
JA L2
MOV BL,AL
CALL ABCD
MOV [SI],BL
INC SI
LOOP L1
POP CX
POP BX
POP AX
RET
KBIN ENDP
ABCD PROC
PUSH CX
MOV CL,4
SHL BH,CL
AND BL,0FH
OR BL,BH
POP CX
RET
ABCD ENDP
BBCD PROC
PUSH AX
PUSH DX
PUSH CX
MOV CL,4
MOV DL,AL
SHR DL,CL
CALL DISP
AND AL,0FH
MOV DL,AL
CALL DISP
POP CX
POP DX
POP AX
RET
BBCD ENDP
DISP PROC
PUSH AX
MOV AL,2
INT 21H
POP AX
RET
DISP ENDP
CODE ENDS
END START
【答案解析】