1 data segment 2 ; add your data here! 3 goals dw 76,69,84,90,73,88,99,63,100,80 ;字存储成绩 4 S6 dw 30h;ascil的'0'便于输出 5 S7 dw 30h 6 S8 dw 30h 7 S9 dw 30h 8 S10 dw 30h 9 ends 10 11 code segment 12 main proc far 13 assume cs:data,ds:code 14 start: 15 ; set segment registers: 16 push ds 17 sub ax,ax 18 push ax 19 mov ax,data 20 mov ds,ax 21 begin: 22 mov cx,10;loop循环次数 23 call cout 24 mov cx,5 25 call print 26 ret 27 main endp 28 ;----------------------------------- 29 cout proc near ;统计成绩的子程序 30 mov si,0 31 next: 32 mov ax,goals[si];把分数给ax 33 mov bx,10;被除数 34 div bl ;无符号除[(AL)=(AX)/SRC,(AH)=(AX)%SRC]被除数为8位 35 ;[这里获得分数的十位数] 36 mov bl,al;把分数的十位数字放在bl中 37 sub bx,6 ;把十位数字减6[因为S6为第一个箱子表示60-70分数,bx-6可做偏移量] 38 sal bx,1 39 add S6[bx],1;对应的箱子加一 40 add si,2 ;因为是DW型要加2才会取出goals的下一个 41 loop next ;loop终止条件cx=0 ,所以上面cx先赋值10,每次循环自减 42 ret 43 cout endp 44 ;---------------------------------- 45 print proc near ;输出子程序 46 mov si,0 47 continue: 48 push ax 49 mov ax,S6[si] ;用ax转成字,注意保护ax 50 mov dl,al ;02中断,dl为输出字符 51 mov ah, 02h 52 int 21h 53 add si,2 54 pop ax 55 mov dl,02h ;输出一个笑脸 56 mov ah, 02h 57 int 21h 58 loop continue 59 print endp 60 ;--------------------------------- 61 code ends 62 end start