您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页北邮微机原理汇编实验

北邮微机原理汇编实验

来源:二三四教育网


电子工程学院

微机原理汇编语言上机实验报告

班级: 学号: 姓名: 班内序号:

一、实验要求

一个学生的信息包括姓名、班级、学号(班内序号)、成绩。试编写程序实现以下功能:

(1)能录入学生成绩(十进制形式);提示:输入形如:tom 301 16 95回车,每名学生用一行,选择一个特殊符表示输入结束; (2)能按要求:如学号或成绩进行排序显示; (3)能统计平均成绩;

(4)能统计不及格、60-70、70-80、80-90、90-100各分数段的人数。

二、程序流程和算法思想

(一).程序流程设计

根据本次实验要求要求实现的5个功能:信息录入、按学号排序、按成绩排序、求平均成绩、求各个分数段人数,在加上一个退出程序,总体上可以将整个程序划分为七个部分,依次为功能选择部分(六个选项)、信息录入部分、按学号排序部分、按成绩排序部分、求平均成绩部分、求各个分数段部分、退出程序部分。

根据以上的划分,画出流程图如下:

Start

信息录入 1

求平均成绩 4 $ 2 按学号排序 功能选择 5 3 统计分数段 6 按成绩排序 Exit

(二). 数据结构

1、采用数组进行数据存储:

(1)学生人数数组stuNum DB 0 (2)学生信息数组

Student DB maxNum DUP (14,0,'$','$','$','$','$','$','$','$','$','$','$','$','$','$'),

每组数数有0-17共18个字节,0为最大输入,1为实际输入,2-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分以上、~80分、79~70分、69~60分以及60分以下各分数段人数 。

2、子程序

根据实验要求的功能,程序包含6个子程序 (1)FunctionChioce 程序功能选择 (2)infinput 学生信息输入

(3)IDbublingSort 按学号排序(升序) (4)gradeBublingSort 按成绩排序(降序) (5)countAverageScores 计算平均分 (6)Statistics 统计各个分数段人数

对于学生按成绩或学号排序,采用冒泡排序,成绩按降序排序,学号按升序排序

3、提示信息

Please choose 选择功能

Wrong choice! Please choose it again! 无此选项,重新选择 Please input students’ information 输入学生信息

Result 输出结果(按学号排序、按成绩排序、计算平均成绩、统计分

数段)

<60: 小于60分人数 60~69: 60~69分人数 70~79: 70~79分人数 80~: 80~分人数 90~100: 90~100分人数

三、程序运行截图

程序功能选择

学生信息输入

按学号排序

按成绩排序

计算平均值

统计各个分数段人数

错误选择报错,重新输入

四、实验总结

这次汇编语言上机实验,要求编写一个学生信息录入查询程序,实现成绩录入,按学号排序,按成绩排序,求平均分,统计各个分数段人数的功能。

从程序的设计上来说,我学会了自顶向下设计的方式,即根据程序要实现的功能,将程序划分为一个个小的子程序,画出流程图,再进行程序的编写及细化。

从对汇编语言语法上来说,这次实验大大地增强了我对汇编语言的掌握程度。这次的实验相对来说比较综合,用到的知识也很多,从最基本的数组和变量的定义,到各种运算符的运用,到各个指令的使用,到较为复杂的程序的总体框架的编写,子程序的定义和调用,宏的定义和调用,数据参数的传递。在整个编写的过程中,我对于汇编语言语法的理解加深了,而且,对于其实现的原理机制的理解也大大增强了。

汇编语言并非高级语言,不是面向对象,难度较大,极有可能因为一些小的细节导致程序无法运行,甚至出现不正确的结果,例如入栈和出栈问题等,排查起来相对较为困难。我在这次的实验中也遇到了各种各样的小问题,但在自己细心的检查下以及和同学们的讨论中,这些问题也都一一解决了。这次实验对于提高我的编程思维能力和发现问题,解决问题的能力的效果还是比较明显的。

总的来说,这次的实验还是比较完满的,而且是极其有意义的。这对于我以后无论是读研继续深造,还是步入社会工作,都是很有帮助的。

五、实验源代码

DATA SEGMENT

maxNum EQU 100 ;学生的最大人数 stuNum DB 0 ;学生人数

Student DB maxNum DUP (14,0,'$','$','$','$','$','$','$','$','$','$','$','$','$','$') ;存储学生信息

aveScores DB 00H,'$' ;存储学生平均成绩

MSG DB \"This is a program for static students information:\ DB \"1.Please input student`s information(tom 301 16 95)!\ DB \"2.Sorting by ID!\ DB \"3.Sorting by grade!\

DB \"4.Average students` scores!\ DB \"5.Statistics!\

DB \"0.Exit the program!\

DB \"Please chooce:\ ;选择功能选项的提示 RESULT DB \"Result: \

InputMSG DB \"Please input students` information:\ ERROR DB \"Wrong choice!Please chooce it again!\countE DB 00H,'$' ;0~59分数段学生数 countD DB 00H,'$' ;60~69分数段学生数 countC DB 00H,'$' ;70~79分数段学生数

