资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:多位十进制数加法器设计学院:物理科学与技术学院专业:应用物理指导教师:报告人:学号:班级:应用物理班实验时间:2015-10-19实验报告提交时间:2015-11-02教务处制-1-一、 实验名称:多位十进制数加法器设计二、实验目的(1)继续熟练掌握在 PC 机上建立、汇编、链接、调试和运行 8088 汇编语言程序的过程 ;( 2)学习数据传送和算术运算指令的用法 ;( 3)掌握子程序设计方法 ;( 4)掌握宏汇编设计方法 ;( 5) 掌握键盘输出的 DOS功能调用方法。三、实验内容( 1)将两个多位十进制数相加。要求被加数、加数均以ASCII 码形式各自按高位高地址的规律分别顺序存放在以 DATAl 和 DATA2 为首的 5 个内存单元中 (低位在前 ),结果送回结果变量 DATA3 处,并屏幕显示结果。(2)在以上程序基础上,设计一个多位十进制数加法器,键盘输入十进制加数和被加数,将输入和输出结果以竖式形式显示在屏幕。四、实验任务分析与算法分析(软件实验)或实验电路及连线(硬件实验)实验及报告要求:)要求画出完整的程序流程图。)根据流程图和部分提示代码,编写完整的汇编代码源文件(特别是以上红字部分),并存入合适目录,要求补充写出所有未注释的伪指令和指令的注释;)编译、连接生成可执行文件,分别在和Emu8086 下调试该可执行文件,给出程序运行时的各段地址(?,?)及两个子程序入口的IP; 试改变加数和被加数,如何从内存中观察结果的变化?总结子程序格式及其调用方法;结合本程序说明宏调用与子程序的区别。)写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。)实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法、汇编指令及汇编语言编程方法、微机原理学习方法作出总结。实验任务 1.将两个多位十进制数相加。要求被加数、加数均以 ASCII 码形式各自按高位高地址的规律分别顺序存放在以 DATAl 和 DATA2 为首的 5 个内存单元中 (低位在前 ),结果送回结果变量 DATA3 处,并屏幕显示结果。算法分析:定义两个加数,并分别存至两个变量之中;分别取变量中的对应万千百十个位上的数,由ASCII 码转换成数值后,对应位相加(使用带进位的加法命令),得到的数值保存至结果变量的对应位上,并调用DOS 屏幕显示字符功能显示。功能: 将被加数和加数分别显示,接着运行加法运算,然后将结果显示出来。算法说明:定义数据段: 定义被加数和加数, 且要使其用ASCII 码以十六进制之间的转换;定义堆栈段,并给SP_TOP 单元赋初值0;定义代码段,并将源代码放在里面首先,编写主程序;接着,编写显示、回车换行和加法运算的子程序。程序结束。所用到的寄存:AX 、 SS 、 CS 、DS 、 ES、SI、 SP、 DI-2-五、程序说明(预习)-3-六、源程序清单及其每句的注释1.没有键盘录入的源程序CRLFMACRO;回车换行宏定义MOV AH,02MOVDL,0DHINT 21HMOV AH,02MOVDL,0AHINT 21HENDMDATASEGMENT;数据段DATA1DB35H,34H,33H,32H,35H ; 代表 12345DATA2DB 30H,32H,34H,36H,38H;代表 86420DATA3DB6 DUP(0), $CARYDB0DATAENDSSTACKSEGMENT STACK;堆栈段STADB64 DUP(0)STACK_TOPDB0STACKENDSCODESEGMENT;代码段ASSUME CS:CODE , DS:DA TA ,ES:DA TA , SS:STACKSTART:; 程序开头必须要有的五条指令MOVAX, DA TAMOVDS, AX;设置数据段MOVAX, STACKMOVSS, AX;设置堆栈段LEASP, STACK_TOP;设置栈顶指针;-; 程序的中间部分LEABX,DA TA1;加数 1 送至 BX ,传至子程序 DISP 的形参CALLDISP; 调用显示字符串子程序,将第一个加数显示到屏幕LEABX,DA TA2;加数 2 送至 BX ,传至子程序 DISP 的形参CALLDISP; 调用显示字符串子程序,将第一个加数显示到屏幕LEABX, DA TA1;加数 1 送至 BXMOVSI,0;定义指针 SI 依次指向变量单元的下一个数据,相当指针MOVCX,5;设置循环次数 5NEXT1: SUBBYTE PTR BXSI,30H; 将 BX 里面的对应存储单元的字符串ASCII 码转换为对应二进制-4-INCSI;指针自加一LOOPNEXT1;循环执行LEABX, DA TA2;加数 1 送至 BXMOVSI,0;定义指针 SI 依次指向变量单元的下一个数据,相当指针MOVCX,5;设置循环次数 5NEXT2: SUBBYTE PTR BXSI,30H;将 BX 里面的对应存储单元的字符串ASCII 码转换为对应二进制INCSI;指针自加一LOOPNEXT2;循环执行CLC;清屏CALLADDC;调用加法子程序LEADX, DA TA3; 调用 DOS 功能 09 号,显示字符串,把最终结果显示到屏幕上MOVAH,9INT21H;-; 程序结束必须要有的两条指令MOVAX, 4C00H;INT21H;-;显示字符串子程序DISPPROC; 子程序定义MOVSI,5DSP:MOVAH, 2; 送显示功能号MOVDL,BX+SI-1 ; 显示字符串中一字符INT21H; DOS INT 21 功能调用DECSI;修改偏移量CMPSI,0JNZDSPCRLF;宏调用RETDISPENDP;加法子程序ADDCPROC; 子程序定义LEASI,DA TA1;加数 1 有效偏移地址送至SILEADI,DA TA2; 加数 2 有效偏移地址送至DILEABX, DA TA3; 结果变量的基地址送至BXADDBX,5; 设置相加次数MOVCX,5;设置循环次数-5-AD:MOVAL,BYTE PTRSI;指针 SI 指向的内存单元的内容转换类型属性送至ALADCAL,BYTE PTRDI;指针 SI 指向的内存单元的内容转换类型属性相加后送至ALAAA;加法十进制调整JCSETCARY;判断是否进位,是跳至SETCARYMOVCARY ,0;否,进位变量置 0JMPNEXT;无条件跳转 NEXTSETCARY:MOV CARY ,1; 进位变量置 1NEXT:ADDAL,30H;AL 中数据进行 ASCII码调整MOVBYTE PTR BX,AL ;将得到的 AL 最终结果送至 BX 基地址对应的内存区INCSI;修改偏移量INCDIDECBXLOOP AD; 循环执行CMPCARY,1; 判断进位变量是否为 1JZCAY;是,跳转至 CAYMOV BYTE PTR BX,20H ;否则退格JMPEXITCAY:MOVBYTE PTR BX,31H;是,置 1EXIT:RETADDCENDPCODEENDSENDSTART; 最后一行要按回车键2.带键盘录入的源程序; 将 AX 中的三位数拆为三个 BCD 码 , 并存入数据段 BCD0 开始的三个单元DATASEGMENT;数据段INSTR1 DB 6,0,6 DUP(0); 定义被加数 ASCII 变量INSTR2 DB 6,0,6 DUP(0); 定义加数 ASCII
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号