多位十进制数加法器设计_第1页
多位十进制数加法器设计_第2页
多位十进制数加法器设计_第3页
多位十进制数加法器设计_第4页
多位十进制数加法器设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:多位十进制数加法器设计学院:物理科学与技术学院专业;应用物理指导教师:报告人:_学号:_班级:应用物理班实验时间:2015-10-19实验报告提交时间:2015-11-02教务处制-1-一、实验名称:多位十进制数加法器设计二、实验目的(1)继续熟练掌握在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程;(2)学习数据传送和算术运算指令的用法;(3)掌握子程序设计方法;(4)掌握宏汇编设计方法;(5)掌握键盘输出的DO砌能调用方法。三、实验内容(1)将两个多位十进制数相加。要求被加数、加数均以ASCII码形式各自按高位高地址

2、的规律分别顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回结果变量DATA3处,并屏幕显示结果。(2)在以上程序基础上,设计一个多位十进制数加法器,键盘输入十进制加数和被加数,将输入和输出结果以竖式形式显示在屏幕。四、实验任务分析与算法分析(软件实验)或实验电路及连线(硬件实验)实验及报告要求:1) 要求画出完整的程序流程图。2) )根据流程图和部分提示代码,编写完整的汇编代码源文件(特别是以上红字部分),并存入合适目录,要求补充写出所有未注释的伪指令和指令的注释;3) )编译、连接生成可执行文件,分别在debug和Emu8086下调试该可执行文件,给出程序运行时的

3、各段地址(CS=?,DS=?SS=?ES=?)及两个子程序入口的IP;试改变加数和被加数,如何从内存中观察结果的变化?总结子程序格式及其调用方法;结合本程序说明宏调用与子程序的区别。4) 写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。5) 实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法、汇编指令及汇编语言编程方法、微机原理学习方法作出总结。实验任务1.将两个多位十进制数相加。要求被加数、加数均以ASCII码形式各自按高位高地址的规律分别顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回结果变量DATA3处,并屏幕显

4、示结果。算法分析:定义两个加数,并分别存至两个变量之中;分别取变量中的对应万千百十个位上的数,由ASCII码转换成数值后,对应位相加(使用带进位的加法命令),得到的数值保存至结果变量的对应位上,并调用DOS屏幕显示字符功能显示。功能:将被加数和加数分别显示,接着运行加法运算,然后将结果显示出来。算法说明: 定义数据段:定义被加数和加数,且要使其用ASCII码以十六进制之间的转换; 定义堆栈段,并给SP_TOP单元赋初值0; 定义代码段,并将源代码放在里面首先,编写主程序;接着,编写显示、回车换行和加法运算的子程序。程序结束。所用到的寄存:AX、SS、CS、DS、ES、SI、SP、DI-2-五、

5、程序说明(预习)-3-六、源程序清单及其每句的注释1.没有键盘录入的源程序CRLFMACRO;回车换行宏定义MOVAH,02MOVDL,0DHINT21HMOVAH,02MOVDL,0AHINT21HENDMDATASEGMENT;数据段DATA1DB35H,34H,33H,32H,35H;代表12345DATA2DB30H,32H,34H,36H,38H;代表86420DATA3DB6DUP(0),$CARYDB0DATAENDSSTACKSEGMENTSTACK;堆栈段STADB64DUP(0)STACK_TOPDB0STACKENDSCODESEGMENT;代码段ASSUMECS:COD

6、E,DS:DATA,ES:DATA,SS:STACKSTART:;程序开头必须要有的五条指令MOVAX,DATAMOVDS,AX;设置数据段MOVAX,STACKMOVSS,AX;设置堆栈段LEASP,STACK_TOP;设置栈顶指针1;程序的中间部分LEABX,DATA1;加数1送至BX,传至子程序DISP的形参CALLDISP;调用显示字符串子程序,将第一个加数显示到屏幕LEABX,DATA2;加数2送至BX,传至子程序DISP的形参CALLDISP;调用显示字符串子程序,将第一个加数显示到屏幕LEABX,DATA1;加数1送至BXMOVSI,0;定义指针SI依次指向变量单元的下一个数据,

