21,458
社区成员
发帖
与我相关
我的任务
分享
.MODEL SMALL
.STACK 100H
.DATA
NUM DW 3
SCORES DW 4 DUP (?)
DW 4 DUP (?)
DW 4 DUP (?)
;定义3*4的二维数组用于存储成绩
AVG DW 4 DUP (?)
;AVG数组存储平均成绩
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
XOR BX,BX ;初始化BX
@IN_ROW:
MOV AH,2
MOV DL,'?'
INT 21H ;输出问号
MOV CX,4 ;存储循环次数4
XOR SI,SI ;初始化SI
@IN_CLN:
CALL INDECM ;调用INDECM输入程序
MOV SCORES[BX][SI],AX ;把输入的数字存到数组里
ADD SI,2 ;地址寄存器加2
LOOP @IN_CLN ;循环
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H ;回车
ADD BX,8 ;BX加8(因为继续循环SI会被清零)
CMP BX,24
JL @IN_ROW ;如果BX小于24就继续IN_ROW
MOV SI,6 ;地址寄存器加6
@REPEAT:
MOV CX,3 ;记录循环次数3
XOR BX,BX ;BX清零
XOR AX,AX ;AX清零
@SUM:
ADD AX,SCORES[BX][SI] ;把SCORES[BX][SI]的值给AX
ADD BX,8 ;BX加8也就是到了下一行
LOOP @SUM ;循环三次
XOR DX,DX ;DX初始化
DIV NUM ;做除法NUM=3
MOV AVG[SI],AX ;把结果存到AVG数组里
SUB SI,2 ;地址寄存器SI加2
JNL @REPEAT ;如果进位位不被置位就跳转REPEAT
MOV CX,4 ;记录循环次数4
XOR SI,SI ;SI清零
@OUTPUT:
MOV AX,AVG[SI] ;把要输出的存放到AX里
CALL OUTDECM ;调用OUTDECM
MOV AH,2
MOV DL,' '
INT 21H ;回车
ADD SI,2 ;地址寄存器加2
LOOP @OUTPUT ;继续循环
MOV AH,4CH
INT 21H
MAIN ENDP
INCLUDE INDECM.ASM
INCLUDE OUTDECM.ASM
END MAIN