综合汇编程序设计资料.docx

上传人:b****3 文档编号:12632297 上传时间:2023-04-21 格式:DOCX 页数:17 大小:215.71KB
下载 相关 举报
综合汇编程序设计资料.docx_第1页
第1页 / 共17页
综合汇编程序设计资料.docx_第2页
第2页 / 共17页
综合汇编程序设计资料.docx_第3页
第3页 / 共17页
综合汇编程序设计资料.docx_第4页
第4页 / 共17页
综合汇编程序设计资料.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

综合汇编程序设计资料.docx

《综合汇编程序设计资料.docx》由会员分享,可在线阅读,更多相关《综合汇编程序设计资料.docx(17页珍藏版)》请在冰豆网上搜索。

综合汇编程序设计资料.docx

综合汇编程序设计资料

深圳大学实验报告

 

课程名称:

微机原理及应用实验

实验名称:

综合汇编程序设计

学院:

物理科学与技术学院

专业:

2012级应用物理

指导教师:

报告人:

学号:

实验时间:

2014年12月3日

实验报告提交时间:

2014年12月17日

 

 

一、实验目的

(1)综合运用所学的微机汇编语言程序设计的知识。

(2)进一步巩固在PC上建立、汇编、链接、调试和运行汇编语言程序的过程与方法。

二、实验要求

1.以1-2人为一组,自拟设计题目。

要求如下

(1)务必用到汇编程序设计中的分支、循环、子程序调用、宏和DOS功能调用;

(2)务必有合适的人机交互功能(如键盘输入、屏幕输出等);

(3)务必提前提交设计报告书(写明程序功能、总体设计思路与设计方案及分工等)。

如模拟计算器设计:

用键盘输入,可进行五位十进制以内的加减法、2位十进制以内的乘除运算。

再如电子钟或秒表,在屏幕显示时间,支持时间校准或设置记时起点、停止计时等功能等等。

三、实验内容

1.设计任务书

(1)程序功能:

输入不超过100个学生的成绩,按照分数高低分成A、B、C、D、F五个等级,依次对应的分数为90~100、80~89、70~79、60~69、0~59,屏幕分别输出5个等级的学生人数。

总体设计思路:

(2)调用DOS键盘输入功能获得不超过100个学生的成绩,每输入一个成绩就要回车换行,故要写一个回车换行的宏和一个输入子程序。

再判断一位学生的成绩处于哪个等级,进入相应的分支累加计数,使用循环结构对所有输入的成绩进行判断。

接着调用DOS屏幕输出功能输出每个等级的学生人数及总人数,因为要分成六次输出,故将输出写成子程序。

(3)设计方案及分工:

小组成员:

赖树文(负责主程序部分),林成业(负责宏,子程序和报告)

设计方案:

如简略流程图所示(注:

宏和子程序没有在流程图中标出)

 

 

 

2.汇编代码源文件及注释

CRLFMMACRO;空格宏程序

MOVAH,02

MOVDL,20H;调用DOS空格功能

INT21H

ENDM

CRLFM1MACRO;回车换行宏程序

MOVAH,02

MOVDL,0DH;调用DOS回车功能

INT21H

MOVAH,02

MOVDL,0AH;调用DOS换行功能

INT21H

ENDM

DATASEGMENT;定义数据段

TIPDB'pleaseinputgrades(lessthan100numbers),oneinput,oneenter,inputYorytoendinput',0DH,0AH,'$';开头提示

TIPNDB'total:

','$';输出提示

TIPADB'A:

','$';输出提示

TIPBDB'B:

','$';输出提示

TIPCDB'C:

','$';输出提示

TIPDDB'D:

','$';输出提示

TIPFDB'F:

','$';输出提示

N=101

STRDB4,0,3DUP(30H),0DH

DAT1DB3DUP(30H)

DAT2DB3DUP(30H)

GRADBNDUP(0)

NUMDB-1

NUMADB0

NUMBDB0

NUMCDB0

NUMDDB0

NUMFDB0

PYLDW0

DATAENDS

STACKSEGMENT;定义堆栈段

DB100DUP(0)

STACK_TOPDB0

STACKENDS

CODESEGMENT;代码段

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA;设置数据段、堆栈段

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETSTACK_TOP

;输出提示

LEADX,TIP

CALLOUTTIP

CRLFM

;调用输入子程序获得成绩

L1:

LEADX,STR

LEASI,STR

LEADI,DAT1

CALLINPUT

CRLFM

INCNUM;记录输入总个数

;判断是否输入Y和y来结束成绩输入

