北邮微机原理汇编实验_第1页
北邮微机原理汇编实验_第2页
北邮微机原理汇编实验_第3页
北邮微机原理汇编实验_第4页
北邮微机原理汇编实验_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上电子工程学院微机原理汇编语言上机实验报告班级:学号: 姓名:班内序号:一、实验要求一个学生的信息包括姓名、班级、学号(班内序号)、成绩。试编写程序实现以下功能:(1)能录入学生成绩(十进制形式);提示:输入形如:tom 301 16 95回车,每名学生用一行,选择一个特殊符表示输入结束;(2)能按要求:如学号或成绩进行排序显示;(3)能统计平均成绩;(4)能统计不及格、60-70、70-80、80-90、90-100各分数段的人数。2、 程序流程和算法思想 (一).程序流程设计 根据本次实验要求要求实现的5个功能:信息录入、按学号排序、按成绩排序、求平均成绩、求各个分

2、数段人数,在加上一个退出程序,总体上可以将整个程序划分为七个部分,依次为功能选择部分(六个选项)、信息录入部分、按学号排序部分、按成绩排序部分、求平均成绩部分、求各个分数段部分、退出程序部分。根据以上的划分,画出流程图如下:$654 功能选择StartExit求平均成绩统计分数段3按成绩排序21按学号排序信息录入 (二). 数据结构 1、采用数组进行数据存储: (1)学生人数数组stuNum DB 0 (2)学生信息数组Student DB maxNum DUP (14,0,$,$,$,$,$,$,$,$,$,$,$,$,$,$),每组数数有0-17共18个字节,0为最大输入,1为实际输入,2

3、-16为学生信息,17为”$”学生信息存储格式为(名称 班级 学号 成绩),例如(liu 207 11 98), (3)平均成绩数组 aveScores DB 00H,$ (4)用变量countA DB 00H,$、countB DB 00H,$、countC DB 00H,$、countD DB 00H,$、countE DB 00H,$分别记录90分以上、8980分、7970分、6960分以及60分以下各分数段人数 。 2、子程序根据实验要求的功能,程序包含6个子程序 (1)FunctionChioce 程序功能选择(2)infinput 学生信息输入(3)IDbublingSort 按学

4、号排序(升序)(4)gradeBublingSort 按成绩排序(降序)(5)countAverageScores 计算平均分(6)Statistics 统计各个分数段人数对于学生按成绩或学号排序,采用冒泡排序,成绩按降序排序,学号按升序排序 3、提示信息 Please choose 选择功能 Wrong choice! Please choose it again! 无此选项,重新选择 Please input students information 输入学生信息 Result 输出结果(按学号排序、按成绩排序、计算平均成绩、统计分数段) 60: 小于60分人数 6069: 6069分人数

5、 7079: 7079分人数 8089: 8089分人数 90100: 90100分人数3、 程序运行截图程序功能选择学生信息输入按学号排序按成绩排序计算平均值统计各个分数段人数错误选择报错,重新输入4、 实验总结这次汇编语言上机实验,要求编写一个学生信息录入查询程序,实现成绩录入,按学号排序,按成绩排序,求平均分,统计各个分数段人数的功能。从程序的设计上来说,我学会了自顶向下设计的方式,即根据程序要实现的功能,将程序划分为一个个小的子程序,画出流程图,再进行程序的编写及细化。从对汇编语言语法上来说,这次实验大大地增强了我对汇编语言的掌握程度。这次的实验相对来说比较综合,用到的知识也很多,从最

6、基本的数组和变量的定义,到各种运算符的运用,到各个指令的使用,到较为复杂的程序的总体框架的编写,子程序的定义和调用,宏的定义和调用,数据参数的传递。在整个编写的过程中,我对于汇编语言语法的理解加深了,而且,对于其实现的原理机制的理解也大大增强了。汇编语言并非高级语言,不是面向对象,难度较大,极有可能因为一些小的细节导致程序无法运行,甚至出现不正确的结果,例如入栈和出栈问题等,排查起来相对较为困难。我在这次的实验中也遇到了各种各样的小问题,但在自己细心的检查下以及和同学们的讨论中,这些问题也都一一解决了。这次实验对于提高我的编程思维能力和发现问题,解决问题的能力的效果还是比较明显的。总的来说,这

