文档详情

实验一 顺序程序的设计.docx

发布:2017-06-17约2.16千字共5页下载文档
文本预览下载声明
实验一顺序程序的设计实验目的学习8086/8088指令系统中一些基本指令的用法和程序设计的基本方法;熟悉在PC机上建立、汇编、连接、调试和运行8086、8088汇编语言程序的全过程。实验内容设a、b、c、d四个数分别以单字节压缩BCD码形式存放在内存NUM开始的四个单元。计算(a+b)-(c+d)并将结果放在Y1单元,将结果在屏幕上显示出来。这里给出了几组数据:a=09,b=06,c=04,d=07a=38,b=41,c=29,d=34a=70,b=23,c=42,d=41a=63,b=73,c=62,d=50实验原理这类程序完全按照顺序执行的指令序列,往往用于解决一些简单的算术逻辑运算,无需机器进行判断,需恰当地选择计算方法,使程序设计简练。四.代码展示DSEG SEGMENTNUM DB 01H,01H,01H,01H //初始化Y1 DB ?DSEG ENDSSSEG SEGMENT PARA STACKDB 20 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AX//计算a+bMOV AL,NUMADD AL,NUM+1DAAMOV CL,AL//计算c+dMOV AL,NUM+2ADD AL,NUM+3DAA//计算(a+b)-(c+d)SUB CL,ALMOV AL,CLDASMOV NUM+4,AL//输出数值部分MOV BL,ALAND AL,0F0HMOV CL,4SHR AL,CLADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,BLAND AL,0FHADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AX,4C00HINT 21HCSEG ENDSEND START实验思考题用哪些DEBUG的命令可以查看、改变a,b,c,d的值?用于修改存储单元内容的命令E(Enter Command)可以用于修改a,b,c,d,修改方式:E DS:0000 {0}H {1}H {2}H {3}H调试程序时,你将断点设置在什么地方?简要地予以说明。将断点设置在初始化结束后,计算c+d后,以及计算(a+b)-(c+d)后。以第二题为例1.初始化结束后的断点可以看到此时地址位NUM—NUM+4的存储器单元已被初始化为01,01,01,01此时,将我们想要输入的a,b,c,d用第一题的方法输入进去可以看到a,b,c,d已经输入进去。2.观察计算c+d后的断点在这个断点中,我们可以同时观察a+b(CL),c+d(AL)的值是否正确,可以看出,这两个值都是正确的。3.观察计算(a+b)-(c+d)后的断点这个时候,AL、CL均为(a+b)-(c+d)的值,计算无误。之后输出数据。若a=90,b=34,c=33,d=44a=12,b=19,c=25,d=33设置合适的断点,观察结果,说明错误的原因,并改进程序使结果正确。运行第一组数据时并没有出错,但运行第二组数据时,输出结果与预期结果不同。按照第二题中所设置的断点检查初始化是否正确检查a+b(CL),c+d(AL)是否计算正确检查(a+b)-(c+d)的值是否正确可以看到这里的计算结果并不正确,观察CL可知,由于使用的是无符号数,DOS并没有正确的显示负数。稍微修改了一下代码,使程序能够输出负数。修改后的代码:DSEG SEGMENTNUM DB 12H,19H,25H,33HY1 DB ?DSEG ENDS //初始化SSEG SEGMENT PARA STACKDB 20 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXMOV AL,NUMADD AL,NUM+1DAA //计算a+bMOV CL,ALMOV AL,NUM+2ADD AL,NUM+3DAA //计算c+d//比较(a+b)与(c+d)的大小,决定运算及显示方案CMP CL,ALJL SEG1 //如果a+b比较小,则跳转到SEG1SUB CL,ALMOV AL,CLDASMOV NUM+4,ALJMP SHUCHU //跳转至数值输出SEG1:SUB AL,CLDASMOV NUM+4,AL//在屏幕上显示“-”MOV AH,02HMOV DL,2DHINT 21HMOV AL,NUM+4JMP SHUCHU //在屏幕上显示数值部分SHUCHU:MOV BL,ALAND
显示全部
相似文档