混合算术运算实训报告解读Word文档下载推荐.docx

上传人:b****1 文档编号:5748511 上传时间:2023-05-05 格式:DOCX 页数:17 大小:47.70KB
下载 相关 举报
混合算术运算实训报告解读Word文档下载推荐.docx_第1页
第1页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第2页
第2页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第3页
第3页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第4页
第4页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第5页
第5页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第6页
第6页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第7页
第7页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第8页
第8页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第9页
第9页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第10页
第10页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第11页
第11页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第12页
第12页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第13页
第13页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第14页
第14页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第15页
第15页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第16页
第16页 / 共17页
混合算术运算实训报告解读Word文档下载推荐.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

混合算术运算实训报告解读Word文档下载推荐.docx

《混合算术运算实训报告解读Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《混合算术运算实训报告解读Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。

混合算术运算实训报告解读Word文档下载推荐.docx

第一章混合算术运算的分析和设计

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;

判断是否是+

CMPAL,2DH;

判断是否是-

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]

XCHGAX,[DI]

MULBX

MOV[DI],AX

ADDDI,2

JMPFINISH

NEXT1:

CMPCL,2BH;

加法运算

JNENEXT2

ADD[DI],BX

NEXT2:

CMPCL,2DH;

减法运算

JNEFINISH

SUB[DI],BX

FINISH:

POPAX

RET

MATCHENDP

此段代码的作用是实现加、减、乘之间的算术运算。

1.2.3结果的输出

OUTPUT2:

输出程序

CMPWORDPTR[DI],0;

判断结果的正负

JGEA

NEGWORDPTR[DI];

取补码

MOVDL,'

-'

MOVAH,2

A:

MOVBX,1000;

A~D是将运算结果按位取出并转化成ASCII码在屏幕上显示MOVCX,4

MOVSI,0

B:

MOVAX,[DI]

CWD

DIVBX

MOV[DI],DX

CMPAL,0

JNEC

CMPSI,0

CMPCX,1

JEC

JMPD

C:

MOVDL,AL

ADDDL,30H

D:

MOVAX,BX

MOVDX,0

MOVBX,10

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,'

SIGN1DW0;

判断数字标志位SIGN2DW0;

判断符号标志位NUMBDW10DUP(0;

数字存储区

MARKDB'

M'

符号存储区DB10DUP(0

ERRORDB'

YOURINPUTISWRONGPLEASEAGAIN$'

DATASENDS

DISPMACROSTR;

宏定义,显示信息LEADX,STR

MOVAH,9

ENDM

CHOICEMACROASC,HAO,H;

宏定义,设置符号

的优先级CMPAL,ASC

JNEOTH&

HAO

MOVCH,H

JMPOTH4

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

MOVAX,DATAS

MOVDS,AX

LEADI,NUMB

LEASI,MARK

DISPSTR1

CALLCR

MOVAX,0

MOVBX,0

MOVCX,0

START1:

DISPMESG

MOVAH,1

判断是否是等于号,是就跳转PDJEJUD

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],'

用于判断数字存储区是否为空

JESAVE

CMPCH,[SI];

判断权值的大小,[SI]中是上一个符

号或其权值

JASAVE

DECSI

MOVCL,[SI]

CALLMATCH

JMPAGAIN

SAVE:

CMPCH,0;

判断是否是=号

JEOUTPUT1

INCSI;

符号存储地址加1,为存储下一个符号MOV[SI],AL

INCSI

MOV[SI],CH

J_SHU1:

JMPFARPTRJ_SHU2

BC:

CALLCR;

输入错误显示信息

LEADX,ERROR

JMPJ_SHH

J_SHU2:

JMPFARPTRJ_SHU;

中间跳转OUTPUT1:

JMPOUTPUT2;

中间跳转

ADVANCEPROC;

子程序,设置优先级CHOICE2AH,1,4;

*

OTH1:

CHOICE2BH,2,3;

+

OTH2:

CHOICE2DH,3,3;

-

OTH3:

CHOICE3DH,4,0;

=

OTH4:

ADVANCEENDP

CRPROCNEAR;

子程序,回车换行PUSHAX

PUSHDX

MOVDL,0DH

MOVDL,0AH

POPDX

CRENDP

MOVBX,100;

A~D是将运算结果按位取出并转化成

ASCII码在屏幕上显示

MOVCX,4

J_SHH:

MOVWORDPTR[DI+2],0

MOVWORDPTRSIGN2,0

MOVWORDPTRSIGN1,0

JMPSTART1

J_SHU:

MOVAH,4CH

CODESENDS

ENDSTART

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2