7、相当指针MOVCX,5;设置循环次数5NEXT1:SUBBYTEPTRBXSI,30H;将BX里面的对应存储单元的字符串ASCII码转换为对应二进制-4-INCSI;指针自加一LOOPNEXT1;循环执行LEABX,DATA2;加数1送至BXMOVSI,0;定义指针SI依次指向变量单元的下一个数据,相当指针MOVCX,5;设置循环次数5NEXT2:SUBBYTEPTRBXSI,30H;将BX里面的对应存储单元的字符串ASCII码转换为对应二进制INCSI;指针自加一LOOPNEXT2;循环执行CLC;清屏CALLADDC;调用加法子程序LEADX,DATA3;调用DOS功能09号,显示字符串,

8、把最终结果显示到屏幕上MOVAH,9INT21H;程序结束必须要有的两条指令MOVAX,4C00H;INT21H;显示字符串子程序DISPPROC;子程序定义MOVSI,5DSP:MOVAH,2;送显示功能号MOVDL,BX+SI-1;显示字符串中一字符INT21H;DOSINT21功能调用DECSI;修改偏移量CMPSI,0JNZDSPCRLF;宏调用RETDISPENDP;加法子程序ADDCPROC;子程序定义LEASI,DATA1;加数1有效偏移地址送至SILEADI,DATA2;加数2有效偏移地址送至DILEABX,DATA3;结果变量的基地址送至BXADDBX,5;设置相加次数MOV

9、CX,5;设置循环次数-5-AD:MOVAL,BYTEPTRSIADCAL,BYTEPTRDIAAAJCSETCARYMOVCARY,0JMPNEXTSETCARY:MOVCARY,1NEXT:ADDAL,30HMOVBYTEPTRBX,ALINCSIINCDIDECBXLOOPAD;指针SI指向的内存单元的内容转换类型属性送至AL;指针SI指向的内存单元的内容转换类型属性相加后送至;加法十进制调整;判断是否进位,是跳至SETCARY;否,进位变量置0;无条件跳转NEXT;进位变量置1;AL中数据进行ASCII码调整;将得到的AL最终结果送至BX基地址对应的内存区;修改偏移量;循环执行ALCM

10、PCARY,1;判断进位变量是否为1JZCAY;是,跳转至CAYMOVBYTEPTRBX,20H;否贝U退格JMPEXITCAY:MOVBYTEPTRBX,31H;是,置1EXIT:RETADDCENDPCODEENDSENDSTART;最后一行要按回车键2.巾世母水,尔d王H;将AX中的三位数拆为三个BCD码,并存入数据段BCD0开始的三个单元DATASEGMENT;数据段INSTR1DB6,0,6DUP(0);定义被加数ASCII变量INSTR2DB6,0,6DUP(0);定义加数ASCII变量NUM1DB5DUP(0);定义被加数bcd变量NUM2DB5DUP(0);定义加数bcd变量R

11、ESULTDB6DUP(0);结果bcd显示STRING0DB0DH,0AH,0AH,Youwanttoplay?EnterYtoplay;Anykeytoexit.$STRING1DBPleaseentertheAdditionsNumber:,0AH,0DH,$STRING2DB+,$STRING3DB=,$DATAENDS-6-;显示回车换行功能用宏定义CRLFMACROMOVDL,0DHMOVAH,02HINT21HMOVDL,0AHMOVAH,02HINT21HENDMSTACKSEGMENTSTACKSTADB64DUP(0)STACK_TOPDB0STACKENDSCODESEG

12、MENT;ASSUMECS:CODE,DS:DATA,START:;程序开头必须要有的五条指令MOVAX,DATAMOVDS,AX;MOVAX,STACKMOVSS,AX;LEASP,STACK_TOP;MOVAH,09HLEADX,STRING1INT21HCRLFLEADX,INSTR1MOVAH,0AHINT21HLEASI,INSTR1LEADI,NUM1MOVBL,SI+1MOVBH,0MOVCX,BXINCBXL1:MOVAL,SI+BXSUBAL,30HMOVDI,ALDECSIINCDILOOPL1MOVAH,09HLEADX,STRING2CRLF实现,放在代码段最前面;回车

13、(0DH为回车的ASCII码);送DOS的中断调用功能号;DOS的中断调用;换行(0AH为回车的ASCII码);送DOS的中断调用功能号;DOS的中断调用堆栈段代码段ES:DATA,SS:STACK设置数据段设置堆栈段设置栈顶指针;指针;从屏幕输入字符;被加数的初始偏移量,0;被加数BCD的初始偏移量,0;BL=从屏幕输入多少个数;将被加数ASCII变成BCD;SI-1,DI+1;cx不等于0时循环-7-INT21HL2:LEADX,INSTR2MOVAH,10INT21HLEASI,INSTR2LEADI,NUM2MOVBL,SI+1MOVBH,0MOVCX,BXINCBXMOVAL,SI+

