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