[汇编]统计成绩分布

 

 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

 

posted @ 2014-05-07 11:17  beautifulzzzz  阅读(953)  评论(0编辑  收藏  举报