7、次的实验还是比较完满的,而且是极其有意义的。这对于我以后无论是读研继续深造,还是步入社会工作,都是很有帮助的。 五、实验源代码DATA SEGMENT maxNumEQU 100;学生的最大人数stuNum DB 0 ;学生人数Student DB maxNum DUP (14,0,$,$,$,$,$,$,$,$,$,$,$,$,$,$) ;存储学生信息aveScores DB 00H,$ ;存储学生平均成绩MSG DB This is a program for static students information:,0aH,0dH, DB 1.Please input students

8、information(tom 301 16 95)!,0aH,0dH, DB 2.Sorting by ID!,0aH,0dH, DB 3.Sorting by grade!,0aH,0dH, DB 4.Average students scores!,0aH,0dH, DB 5.Statistics!,0aH,0dH, DB 0.Exit the program!,0aH,0dH, DB Please chooce:,0aH,0dH,$ ;选择功能选项的提示RESULT DB Result: ,0aH,0dH,$InputMSG DB Please input students infor

9、mation:,0aH,0dH,$ ERROR DB Wrong choice!Please chooce it again!,0aH,0dH,$countE DB 00H,$;059分数段学生数countD DB 00H,$;6069分数段学生数countC DB 00H,$;7079分数段学生数countB DB 00H,$;8089分数段学生数countA DB 00H,$;90100分数段学生数lessThan60 DB 60:,$lessThan70 DB 6069:,$lessThan80 DB 7079:,$lessThan90 DB 8089:,$lessThan100 DB

10、90100:,$DATA ENDSSTACK SEGMENTDB 512 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ; NumCount1宏,对变量stuNum 进行-1处理NumCount1 MACROPUSH AX MOV AL,1 SUB stuNum,AL POP AX PUSH AX MOV AL,stuNum CBW MOV CX,AX POP AX PUSH AX MOV AL,1 ADD stuNum,AL POP AXENDM; NumConut2宏,对变量stuNum赋值处理NumConut2

11、MACRO PUSH AX MOV AL,stuNum CBW MOV CX,AX POP AXENDM; Enter宏:回车换行符Enter MACROPUSH AXPUSH DXMOVDL,0DHMOV AH,02HINT21HMOV DL,0AHINT 21H POP DXPOPAXENDM ; callkey宏,调用系统服务callkey MACROPUSH AXMOV AH,09HINT 21HPOP AXMOV AH,1INT 21HENDM;外层最大循环Circle: MOV AX,DATA MOV DS,AX CALL FunctionChoice MOV AH,4CH INT

12、 21H ;FunctionChoice 程序功能选择FunctionChoice PROC NEARSTART: LEA DX,MSG PUSH AX MOV AH,09H INT 21H POP AX MOV AH,1 INT 21H Enter CMP AL,1 JZ chooseInput;选择信息输入 CMP AL,2 JZ chooseSort1;按学生ID排序 CMP AL,3 JZ chooseSort2;按学生成绩排序 CMP AL,4 JZ chooseAverageScores;输出学生平均分 CMP AL,5 JZ chooseStatistics;统计各个分数段人数

13、CMP AL,0 JZ EXIT LEA DX,ERROR PUSH AX MOV AH,09H INT 21H POP AX JMP START chooseInput: CALL infInput JMP STARTchooseSort1: CALL IDbublingSort JMP STARTchooseSort2: CALL gradeBublingSort JMP STARTchooseAverageScores: CALL countAverageScores JMP START chooseStatistics: CALL Statistics JMP STARTEXIT: R

14、ETFunctionChoice ENDP;infInput:学生信息输入infInput PROC NEAR PUSH AX;堆栈保护 PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV BL,1 LEA DX,InputMSG;提示信息输出 PUSH AX MOV AH,09H;系统功能调用 INT 21H POP AX MOV DI,0 MOV CX,maxNumStu: LEA DX,Student+DI;学生信息地址 MOV AH,0AH INT 21H MOV SI,DX;比较是否是退出符号$ cmp BYTE PTRSI+2,$ JZ con

15、ADD stuNum,BL ADD DI,16 Enter LOOP Stucon: POP DI POP SI POP DX POP CX POP BX POP AX RETinfInput ENDP;序号升序IDbublingSort PROC NEAR PUSH AX;堆栈保护 PUSH BX PUSH CX PUSH DX PUSH DI PUSH SI LEA DX,RESULT PUSH AX MOV AH,09H INT 21H POP AX PUSH AX MOV AL,1 SUB stuNum,AL POP AX PUSH AX MOV AL,stuNum CBW MOV C