countB DB 00H,'$' ;80~分数段学生数 countA DB 00H,'$' ;90~100分数段学生数 lessThan60 DB \"<60:\lessThan70 DB \"60~69:\lessThan80 DB \"70~79:\lessThan90 DB \"80~:\lessThan100 DB \"90~100:\

DATA ENDS

STACK SEGMENT DB 512 DUP(0) STACK ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK

; NumCount1宏,对变量stuNum 进行-1处理 NumCount1 MACRO 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 AX ENDM

; NumConut2宏,对变量stuNum赋值处理 NumConut2 MACRO PUSH AX MOV AL,[stuNum] CBW MOV CX,AX POP AX ENDM

; Enter宏:回车换行符

Enter MACRO PUSH AX PUSH DX MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH INT 21H POP DX POP AX ENDM

; callkey宏,调用系统服务 callkey MACRO PUSH AX MOV AH,09H INT 21H POP AX MOV AH,1 INT 21H ENDM

;外层最大循环 Circle: MOV AX,DATA MOV DS,AX

CALL FunctionChoice MOV AH,4CH INT 21H

;FunctionChoice 程序功能选择 FunctionChoice PROC NEAR START: 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 CMP AL,'3'

JZ chooseSort2 CMP AL,'4'

JZ chooseAverageScores CMP AL,'5'

JZ chooseStatistics

CMP AL,'0' JZ EXIT

LEA DX,ERROR PUSH AX MOV AH,09H INT 21H POP AX

JMP START chooseInput: CALL infInput JMP START chooseSort1:

CALL IDbublingSort JMP START chooseSort2:

CALL gradeBublingSort JMP START

chooseAverageScores: CALL countAverageScores JMP START chooseStatistics: CALL Statistics JMP START EXIT: RET

FunctionChoice ENDP

;infInput:学生信息输入

infInput PROC NEAR PUSH AX ;堆栈保护 PUSH BX PUSH CX PUSH DX PUSH SI

;选择信息输入 ;按学生ID排序 ;按学生成绩排序

;输出学生平均分

;统计各个分数段人数

PUSH DI MOV BL,1 LEA DX,InputMSG ;提示信息输出 PUSH AX

MOV AH,09H ;系统功能调用 INT 21H POP AX MOV DI,0 MOV CX,maxNum Stu:

LEA DX,Student+DI ;学生信息地址 MOV AH,0AH INT 21H MOV SI,DX ;比较是否是退出符号'$' cmp BYTE PTR[SI+2],'$' JZ con ADD stuNum,BL ADD DI,16 Enter LOOP Stu con: POP DI

POP SI POP DX POP CX POP BX POP AX RET infInput 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 CX,AX POP AX PUSH AX MOV AL,1 ADD stuNum,AL POP AX LP1:

MOV DI,CX MOV BX,0 LP2: 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 StatisticsIfo ExchangeIfo: PUSH CX PUSH BX

MOV CX,13 Stu2:

MOV DL,[Student+BX+2] XCHG DL,[Student+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 LP1 Output:

MOV CL,stuNum MOV BX,0 LP3:

MOV CH,13

LEA SI,Student+BX+2 LP4:

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 POP AX RET

IDbublingSort 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 AX LP5:

MOV DI,CX MOV BX,0 LP6:

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 BX,16 LOOP LP6 MOV CX,DI LOOP LP5 OutputIfo:

MOV CL,stuNum MOV BX,0 LP8:

MOV CH,13

LEA SI,Student+BX+2

;交换学生的信息 LP9:

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 RET

gradeBublingSort ENDP

;计算平均分

countAverageScores 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 MOV AX,0 MOV BX,0 PUSH AX MOV AL,[stuNum] CBW MOV CX,AX POP AX totalScore: 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 MOV 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 RET

countAverageScores ENDP

;统计各个分数段人数

Statistics PROC NEAR PUSH AX

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 AX L:

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 Print

lessT60:

MOV DH,countE INC DH

MOV countE,DH ADD BX,16 DEC CX JNZ L JMP Print lessT70:

lessT80:

lessT90: Print: MOV DH,countD INC DH

MOV countD,DH ADD BX,16 DEC CX JNZ L JMP Print MOV DH,countC INC DH

MOV countC,DH ADD BX,16 DEC CX JNZ L

JMP Print MOV DH,countB INC DH

MOV countB,DH ADD BX,16 DEC CX JNZ L

JMP Print

;输出各分数段人数 MOV AH,02H

LEA DX,lessThan60 PUSH AX MOV AH,09H INT 21H POP AX

MOV DL,countE ADD DL,30H INT 21H Enter

LEA DX,lessThan70

PUSH AX MOV AH,09H INT 21H POP AX

MOV DL,countD ADD DL,30H INT 21H Enter

LEA DX,lessThan80 PUSH AX MOV AH,09H INT 21H POP AX

MOV DL,countC ADD DL,30H INT 21H Enter LEA DX,lessThan90 PUSH AX MOV AH,09H INT 21H POP AX

MOV DL,countB ADD DL,30H INT 21H Enter LEA DX,lessThan100 PUSH AX MOV AH,09H INT 21H POP AX

MOV DL,countA ADD DL,30H INT 21H Enter POP DX POP CX POP BX POP AX RET Statistics ENDP

CODE ENDS END Circle

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务