资源描述:
《多位十进制数加法器实验-2014》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验三多位十进制数加法器设计1、实验目的(1)继续熟练掌握在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程;(2)学习数据传送和算术运算指令的用法;(3)掌握子程序设计方法;(4)掌握宏汇编设计方法;(5)掌握键盘输出的DOS功能调用方法。2、实验内容(1)将两个多位十进制数相加。要求被加数、加数均以ASCII码形式各自按高位高地址的规律分别顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回结果变量DATA3处,并屏幕显示结果。(2)在以上程序基础上,设计一个多位十进制数加法器,键盘输入十进制加数和
2、被加数,将输入和输出结果以竖式形式显示在屏幕。3、提不:(1)算法说明:以42136与12547相加为例,首先将两个数中的每一位都以ASCII码存入相应的内存单元,然后将每一位数都减去30H,并将被加数DATA1和加数DATA2相对应位相加(BCD码加法及其十进制调整,要考虑低位向高位的进位),存入相应的结果DATA3存储单元中,最后将该单元中的每一位数转换成相应的ASCII码,调用DOS系统功能调用的显示字符指令,显示两数相加的结果。(2)部分程序代码:DATASEGMENT;数据段补充必要的代码,定义被加数、加数和结果变量DATAEND
3、SSTACKSEGMENTSTACK;堆栈段STADB64DUP(O)SP_TOPDB0STACKENDSCODESEGMENT;代码段补充必要的代码;显示冋车换行功能用宏定义CRLF实现,放在代码段最前面CRLFMACROMOVDL,0DH;回车(0DH为回车的ASCII码)MOVAH,02H;送DOS的中断调用功能号INT21H;DOS的中断调用补充必要的代码:用DOS功能调用实现换行,0AH为换行的ASCII码ENDMSTART:...;补充必要的代码:程序开头必须要有的五条指令;显示被加数,并冋车换行MOVBX,OFFSETDATA
4、1MOVSI,05CALLDISPL;显示被加数,DISPL为显示子程序CRLF;回车、换行宏调用...;补充必要的代码,显示加数CALLADDA;调用加法运算子程序.;补充必要的代码,显示结果补充必要的代码:回车、换行补充必要代码:主程序结束,返回DOS;DISPL为字符串显示子程序DISPLPROCNEAR;子程序定义DSL:MOVAH,02;送显示功能号MOVDL,[BX+SI-1];显示字符串中一字符INT21H;DOSINT21功能调用DECSI;修改偏移量JNZDSLRETDISPLENDP;多位数加法子程序ADDAPROCNE
5、AR需要ft编的求和核心程序RETADDAENDP;代码段与程序结束CODEENDSENDSTART(1)加法器的设计:需要用到字符串输入和字符串输出的DOS功能调用。回撤换行的ASCII码分另lj是ODH,0AHi.0AH功能输入:STR1DB6,?,6DUP(20H);存放键盘输入的被加数,最多5位数+1位结束符回车符0DHSTR2DB6,?,6DUP(20H);存放键盘输入的加数STR3DB10,DUP(20H),LEADX,STR1MOVAH,OAHINT21Hii.09H功能输出:CRLFLEAMOVINTDX,AH,21HSTR
6、1OAH把加数与被加数从低位到高位按位相加后,若结果的由高位到低位的ASCII存入了STR3,则LEADX,STR3MOVAH,O9HINT21H执行后,结果可显示在当前光标出。注意竖式显示的时候,要对齐。4.实验及报告要求:1)要求両出完整的程序流程图。2)根据流程图和部分提示代码,编写完整的汇编代码源文件(特別是以上红字部分),并存入合适目录,要求补充写出所有未注释的伪指令和指令的注释;3)编译、连接生成可执行文件,分别在debug和Emu8086不调试该可执行文件,给出程序运行时的各段地址(CS=?,DS=?SS=?ES=?)及两个子
7、程序入口的IP;试改变加数和被加数,如何从内存中观察结果的变化?总结子程序格式及其调用方法;结合木程序说明宏调用与子程序的区别。4)写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。5)实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法、汇编指令及汇编语言编程方法、微机原理学习方法作出总结。4.思考题1)在键盘上输入一个字符或数字,要求:对十六进制数字(由0—9,A〜F或a〜f组成),显示该数字的十进制值;当输入值为Q时结束程序,对其他输入提示输入不合法。画出程序流程阁并请写出完整程序代码。(必
8、做)2)请问你的程序能否处理加数和被加数都介于0〜65535范围但计算结果超出该范围的情况?如何改进?3)加数或被加数为负数,结果是否正确,输出格式上作何处理?