1、综合汇编程序设计资料深 圳 大 学 实 验 报 告 课程名称: 微机原理及应用实验 实验名称: 综合汇编程序设计 学院: 物理科学与技术学院 专业: 2012级应用物理 指导教师: 报告人: 学号: 实验时间: 2014年12月3日 实验报告提交时间: 2014年12月17日 一、实验目的 (1)综合运用所学的微机汇编语言程序设计的知识。 (2)进一步巩固在PC上建立、汇编、链接、调试和运行汇编语言程序的过程与方法。 二、实验要求 1.以12人为一组,自拟设计题目。要求如下(1)务必用到汇编程序设计中的分支、循环、子程序调用、宏和DOS功能调用;(2)务必有合适的人机交互功能(如键盘输入、屏幕
2、输出等);(3)务必提前提交设计报告书(写明程序功能、总体设计思路与设计方案及分工等)。如模拟计算器设计:用键盘输入,可进行五位十进制以内的加减法、2位十进制以内的乘除运算。再如电子钟或秒表,在屏幕显示时间,支持时间校准或设置记时起点、停止计时等功能等等。三、实验内容1.设计任务书 (1)程序功能: 输入不超过100个学生的成绩,按照分数高低分成A、B、C、D、F五个等级,依次对应的分数为90100、8089、7079、6069、059,屏幕分别输出5个等级的学生人数。总体设计思路: (2)调用DOS键盘输入功能获得不超过100个学生的成绩,每输入一个成绩就要回车换行,故要写一个回车换行的宏和
3、一个输入子程序。再判断一位学生的成绩处于哪个等级,进入相应的分支累加计数,使用循环结构对所有输入的成绩进行判断。接着调用DOS屏幕输出功能输出每个等级的学生人数及总人数,因为要分成六次输出,故将输出写成子程序。(3)设计方案及分工:小组成员:赖树文(负责主程序部分),林成业(负责宏,子程序和报告)设计方案:如简略流程图所示(注:宏和子程序没有在流程图中标出)是是否否是是是否否是 2.汇编代码源文件及注释CRLFM MACRO ;空格宏程序 MOV AH,02 MOV DL,20H ;调用DOS空格功能 INT 21H ENDM CRLFM1 MACRO ;回车换行宏程序 MOV AH,02 M
4、OV DL,0DH ;调用DOS回车功能 INT 21H MOV AH,02 MOV DL,0AH ;调用DOS换行功能 INT 21H ENDM DATA SEGMENT ;定义数据段 TIP DB please input grades (less than 100 numbers),one input,one enter,input Y or y to end input,0DH,0AH,$ ;开头提示 TIPN DB total:,$ ;输出提示 TIPA DB A:,$ ;输出提示 TIPB DB B:,$ ;输出提示 TIPC DB C:,$ ;输出提示 TIPD DB D:,$
5、;输出提示 TIPF DB F:,$ ;输出提示 N=101 STR DB 4,0,3 DUP(30H),0DH DAT1 DB 3 DUP(30H) DAT2 DB 3 DUP(30H) GRA DB N DUP(0) NUM DB -1 NUMA DB 0 NUMB DB 0 NUMC DB 0 NUMD DB 0 NUMF DB 0 PYL DW 0DATA ENDS STACK SEGMENT ;定义堆栈段 DB 100 DUP(0) STACK_TOP DB 0STACK ENDSCODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA,SS:STACK ST
6、ART: MOV AX,DATA ;设置数据段、堆栈段 MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,OFFSET STACK_TOP ;输出提示 LEA DX,TIP CALL OUTTIP CRLFM ;调用输入子程序获得成绩 L1: LEA DX,STR LEA SI,STR LEA DI,DAT1 CALL INPUT CRLFM INC NUM ;记录输入总个数 ;判断是否输入Y和y来结束成绩输入 LEA DI,STR MOV AL,DI+2 CMP AL,Y JE JUDGE CMP AL,y JE JUDGE ;将输入的数转化为十进制多位数存入G
7、RA LEA DI,DAT1 MOV CL,DI SUB CL,30H ;将ASCALL码转化为数字 INC DI MOV AL,DI SUB AL,30H ;将ASCALL码转化为数字 MOV BL,10 MUL BL ADD CL,AL INC DI MOV AL,DI SUB AL,30H ;将ASCALL码转化为数字 MOV BL,100 MUL BL ADD CL,AL LEA DI,GRA ADD DI,PYL MOV DI,CL INC PYL JMP L1 ;不输入Y和y就继续从键盘读取数据 ;用循环和分支结构判断等级 JUDGE: CRLFM1 LEA DI,GRA MOV
8、CL,NUM MOV CH,0L3: MOV AL,DI CMP AL,89 JA DJA CMP AL,79 JA DJB CMP AL,69 JA DJC CMP AL,59 JA DJD JMP DJF DJA: INC NUMA JMP OVERDJB: INC NUMB JMP OVERDJC: INC NUMC JMP OVERDJD: INC NUMD JMP OVERDJF: INC NUMF OVER: INC DI LOOP L3 ;输出结果 LEA DX,TIPN CALL OUTTIP LEA DI,DAT2 MOV AL,NUM CALL TTOUT LEA DX,T
9、IPA CALL OUTTIP LEA DI,DAT2 MOV AL,NUMA CALL TTOUT LEA DX,TIPB CALL OUTTIP LEA DI,DAT2 MOV AL,NUMB CALL TTOUT LEA DX,TIPC CALL OUTTIP LEA DI,DAT2 MOV AL,NUMC CALL TTOUT LEA DX,TIPD CALL OUTTIP LEA DI,DAT2 MOV AL,NUMD CALL TTOUT LEA DX,TIPF CALL OUTTIP LEA DI,DAT2 MOV AL,NUMF CALL TTOUT MOV AH,4CH ;返
10、回DOS INT 21H ;输入子程序 INPUT PROC NEAR MOV AH,0AH ;调用DOS键盘输入功能 INT 21H MOV CL,SI+1 ;获取指针地址,设置循环次数 MOV CH,0 MOV BX,CX ;由低到高位读入数字 L2: MOV AL,SI+BX+1 MOV DI,AL DEC SI INC DI LOOP L2 RET ;返回主程序INPUT ENDP ;输出子程序OUTTIP PROC NEAR MOV AH,09H INT 21H RET ;返回主程序OUTTIP ENDP OUTNUM PROC NEAR LOUT: MOV AH,02H MOV D
11、L,SI INT 21H DEC SI LOOP LOUT RET ;返回主程序OUTNUM ENDP TTOUT PROC NEAR MOV AH,0 MOV BL,10 MOV CX,0L4: DIV BL ADD AH,30H MOV DI,AH MOV AH,0 INC DI INC CX CMP AL,0 JA L4 LEA SI,DAT2 ADD SI,CX DEC SI CALL OUTNUM CRLFM1 RETTTOUT ENDP CODE ENDS ;代码段结束 END START四、实验结果1.编译、连接生成可执行文件,调试该可执行文件。2.输入数据获得结果五、实验总结与
12、体会 本次实验中,运用了汇编程序设计中的分支、循环、子程序调用、宏和DOS功能调用,同时使用了合适的人机交互功能(如键盘输入、屏幕输出等)。实现了“ 输入不超过100个学生的成绩,按照分数高低分成A、B、C、D、F五个等级,依次对应的分数为90100、8089、7079、6069、059,屏幕分别输出5个等级的学生人数。”的功能。 实验过程中,我们先写好设计任务书,并按照任务是的要求和流程图分工编好程序,并一起将各部分程序结合起来,经调试修改最终实现预定功能。我们强化了对汇编程序设计中分支、循环、子程序调用、宏和DOS功能调用的使用方法的理解,并学会用寄存器和指针在各部分程序之间传递数据。由于编写各部分程序时有个别寄存器和指针没有区分清楚,以及个别子程序没有嵌套在合适的位置,使得最初调试时没有实现预定的结果,我们在多次梳理编写出的程序之后,找到以上的问题并顺利解决这些问题。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1