16、X,AX POP AX PUSH AX MOV AL,1 ADD stuNum,AL POP AXLP1: MOV DI,CX MOV BX,0LP2: MOV AL,Student+BX+10 CMP AL,Student+BX+16+10 JB StatisticsIfo JA ExchangeIfo MOV AL,Student+BX+11 CMP AL,Student+BX+16+11 JBE StatisticsIfoExchangeIfo:;交换学生信息 PUSH CX PUSH BX MOV CX,13 Stu2: MOV DL,Student+BX+2 XCHG DL,Stud

17、ent+BX+16+2 MOV Student+BX+2,DL INC BX LOOP Stu2 POP BX POP CX StatisticsIfo: ADD BX,16 LOOP LP2 MOV CX,DI LOOP LP1Output: MOV CL,stuNum MOV BX,0LP3: MOV CH,13 LEA SI,Student+BX+2LP4: MOV DX,SI MOV AH,02H INT 21H INC SI DEC CH JNZ LP4 Enter ADD BX,16 DEC CL JNZ LP3 POP SI POP DI POP DX POP CX POP BX

18、 POP AX RETIDbublingSort ENDP ;成绩降序gradeBublingSort PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI PUSH SI LEA DX,RESULT PUSH AX MOV AH,09H INT 21H POP AX PUSH AX MOV AL,1 SUB stuNum,AL POP AX PUSH AX MOV AL,stuNum CBW MOV CX,AX POP AX PUSH AX MOV AL,1 ADD stuNum,AL POP AXLP5: MOV DI,CX MOV BX,0L

19、P6: MOV AL,Student+BX+13 CMP AL,Student+BX+16+13 JA Staticse1 JB ExchangeIfo1 MOV AL,Student+BX+14 CMP AL,Student+BX+16+14 JAE Staticse1 ExchangeIfo1: PUSH CX PUSH BX MOV CX,13 LP7: MOV DL,Student+BX+2 XCHG DL,Student+BX+16+2 ;交换学生的信息 MOV Student+BX+2,DL INC BX LOOP LP7 POP BX POP CX Staticse1: ADD

20、BX,16 LOOP LP6 MOV CX,DI LOOP LP5OutputIfo: MOV CL,stuNum MOV BX,0LP8: MOV CH,13 LEA SI,Student+BX+2LP9: MOV DX,SI MOV AH,02H INT 21H INC SI DEC CH JNZ LP9 Enter ADD BX,16 DEC CL JNZ LP8 POP SI POP DI POP DX POP CX POP BX POP AX RETgradeBublingSort ENDP;计算平均分countAverageScores PROC NEAR PUSH AX PUSH

21、 BX PUSH CX PUSH DX PUSH DI PUSH SI LEA DX,RESULT PUSH AXMOV AH,09HINT 21HPOP AX MOV AX,0 MOV BX,0 PUSH AX MOV AL,stuNum CBW MOV CX,AX POP AXtotalScore: MOV DH,Student+BX+13 SUB DH,30H SHL DH,4 MOV DL,Student+BX+14 SUB DL,30H ADD DH,DL ADD AL,DH DAA ADC AH,0 ADD BX,16 LOOP totalScore MOV CL,stuNum M

22、OV BL,AL SHR AL,4 AND BL,0FH AAD DIV CL MOV BH,AL MOV AL,BL AAD DIV CL MOV CL,AL MOV AH,02H MOV DL,BH ADD DL,30H INT 21H MOV DL,CL ADD DL,30H INT 21H Enter SHL BH,4 ADD CL,BH MOV aveScores,CL POP SI POP DI POP DX POP CX POP BX POP AX RETcountAverageScores ENDP ;统计各个分数段人数 Statistics PROC NEAR PUSH AX

23、 PUSH BX PUSH CX PUSH DX MOV countA,0 MOV countB,0 MOV countC,0 MOV countD,0 MOV countE,0 LEA DX,RESULT PUSH AX MOV AH,09H INT 21H POP AX MOV BX,0 PUSH AX MOV AL,stuNum CBW MOV CX,AX POP AXL: MOV AL,Student+BX+13 SUB AL,30H SHL AL,4 MOV AH,Student+BX+14 SUB AH,30H ADD AL,AH CMP AL,60H JB lessT60 CMP AL,70H JB lessT70 CMP AL,80H JB lessT80 CMP AL,90H JB lessT90 MOV DH,countA INC DH MOV countA,DH ADD BX,16 DEC CX JNZ L JMP PrintlessT60: MOV DH,countE INC DH MOV countE,DH ADD BX,16 DEC CX JNZ L JMP Printl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论