汇编语言显示结果怎么不对

来源:百度知道 编辑:UC知道 时间:2024/05/21 15:07:16
DATA SEGMENT
SHUJ DW 75,45,93,67,80,75,45,93,67,80,75,45,93,67,80,75,45,93,67,80
MARK DB '100','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,SHUJ
XOR AX,AX
MOV CX,20
AA1: ADD DX,WORD PTR[SI];累加求和
ADD SI,2
LOOP AA1
MOV BL,20
MOV AX,DX
MOV DX,0
DIV BL
AND AX,00FFH ;消除余数
CMP AX,100 ;考虑平均分是一百的特殊情况
JNZ L1
MOV DX,OFFSET MARK
MOV AH,9
INT 21H
JMP L2
L1: MOV BL,10 ;平均分小于一百按位输出
MOV DX,0
DIV BL
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H ;输出十位数
MOV DL,BL
ADD DL,30H
MOV AH,2
INT 21H ;输出个位数
L2: MOV AH,4CH
INT 21H
CODE ENDS
END START

DATA SEGMENT
SHUJ DW 75,45,93,67,80,75,45,93,67,80,75,45,93,67,80,75,45,93,67,80
MARK DB '100','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,SHUJ
XOR AX,AX
MOV CX,20

MOV DX,0;累加时寄存器没有清零

AA1: ADD DX,WORD PTR[SI];累加求和
ADD SI,2
LOOP AA1
MOV BL,20
MOV AX,DX
MOV DX,0
DIV BL
AND AX,00FFH ;消除余数
CMP AX,100 ;考虑平均分是一百的特殊情况
JNZ L1
MOV DX,OFFSET MARK
MOV AH,9
INT 21H
JMP L2
L1: MOV BL,10 ;平均分小于一百按位输出
MOV DX,0
DIV BL
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H ;输出十位数
MOV DL,BL
ADD DL,30H
MOV AH,2
INT 21H ;输出个位数
L2: MOV AH,4CH
INT 21H
CODE ENDS
END START
因为你要放的DX在累加前没有清零,所以无法用除法指令。把DX清零后就可以了