我的汇编程序设计代码

1 STACK SEGMENT STACK
2 DB 1 DUP(?)
3 STACK ENDS
4 DATA SEGMENT
5 STR1 DB 'Please input the scores of N(0<n<=30) students!',10,13,'$'
6 STR2 DB 'The largest score is:',10,13,'$'
7 SCORE DB 91,0,91 DUP (?)
8 BCD DB 30,0,30 DUP (?)
9 DATA ENDS
10 CODE SEGMENT
11 ASSUME CS:CODE , DS:DATA
12 START: MOV AX,DATA
13 MOV DS,AX
14 LEA DX,STR1
15 MOV AH,09H
16 INT 21H
17 CALL INPUT;调用输入子函数
18 MOV DL,13
19 MOV AH,2
20 INT 21H
21 MOV DL,10
22 MOV AH,2
23 INT 21H;回车换行
24 LEA DI,BCD
25 LEA SI,SCORE+2
26 MOV CX,0030;作计数器,循环30次
27 L1: MOV BH,[SI]
28 MOV BL,[SI+1]
29 CALL SHIFT;ASC码转BCD码
30 MOV [DI],BH
31 INC DI
32 ADD SI,3;成绩第一位+成绩第二位+空格一共下移三位
33 LOOP L1
34 LEA DX,STR2
35 MOV AH,09H
36 INT 21H
37 MOV DL,0
38 LEA BX,BCD
39 MOV CX,0030
40 L2: MOV AL,[BX]
41 CALL COMPARE;比较最大成绩
42 INC BX
43 LOOP L2
44 CALL DISPLAY;将BCD码转换成ASC码,显示输出
45 MOV AH,4CH
46 INT 21H
47 ;子程序名:INPUT
48 ;功能:输入成绩,每个两位数,成绩之间仅用一个空格隔开
49 ;入口参数:键盘输入
50 ;出口参数:SCORE缓冲区,存储学生成绩
51 INPUT PROC
52 LEA DX,SCORE
53 MOV AH,0AH
54 INT 21H
55 RET
56 INPUT ENDP
57 ;子程序名:SHIFT
58 ;功能:将输入的ASC码转换成BCD码
59 ;入口参数:SCORE缓冲区中存放的学生成绩的ASC码,BCD缓冲区
60 ;出口参数:BCD缓冲区中存放ASC码转换成BCD码后的学生成绩
61 SHIFT PROC
62 MOV CL,04H
63 SHL BH,CL;CL中的BCD码左移四位
64 AND BL,0FH;高位清零
65 ADD BH,BL
66 RET
67 SHIFT ENDP
68 ;子程序名:COMPARE
69 ;功能:查找最高分
70 ;入口参数:BCD缓冲区存放学生成绩的BCD码,DL存放预设置的最高成绩0
71 ;出口参数:DL存放最高学生成绩的BCD码
72 COMPARE PROC
73 CMP DL,AL
74 JAE L4
75 XCHG DL,AL
76 XOR AL,AL
77 L4: RET
78 COMPARE ENDP
79 ;子程序名:DISPLAY
80 ;功能:将最高成绩转换成ASC码,并显示输出
81 ;入口参数:DL存放最高成绩的BSD码
82 ;出口参数:在屏幕上显示最高成绩
83 DISPLAY PROC
84 MOV BL,DL;保存副本
85 MOV CL,04H
86 SHR DL,CL;右移四位
87 ADD DL,30H
88 MOV AH,02H
89 INT 21H;显示高位
90 AND BL,0FH;高位清零
91 ADD BL,30H
92 MOV DL,BL
93 MOV AH,02H
94 INT 21H;显示低位
95 RET
96 DISPLAY ENDP
97 CODE ENDS
98 END START

posted on 2011-05-06 19:11  _Clarence  阅读(105)  评论(0编辑  收藏  举报

导航