结构推理 设某班有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
【答案解析】