LEADI,STR

MOVAL,[DI+2]

CMPAL,'Y'

JEJUDGE

CMPAL,'y'

JEJUDGE

;将输入的数转化为十进制多位数存入GRA

LEADI,DAT1

MOVCL,[DI]

SUBCL,30H;将ASCALL码转化为数字

INCDI

MOVAL,[DI]

SUBAL,30H;将ASCALL码转化为数字

MOVBL,10

MULBL

ADDCL,AL

INCDI

MOVAL,[DI]

SUBAL,30H;将ASCALL码转化为数字

MOVBL,100

MULBL

ADDCL,AL

LEADI,GRA

ADDDI,PYL

MOV[DI],CL

INCPYL

JMPL1;不输入Y和y就继续从键盘读取数据

;用循环和分支结构判断等级

JUDGE:

CRLFM1

LEADI,GRA

MOVCL,NUM

MOVCH,0

L3:

MOVAL,[DI]

CMPAL,89

JADJA

CMPAL,79

JADJB

CMPAL,69

JADJC

CMPAL,59

JADJD

JMPDJF

DJA:

INCNUMA

JMPOVER

DJB:

INCNUMB

JMPOVER

DJC:

INCNUMC

JMPOVER

DJD:

INCNUMD

JMPOVER

DJF:

INCNUMF

OVER:

INCDI

LOOPL3

;输出结果

LEADX,TIPN

CALLOUTTIP

LEADI,DAT2

MOVAL,NUM

CALLTTOUT

LEADX,TIPA

CALLOUTTIP

LEADI,DAT2

MOVAL,NUMA

CALLTTOUT

LEADX,TIPB

CALLOUTTIP

LEADI,DAT2

MOVAL,NUMB

CALLTTOUT

LEADX,TIPC

CALLOUTTIP

LEADI,DAT2

MOVAL,NUMC

CALLTTOUT

LEADX,TIPD

CALLOUTTIP

LEADI,DAT2

MOVAL,NUMD

CALLTTOUT

LEADX,TIPF

CALLOUTTIP

LEADI,DAT2

MOVAL,NUMF

CALLTTOUT

MOVAH,4CH;返回DOS

INT21H

;输入子程序

INPUTPROCNEAR

MOVAH,0AH;调用DOS键盘输入功能

INT21H

MOVCL,[SI+1];获取指针地址,设置循环次数

MOVCH,0

MOVBX,CX

;由低到高位读入数字

L2:

MOVAL,[SI+BX+1]

MOV[DI],AL

DECSI

INCDI

LOOPL2

RET;返回主程序

INPUTENDP

;输出子程序

OUTTIPPROCNEAR

MOVAH,09H

INT21H

RET;返回主程序

OUTTIPENDP

OUTNUMPROCNEAR

LOUT:

MOVAH,02H

MOVDL,[SI]

INT21H

DECSI

LOOPLOUT

RET;返回主程序

OUTNUMENDP

TTOUTPROCNEAR

MOVAH,0

MOVBL,10

MOVCX,0

L4:

DIVBL

ADDAH,30H

MOV[DI],AH

MOVAH,0

INCDI

INCCX

CMPAL,0

JAL4

LEASI,DAT2

ADDSI,CX

DECSI

CALLOUTNUM

CRLFM1

RET

TTOUTENDP

CODEENDS;代码段结束

ENDSTART

 

四、实验结果

1.编译、连接生成可执行文件,调试该可执行文件。

2.输入数据获得结果

五、实验总结与体会

本次实验中,运用了汇编程序设计中的分支、循环、子程序调用、宏和DOS功能调用,

同时使用了合适的人机交互功能(如键盘输入、屏幕输出等)。

实现了“输入不超过100个学生的成绩,按照分数高低分成A、B、C、D、F五个等级,依次对应的分数为90~100、80~89、70~79、60~69、0~59,屏幕分别输出5个等级的学生人数。

”的功能。

实验过程中,我们先写好设计任务书,并按照任务是的要求和流程图分工编好程序,并一起将各部分程序结合起来,经调试修改最终实现预定功能。

我们强化了对汇编程序设计中分支、循环、子程序调用、宏和DOS功能调用的使用方法的理解,并学会用寄存器和指针在各部分程序之间传递数据。

由于编写各部分程序时有个别寄存器和指针没有区分清楚,以及个别子程序没有嵌套在合适的位置,使得最初调试时没有实现预定的结果,我们在多次梳理编写出的程序之后,找到以上的问题并顺利解决这些问题。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1