微机原理 汇编语言题目

修改下列程序,使符合要求:将DATA2开始的5个单元中的数据显示在屏幕上。

DATAS SEGMENT
DATA1 DW 55,70,82,90,60,70,95,84,75,63
DW 55,70,82,90,60,70,95,84,75,63 ;20名学生的成绩(0~100保存在连续的40个单元中)
COUNT EQU ($-DATA1)/2 ;学生总人数
DATA2 DB 5 DUP (0) ;各范围的人数(5个单元)
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
START:
MOV AX,DATAS
MOV DS,AX
LEA SI,DATA1
MOV CX,COUNT
L1:
CALL GETDOMAIN ;找出成绩对应的范围,保存在BX中
;将对应人数增加1
MOV AL,DATA2[BX]
INC AL
MOV DATA2[BX],AL
LOOP L1
MOV AH,4CH
INT 21H
MAIN ENDP
;传入参数:DS,SI用来确定一名学生的成绩
;返回值:BX,该成绩所在的范围对应的DATA2的位置
;功能:通过比较,确定成绩所在范围
GETDOMAIN PROC NEAR
LODSW ;(AX)=(DS:SI),(SI)=(SI)+1
MOV BX,0
CMP AX,60
JB L2 ;0~59,(BX)=0
INC BX
CMP AX,70
JB L2 ;60~69,(BX)=1
INC BX
CMP AX,80
JB L2 ;70~79,(BX)=2
INC BX
CMP AX,90
JB L2 ;80~89,(BX)=3
INC BX ;90~100,(BX)=4
L2:
RET
GETDOMAIN ENDP
CODES ENDS
END START

       DATAS  SEGMENT
       DATA1  DW        55,70,82,90,60,70,95,84,75,63
              DW        55,70,82,90,60,70,95,84,75,63       ;20名学生的成绩(0~100保存在连续的40个单元中)
       COUNT  EQU       ($-DATA1)/2 ;学生总人数
       DATA2  DB        5 DUP (0)   ;各范围的人数(5个单元)
       DATAS  ENDS
      STACKS  SEGMENT
      STACKS  ENDS
       CODES  SEGMENT
              ASSUME    CS:CODES,DS:DATAS,SS:STACKS
        MAIN  PROC      FAR
      START:
              MOV       AX,DATAS
              MOV       DS,AX
              LEA       SI,DATA1
              MOV       CX,COUNT
         L1:
              CALL      GETDOMAIN   ;找出成绩对应的范围,保存在BX中
;将对应人数增加1
              MOV       AL,DATA2[BX]
              INC       AL
              MOV       DATA2[BX],AL
              LOOP      L1
              ;======================
              LEA       SI,DATA2
              MOV       CX,5
              CLD
         @1:
              LODSB
              XOR       AH,AH
              MOV       BL,10
              DIV       BL
              PUSH      AX
              CMP       AL,0
              JE        @2
              MOV       DL,AL
              OR        DL,30H
              MOV       AH,2
              INT       21H
         @2:
              POP       AX
              MOV       DL,AH
              OR        DL,30H
              MOV       AH,2
              INT       21H
              MOV       DL,32
              INT       21H
              LOOP      @1
              ;======================
              MOV       AH,4CH
              INT       21H
        MAIN  ENDP
;传入参数:DS,SI用来确定一名学生的成绩
;返回值:BX,该成绩所在的范围对应的DATA2的位置
;功能:通过比较,确定成绩所在范围
   GETDOMAIN  PROC      NEAR
              LODSW                 ;(AX)=(DS:SI),(SI)=(SI)+1
              MOV       BX,0
              CMP       AX,60
              JB        L2          ;0~59,(BX)=0
              INC       BX
              CMP       AX,70
              JB        L2          ;60~69,(BX)=1
              INC       BX
              CMP       AX,80
              JB        L2          ;70~79,(BX)=2
              INC       BX
              CMP       AX,90
              JB        L2          ;80~89,(BX)=3
              INC       BX          ;90~100,(BX)=4
         L2:
              RET
   GETDOMAIN  ENDP
       CODES  ENDS
              END       START

温馨提示:答案为网友推荐,仅供参考
相似回答