14、BX;指针;从屏幕输入字符;指针;BL=从屏幕输入多少个数;将加数ASCII变成BCDL6:L7:EXIT:;DISPLDISPLSUBAL,30HMOVDI,ALDECSIINCDILOOPL2CALLADDAJCL6MOVCL,0JMPL7MOVCL,1LEASI,RESULTLEADI,INSTR1MOVBYTEPTRSI+5,CLCALLDISPLMOVAX,4C00HINT21H为字符串显示子程序PROCNEAR;SI-1,DI+1;cx不等于0时循环;调用加法运算子程序;提取进位;将进位赋值给结果的第5个偏移量;显示结果,DISPL为显示子程序;返回DOS(两句);以上两句返回DO

15、S;子程序定义S2:S1:S3:MOVCX,6MOVBX,5MOVAL,SI+5CMPAL,0JZS1;JMPS3DECCXDECBXDECSIJMPS2LEASI,RESULT;最大有6位数输出,循环执彳/、,次;不为0的最高位的位数如果最高位为0,则跳转到S1;数的长度减1-8-LEADI,INSTR1LEADX,STRING3MOVAH,09HINT21HL5:MOVAL,SI+BXADDAL,30HMOVAH,02HMOVDL,ALINT21HDECSILOOPL5RETDISPLENDP;多位数加法子程序ADDAPROCNEAR;需要自编的求和核心程序CLCLEASI,NUM1LEA

16、DI,NUM2LEABX,RESULTMOVCX,5MOVDL,0L3:MOVAL,SIADCAL,DIAAAMOVBYTEPTRBX,ALINCSIINCDIINCBXLOOPL3RETADDAENDP;代码段与程序结束CODEENDSENDSTART从不为0的最高位开始提取数据在屏幕上显示;cx不等于0时循环;清零;带进位加法;十进制调整;赋值给RESULT;cx不等于0时循环程序最后一行要输入回车-9-七、实验源程序清单(实验后以电子报告形式存储到指定位置)1 .源程序路径及文件名:计苴忙软件(立)masm怛含同阵中扶豆*新建文性夫一add.asmASM文件4.46KB1ADOl.asm

17、gD2a$nAgM文件njTASM工00KB怛15.26KB-EIFQ&FElnnBjADD2.ASMADD1.ASM2 .可执行程序路径及文件名:a计耳RaH蹲(Di)ama=m贮打开方大哥建交件充AM文件4找KBADD2JSO17AM文件JLHi5.00KB3M哀性IfiSl4,21KBADD2,EXEI201512/2323:263JtFile市丈件八、上机调试情况说明EMU8086:一:没有键盘录入1 .结果显示如下:!ID1J;-NTemulatorscr&e2 .程序运行时的各段地址:七nrbiInt八。O1.|oo|g|JA1口口|oo77U-口ACSF-4-OC1口07T?SR

18、OD3BROOOOSI口口口口LMD5口孑H白orpo3 .两个子程序IP入口:AH算呈中三G7SSSSS0-000工1工工I彳7rQ00ScsIFSS-10-IPuTTT0064SS0712pc-/777_/匕000。二JJ+A-7788-o-uoo-二加法子程中fiDDCPROC|_EASI.DATA14 .改变两个加数数值uIFi-segnent-TxecuTaEIefTlt-tTmpTatT?NflCPO口叫InwIMT;no1;ih叫INIAH.02DL,ODH21H;回车换行宏定义Am成的EnonSEGMENTRH.02DL.OAH21HDATAlDATA2jcSTADB39H.3

19、4H.33H.32H.33H:-12345DB3OH,32H,34H,3CH,35H;代表的42。DBeDUP(OJb,DE0runs粘,04H.03h,02h,一必.04h.06hEK31h00h,STACKOP量IEmulatorscreenfi8tk2Schars)S64201437695.子程序格式及其调用方法和宏汇编区别子程序格式:子程序名称PROCNEAR;子程序定义;,子程序内容RET;子程序返回子程序名称ENDP;子程序结束调用格式:CALL子程序名称注意事项:1、子程序不能直接传递参数,需要自行定义变量。2、注意保护现场和恢复现场。宏汇编与子程序的区别:1、宏汇编有宏展开,子

