实验五 循环结构的程序设计:排序程序设计实验1、实验目的掌握接收键盘数据的方法。掌握循环结构的程序设计和排序程序设计的方法。
进一步熟练在PC上建立、汇编、链接、调试和运行汇编语言程序的过程。2、实验内容用汇编语言编写学生成绩统计程序:键盘输入学生成绩到SCORE中(0<=分数<=100,设有10个学生成绩分别是56,69,84,82,73,88,99,63,100,80)。编程将它们由大到小排序,存回到原来的SCORE变量中;并统计低于60分、60~69、70~79、80~89、90~99及100分的人数,分别存放在S5、S6、S7、S8、S9、S10单元中。3、实验及报告要求:
要求画出完整的程序流程图。
根据流程图,编写完整的汇编代码源文件,要求写出所有伪指令和指令的注释;
编译、连接生成可执行文件,调试该可执行文件。
写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。
实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法、汇编指令及汇编语言编程方法、微机原理学习方法作出总结。
4、思考题:
如何从屏幕输出结果?统计人数的程序流程图:Y
N
N
Y
N
YNYSCORE的输入和排序流程图:N
YN
y输入DATAS SEGMENTBUFFER DB 80,81 DUP(0),'$'SCORE1 DB 10 DUP(0) ;此处输入数据段代码
DATAS ENDS
STACKS SEGMENTSTA DB 64 DUP(0)
SP_TOP DB 0
STACKS ENDS
CODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,SP_TOP
LEA DX,BUFFER
LEA DI,SCORE1
MOV AH,0AH
INT 21H
LEA SI,BUFFER
ADD SI,2
MOV DL,0
MOV CX,10
JU:MOV AL,[SI]
CMP AL,0DH
JE EXIT
PUSH CX
CMP AL,2CH
JE CH1
POP CX
INC SI
INC DL
LOOP JU
JMP EXIT
CH1:CMP DL,2
JNE CH2MOV AL,[SI-2]
SUB AL,30H
MOV CL,10
MUL CL
MOV AH,0MOV BL,[SI-1]SUB BL,30H
ADD AL,BL
MOV [DI],AL
POP CX
INC DI
INC SI
MOV DL,0
LOOP JU
CH2:MOV [DI],100POP CX
INC DI
INC SI
MOV DL,0
LOOP JU
EXIT: MOV AH,4CHINT 21H
CODES ENDS
END START
记人数DATA SEGMENTSCORE DB 67S5 db 0S6 db 0S7 db 0S8 db 0S9 db 0S10 db 0TABLE DW NP,NP,NP,NP,NP,NP,S60,S70,S80,S90,S100
DATA ENDS
CODE SEGMENT 'CODE'ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AXMOV AH,0
LEA SI,SCORE
SP:MOV AL,[SI]
MOV BL,10
DIV BL
SAL AL,1
MOV BL,AL
MOV BH,0
JMP TABLE[BX]
S100:INC S10
JMP NEXT
S90: INC S9
JMP NEXT
S80:INC S8
JMP NEXTS70:INC S7
JMP NEXT
S60:INC S6
JMP NEXT
NP:INC S5
NEXT:INC SILOOP SP
FINISH:MOV AH,4CH
INT 21H
CODE ENDSEND START排序
DATAS SEGMENT
STR DB 'PLS INPUT SCORE (0-100):',0DH,0AH,'$'SCORE DB 20DB 81 DUP(0)DB '$';此处输入数据段代码SC DB 10 DUP(0)
DATAS ENDS
STACKS SEGMENT;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENTASSUME CS:C