刚刚接触汇编语言,老师留了作业但是不讲让自己想。要求是一个求一组数中的最大值最小值和总和,老师已经给了大部分的代码,剩下的自己补全。基本上刚拿到这个完全看不懂什么意思,完后试着画了流程图差不多明白了运算的原理是循环的比大小,但是打出来后,第一次是提示CMP AL,MAX以及后面的行有错,上网查了查试着修改后可以运行但是数不对。。目前处于崩溃中

。。发到这里求大神帮看。完后。。呃基本上知道的不多请大神们耐心加见谅。。万分感谢!
上程序:
;-------------------------------------------------------------
; 编写一个求最大值、最小值、总和的程序
; 数据在数据段内直接初始化
; 将计算的结果在屏幕上显示出来
;-------------------------------------------------------------
.MODEL SMALL
;-------------------------------------------------------------
; 数据段的定义
;-------------------------------------------------------------
.DATA
; 数组直接在数据段内初始化
ARRY DW 150,263,370,472,580,666,776,860,944,70
DW 59,959,875,771,678,583,460,371,527,179
ARRY_LEN EQU ($-ARRY)/2 ; 避免了计算数据个数的麻烦
; 定义显示数据
STR_MAX DB 13,10,"MAX="
D_MAX DB 4 DUP("0"),13,10
STR_MIN DB "MIN="
D_MIN DB 4 DUP("0"),13,10
STR_SUM DB "SUM="
D_SUM DB 4 DUP("0"),13,10
STR_LEN EQU $-STR_MAX
; 定义变量
MAX DW 0 ; 最大值
MIN DW 0 ; 最小值
SUM DW 0 ; 总和
;-------------------------------------------------------------
; 代码段的定义
;-------------------------------------------------------------
.CODE
; 函数:将WORD变量中的数值转换成4位ASCII字符
; 入口:(AX)=数据,(DX)=4位ASCII字符的首地址
; 运行结果:首地址开始的四个字节内分别是:千位、百位、十位、个位
NUM_STR PROC
mov si,DX
;求个位数
MOV AX,AX
SUB DX,DX
MOV BX,10
DIV BX ; (AX)=D100×10+D10
; (DX)=D1
PUSH DX ; 保存个位数
;求十位数
SUB DX,DX
DIV BX ; (AX)=D100
; (DX)=D10
PUSH DX ; 保存十位数
SUB DX,DX
MOV BX,10
DIV BX ; (DX)=D100,(AX)=千位及以上
PUSH DX ; 保存百位数
PUSH AX ; 保存千位
; 数字转换成字符
exit: pop ax
add al,'0'
mov [si],al
inc si
pop ax
add al,'0'
mov [si],al
inc si
pop ax
add al,'0'
mov [si],al
inc si
pop ax
add al,'0'
mov [si],al
RET
NUM_STR ENDP
; 启动函数
START PROC
MOV AX,@DATA
MOV DS,AX
-------------------------------------分割线!下面这段就是自己补的部分,不过差不多全是在模仿别人写过的-----------------------------------
;以下循环程序 求MAX、MIN、SUM
MOV BX, OFFSET ARRY
MOV CX, ARRY_LEN
LOP:
MOV AL,[BX]
CMP AL,byte ptr MAX
JC NEXT1
MOV byte ptr MAX,AL
NEXT1:
CMP AL,byte ptr MIN
JNC NEXT2
MOV byte ptr MIN,AL
NEXT2:
ADD byte ptr SUM,AL
INC BX
LOOP LOP
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;以下程序处理MAX的显示
MOV AX,MAX
LEA DX,D_MAX
CALL NUM_STR
;以下程序处理MIN的显示
MOV AX,MIN
LEA DX,D_MIN
CALL NUM_STR
;以下程序处理SUM的显示
MOV AX,SUM
LEA DX,D_SUM
CALL NUM_STR
;调用系统中断,在控制台显示STR_MAX,STR_MIN,STR_SUM
LEA DX,STR_MAX
MOV BX,0
MOV CX,STR_LEN
MOV AH,40H
INT 21H
;程序结束
MOV AX,4C00H
INT 21H
START ENDP
END START
求帮助啊已经盯着看一天了