20、程序没有2、宏汇编可以传递参数。:键盘录入NUM2RESUrrraTTTTssso123TGGGt-nn,f-51600000052200000SHfremulatorscreen(80x25chars)PleaseentertheAdditionsNumber:12345+54321=66666DOS:例如:250+250=500Z_J_JI_11550o225rp-11-RX=0000BX-0000CX=00E6DX-0000SP-0000BP-0000SI-0000DNVUPElPLNZNHUS=1S卜图=1卜SS=148卜CS=14911P=0UU01491:9000B88F14MOV

21、AXJ48F例如:62142+63123=125265-g62U263123125265ProgramterminatednormallProgramflX=00O0DS=147FierminatednormallyBM=0000CX=00E6DM=000OES47FSS48FCS=1491SP=0000IP00001491:0000B88F14MOVNVUPEIPLNZNAPONCBP=0000SI=00O0DI=000ONVUPEIPLNZNAPONC九、实验结果与分析结果如下:1D:N一fremulatorscr&eXXXXXXXBBBBBBB-LEr-r-r-r-EEE123TGGGL

22、NNN12UIIIMMSRRRAUUETTTTNNRSSSUhhhhhh516000C0005NNCemuletorscreen(80x255r写)PTeaseentertheAdditionsNumber:12345+54321=666ag十、实验总结(必备部分,评分重要依据之一)本次实验实则是对实验二的加强巩固基础上,进行更加友好的人机交互设计;通过本次实验不仅在程序中首先把两个加数固定,在实验二的基础上扩展位数,考虑到最高位进位的情况,并最终得出正确结果;后来又通过键盘录入两个加数,增加了人机交互的设计,如此一来,更加加深了对寄存器的使用,汇编语言宏定义,子程序调用以及DOS功能调用的学

23、习。同时,通过本次实验的学习,更加熟练了EMU8086工具的使用,也把理论课上学习到的汇编操作指令实际操作,对汇编语言的风格加深认识。-12-H一、思考题:(1)在键盘上输入一个字符或数字,要求:对十六进制数字(由09,A-F或af组成),显示该数字的十进制值;当输入值为Q时结束程序,对其他输入提示输入不合法。画出程序流程图并请写出完整程序代码。(必做)DATASEGMENT;数据段STRING1DBPLEASEINPUTANUMBER*STRING2DBYOUHADINPUT:$STRING3DBINPUTERROR!PLEASEINPUTAGAIN.$STRING4DBEXITSUCCES

24、SFULLY$DATAENDSSTACKSEGMENTSTACK;堆栈段STADB64DUP(0)SP_TOPDB0STACKENDSCODESEGMENT;代码段ASSUMEDS:DATACS:CODE,ES:DATA,SS:STACK;补充必要的代码START:MOVAX,DATA;补充必要的代码:程序开头必须要有的五条指令MOVDS,AXMOVAX,STACKMOVSS,AXLEASP,SP_TOPCRLFMACROMOVMOVINTMOVMOVINTDL,0DHAH,02H21HDL,0AHAH,02H21H;回车(0DH为回车的ASCII;送DOS的中断调用功能号;DOS的中断调用;

25、换行(0AH为回车的ASCII;送DOS的中断调用功能号;DOS的中断调用码)码)ENDMBEGIN:MOVAH,09H;显示输入提示LEADX,STRING1INT21HMOVAH,1;读键盘INT21HMOVBL,ALCMPBL,51H;判断是否是QJEEXITCMPBL,71HJEEXITCMPBL,30H;判断字符是否在0和9之间JBERRORCMPBL,3AH-13-JNBN1CRLFMOVAH,09HLEADX,STRING2INT21HMOVAH,02HMOVDL,BLINT21HCRLFJMPBEGIN;显示09N1:CMPBL,41H;判断字符是否在A和F之间JBERRORCMPBL,47HJNBN2SUBBL,65CRLFMOVAH,09HLEADX,STRING2INT21HMOVAH,2MOVDL,31HINT21HMOVAH,2ADDBL,30HMOVDL,BLINT21HCRLFJMPBEGIN;显示1015N2:CMPBL,61H;判断字符是否在a和f之间JBERRORCMPBL,67HJNBERRORSUBBL,97CRLFMOVAH,09HLEADX,STRING2INT21HMOVAH,2MOVDL,31HINT21HMOVAH,2ADDBL,30

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论