混合算术运算实训报告解读.docx
- 文档编号:9951310
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:17
- 大小:47.70KB
混合算术运算实训报告解读.docx
《混合算术运算实训报告解读.docx》由会员分享,可在线阅读,更多相关《混合算术运算实训报告解读.docx(17页珍藏版)》请在冰豆网上搜索。
混合算术运算实训报告解读
课程设计报告
课程微机原理课程设计
题目混合算术运算的实现
系别物理与电子工程学院
年级08级专业电子科学与技术班级二学号
学生姓名
指导教师居伟骏职称讲师
设计时间2011-4-2~2011-4-8
绪论(2
第一章混合算术运算的分析和设计(2
1.1混合算术运算的分析(2
1.2混合算术运算的设计(3
1.2.1对输入信息的判断(4
1.2.2算术的运算(4
1.2.3结果的输出(5
2.1程序汇编(6
2.2程序运行的结果显示如图(7
第三章实训总结(7
3.1实训总结(7
主要参考文献(9
附录(9
绪论
此次实训的内容为任意输入4个一位无符号十进制数,它们之间用“+”,“-”,“*”号任意连接成为一个简单的算术运算式,要求按照算术运算法则计算得到正确结果。
要求有输入提示信息,并且当输入算式不符合要求时能够输出提示信息,并要求重新输入。
此过程自动重复进行,直到输入“$”符号时程序退出。
本设计是利用汇编语言来实现算术运算,整个程序代码主要分为三个模块,即输入判断、运算、结果输出。
利用汇编程序来实现混合算术运算时遇到的问题主要有怎样判别运算的优先等级、怎样判别符号的优先等级、不能连续输入数字和符号、首位必须是数字等等的问题。
在本实训设计中将一一解决这些问题。
第一章混合算术运算的分析和设计
1.1混合算术运算的分析
设计题目要求有:
当运行程序时有必要的输入提示信息、当输入算术不符合要求时能够输出提示信息并要求重新输入、整个运算过程能够自动重复进行至输入“$”符号时退出程序。
根据这些要求,我们对课题的初步分析是首先对输入的信息限定在一定的范围之内,保证输入的信息是题目要求的数字或者符号。
设置两个存储区NUMB和MARK,前者用来存储数字,后者用来存储符号。
再设置两个判断标志SIGN1和SIGN2,SIGN1用来保证不能连续输入数字和首位不能是符号,SIGN2保证程序运行时不能连续输入运算符号。
例如当连续输入数字或者符号时,结果中会有输出提示信息:
YOURINPUTISWRONGPLEASEAGAIN。
当输入符号满足条件时,对符号设置优先级,并将其权值保存在符号存储区中,当下一个符号要存储到符号存储区中时,现与前者进行比较如权值大于前者那么地址下一位存储,否则将前者的运算先进行计算并保存刚才的符号,数字存储区地址是随着符号存储区地址而变化的,直到当输入是“=”号时跳转到输出程序输出结果,然后继续接下来的运算直到输入“$”时结束程序!
1.2混合算术运算的设计
整个程序代码编写的思路可以通过下面的流程图1.2.1清晰的看出。
图1.2.1混合算术运算流程图
1.2.1对输入信息的判断
INPUT:
;对输入进行判断MOVAH,1
INT21H
CMPAL,24H;判断是否是‘$’,是就退出程序JEJ_SHU1
CMPAL,3DH;判断是否是=号,是就跳转到PDJEJUD
CMPAL,2AH;判断是否是*号
JEJUD
CMPAL,2BH;判断是否是+
JEJUD
CMPAL,2DH;判断是否是-
JEJUD
CMPAL,30H;判断是否小于0
JBBC
CMPAL,39H;判断是否大于9
JABC
此段代码的作用就是将输入的信息限定在一定的范围之内,保证输入的是“*”、“+”、“—”、“=”,以及数字0~9,从而更好的满足题目的要求。
1.2.2算术的运算
MATCHPROCNEAR
PUSHAX
XORAX,AX
XORBX,BX
CMPCL,2AH;乘法运算
JNENEXT1
SUBDI,2
XCHGBX,[DI]
SUBDI,2
XCHGAX,[DI]
MULBX
MOV[DI],AX
ADDDI,2
JMPFINISH
NEXT1:
CMPCL,2BH;加法运算
JNENEXT2
SUBDI,2
XCHGBX,[DI]
ADD[DI],BX
ADDDI,2
JMPFINISH
NEXT2:
CMPCL,2DH;减法运算
JNEFINISH
SUBDI,2
XCHGBX,[DI]
SUBDI,2
SUB[DI],BX
ADDDI,2
FINISH:
POPAX
RET
MATCHENDP
此段代码的作用是实现加、减、乘之间的算术运算。
1.2.3结果的输出
OUTPUT2:
;输出程序
SUBDI,2
CMPWORDPTR[DI],0;判断结果的正负
JGEA
NEGWORDPTR[DI];取补码
MOVDL,'-'
MOVAH,2
INT21H
A:
MOVBX,1000;A~D是将运算结果按位取出并转化成ASCII码在屏幕上显示MOVCX,4
MOVSI,0
B:
MOVAX,[DI]
CWD
DIVBX
MOV[DI],DX
CMPAL,0
JNEC
CMPSI,0
JNEC
CMPCX,1
JEC
JMPD
C:
MOVDL,AL
ADDDL,30H
INT21H
D:
MOVAX,BX
MOVDX,0
MOVBX,10
DIVBX
MOVBX,AX
LOOPB
此段代码的作用是将运算结果按位取出并转换成ASCII码在屏幕上显示
第二章程序的汇编和运行
2.1程序汇编
混合算术运算整个程序代码编写完时,便进入了汇编程序。
在汇编时也遇到了语法(汇编程序不能识别的语句、指令跳转的范围(图2.1.1、指定了非法类型(例如对一个过程指定BYTE类型,而不是NEAR或FAR、使用寄存器出错、操作数类型说明等等问题。
二解决这些问题就是在汇编过程中给出提示出错的地方,然后在返回到代码中对错误的地方进行一一仔细检查和认真思考。
图2.1.1
2.2程序运行的结果显示如图
图2.2.1首位输入运算符有错误提示
图2.2.2混合算术运算
图2.2.3输入“$”时程序退出
第三章实训总结
3.1实训总结
一个星期的微机原理课程设计就快要结束了,这期间有快乐有忧伤。
由于微机原理这门课我们是上学期学的,所以这次的课程设计对我们来说还是有些难度的,毕竟许多知识因为掌握的不够牢靠都已经还给老师了,所以开始时我们并没有太大的信心。
但学校这样安排肯定是有其中的道理的,我们也就只管静下心来好好做课程设计的了。
我们这一组的设计题目是混合算术运算的实现,也就是用汇编语言来设计一个简易的计算器。
拿到题目要求,按照我们一贯的思路,首先好好审题,认真读懂题目要求,明白我们所要设计的程序具体应该实现什么样的功能······理解
这些之后,就是上网看看有没有什么可以帮助我们更好的解决问题的资料,找一些类似的设计资料来学习一下,看看别人的思路,看看我们可以从中借鉴哪些好的方法等等。
很幸运的,我们在网上找到了一位网友上传的关于四则运算的设计报告,其中包含有流程图和源程序等,由于源程序过长,我们就先看了下他的流程图,大概理解了他那个题目的要求,然后我们准备也按他的思路来做,毕竟他的那个思路还是相当明朗的。
我们先尝试了一下他的程序,发现汇编后有错误报告,后来经过我们查资料研究出来这个错误是由跳转指令jump产生的,由于源程序过长,jump所在的行数与它所要跳转过去的长度所隔甚远,导致跳转不到应该执行的指令,然后我们在中间增添必要的跳转中转站来解决了这个问题。
这个问题解决之后他的程序可以运行了,但还是有很多错误,不过所幸我们已经领会了这个设计思路了,这也是我们学到的只是吧!
大概理清了自己的思路,下面我们开始编写代码,虽然网友的代码有错误,但可以供我们借鉴的还是有不少的,首先他的程序框架就很好啊!
所以我们也懒得自己再去重新构造框架了,直接在这个网友的基础上改变了若干个指令来实现我们自己所需要的功能。
这个过程其实是很痛苦的,偷懒还是要受惩罚的,因为不是我们自己编写的代码,所以有些语句我们还得花时间去理解它们,正是为了这个,我们的清明假期过的并不是那么的轻松。
群策群力,集合着我们大家的智慧结晶,我们终于在修改、尝试、修改中不断完善代码,最终达到了设计要求的功能。
虽然我们很开心,觉得我们就快大功告成了,但因为老师的一句话,我们小组成员犹如被霜打过的茄子一样,老师过来才看了两行,就直接说:
“你们这个是抄的啊!
······”虽然一班有人和我们做同一个课题,但我们也是将信用的,老师您说不能相互抄袭,我们怎么可能明知故犯呢?
他们的程序我们压根就没看过,或许只网上有这么一个版本,所以出现了雷同的现象,但这个设计真的是我们自己在学习掌握的基础上自己完成的啊!
虽然老师并没有承认我们,但我们自己承认自己,我们觉得这次实训的精髓我们领悟了,我们问心无愧。
虽然我们的程序仍然有这样或那样的缺点和不足,但它仍然是符合了题目的要求,只是在源程序上显得比较繁琐,我们尽力想将代码改的精简一些,但往往弄巧成拙,结果不是太理想。
这次实训不光是对我们所学知识的一个检验,更是对我们思维方式和解决问题的能力的一个磨练,谢谢老师的指导,我们在课程设计中检验自我,完善自我,有了长足的进步!
主要参考文献
1、微型计算机原理及应用技术(第二版
2、温冬婵、沈美明:
清华大学出版社,《IBMPC汇编语言程序设计教程》
附录
混合算术运算程序代码
DATASSEGMENT
STR1DB0AH,0DH,'WELCOMEYOU!
$'
MESGDB0AH,0DH,'INPUT:
$'
SIGN1DW0;判断数字标志位SIGN2DW0;判断符号标志位NUMBDW10DUP(0;数字存储区
MARKDB'M';符号存储区DB10DUP(0
ERRORDB'YOURINPUTISWRONGPLEASEAGAIN$'
DATASENDS
DISPMACROSTR;宏定义,显示信息LEADX,STR
MOVAH,9
INT21H
ENDM
CHOICEMACROASC,HAO,H;宏定义,设置符号
的优先级CMPAL,ASC
JNEOTH&HAO
MOVCH,H
JMPOTH4
ENDM
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEADI,NUMB
LEASI,MARK
DISPSTR1
CALLCR
MOVAX,0
MOVBX,0
MOVCX,0
MOVDX,0
START1:
DISPMESG
CALLCR
INPUT:
MOVAH,1
INT21H
CMPAL,24H;判断是否是‘$’,是就退出程序JEJ_SHU1
CMPAL,3DH;判断是否是等于号,是就跳转PDJEJUD
CMPAL,2AH;判断是否是*号
JEJUD
CMPAL,2BH;判断是否是+
JEJUD
CMPAL,2DH;判断是否是-
JEJUD
CMPAL,30H;判断是否小于0
JBBC
CMPAL,39H;判断是否大于9
JABC
CMPWORDPTRSIGN1,0;判断数字标志位是否是0,不是0说
明连续两次输入数字,跳到输入错误JNEBC
MOVWORDPTRSIGN2,0;符号标志位复位
INCWORDPTRSIGN1;数字标志位加2,表示有数字输入SUBAL,30H;将ASCII码转化成10进制
MOVAH,0
XCHGAX,[DI];将输入的数字存入数字存储区
JMPINPUT
JUD:
CMPWORDPTRSIGN2,0
JNEBC
CMPWORDPTRSIGN1,0
JEBC
INCWORDPTRSIGN2
ADDDI,2;转到下一个数字存储地址
MOVWORDPTRSIGN1,0;数字标志位复位
CALLADVANCE;设置优先级
AGAIN
CMPBYTEPTR[SI],'M';用于判断数字存储区是否为空
JESAVE
CMPCH,[SI];判断权值的大小,[SI]中是上一个符
号或其权值
JASAVE
DECSI
MOVCL,[SI]
CALLMATCH
JMPAGAIN
SAVE:
CMPCH,0;判断是否是=号
JEOUTPUT1
INCSI;符号存储地址加1,为存储下一个符号MOV[SI],AL
INCSI
MOV[SI],CH
JMPINPUT
J_SHU1:
JMPFARPTRJ_SHU2
BC:
CALLCR;输入错误显示信息
LEADX,ERROR
MOVAH,9
INT21H
JMPJ_SHH
MATCHPROCNEAR
PUSHAX
XORAX,AX
XORBX,BX
CMPCL,2AH;乘法运算
JNENEXT1
SUBDI,2
XCHGBX,[DI]
SUBDI,2
XCHGAX,[DI]
MULBX
MOV[DI],AX
ADDDI,2
JMPFINISH
NEXT1:
CMPCL,2BH;加法运算
JNENEXT2
SUBDI,2
XCHGBX,[DI]
SUBDI,2
ADD[DI],BX
ADDDI,2
JMPFINISH
NEXT2:
CMPCL,2DH;减法运算
JNEFINISH
SUBDI,2
XCHGBX,[DI]
SUBDI,2
SUB[DI],BX
ADDDI,2
FINISH:
POPAX
RET
MATCHENDP
J_SHU2:
JMPFARPTRJ_SHU;中间跳转OUTPUT1:
JMPOUTPUT2;中间跳转
ADVANCEPROC;子程序,设置优先级CHOICE2AH,1,4;*
OTH1:
CHOICE2BH,2,3;+
OTH2:
CHOICE2DH,3,3;-
OTH3:
CHOICE3DH,4,0;=
OTH4:
RET
ADVANCEENDP
CRPROCNEAR;子程序,回车换行PUSHAX
PUSHDX
MOVAH,2
MOVDL,0DH
INT21H
MOVAH,2
MOVDL,0AH
INT21H
POPDX
POPAX
RET
CRENDP
OUTPUT2:
;输出程序
SUBDI,2
CMPWORDPTR[DI],0;判断结果的正负
JGEA
NEGWORDPTR[DI];取补码
MOVDL,'-'
MOVAH,2
INT21H
A:
MOVBX,100;A~D是将运算结果按位取出并转化成
ASCII码在屏幕上显示
MOVCX,4
MOVSI,0
B:
MOVAX,[DI]
CWD
DIVBX
MOV[DI],DX
CMPAL,0
JNEC
CMPSI,0
JNEC
CMPCX,1
JEC
JMPD
C:
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
D:
MOVAX,BX
MOVDX,0
MOVBX,10
DIVBX
MOVBX,AX
LOOPB
J_SHH:
MOVWORDPTR[DI+2],0
MOVWORDPTRSIGN2,0
MOVWORDPTRSIGN1,0
LEADI,NUMB
LEASI,MARK
JMPSTART1
J_SHU:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 混合 算术 运算 报告 解读