您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 实验二数字处理程序(一)
教学实验课程名称___微机原理及应用实验___学生学院信息工程学院专业班级学号学生姓名指导老师乐金松2016年05月11日实验二数据处理程序(一)实验目的:1、进一步学习、掌握汇编程序调试方法2、弄清子程序调用和返回过程3、通过实验调试乘法、除法程序,弄清多字节乘除法程序的基本算法和程序设计方法实验内容:1、源程序的编辑2、源程序的剪辑、编译、链接3、汇编程序调试,完成相关数据的记录和分析实验步骤:一、程序剪辑和编辑1、下面是一段主程序模板,请将L8086软件包中的乘法和除法程序的主体部分拷贝粘贴在指定的位置,以MAIN.ASM文件名保存;-------------------------------------------------------------------------STACKSEGMENTSTACK'STACK'DB1024DUP(0)STACKENDS;----------------------------------------------------------------------------;definedatasegmentDATASEGMENT;-------------------------------------------;地址分配R0DW(?);0000HR1DW(?);0002HR2DW(?);0004HR3DW(?);0006HR4DW(?);0008HR5DW(?);000AHR6DW(?);000CHR7DW(?);000EH;----------------------------------------------------------------------------------XDD12345678H;0010H~003HYDD87654321H;0014H~0017HZDD55555555H;0018H~001BH;------------------------------------------------------------------------------------buffer0DB(?);001CHbuffer1DB(?)buffer2DB(?)buffer3DB(?)buffer4DB(?)buffer5DB(?)buffer6DB(?)buffer7DB(?);----------------------------------------------------DATAENDS;---------------------------------------------------------;definecodesegmentPROGRAMSEGMENTASSUMECS:PROGRAM,DS:DATA,SS:STACK;*******************************************************MAINPROCFARSTART:PUSHDS;returnDOSstandardprogramMOVAX,0PUSHAXMOVAX,DATA;setDSMOVDS,AX;--------------主循环程序-------------------------------------------DO_WAIT:CALLBMULCALLBDIV;CALLKEY_SCAN;CALLBCTD;CALLDELAYJMPDO_WAITRETMAINENDP;----------------以下为过程子程序------------------------------------;===============R2R3*R6R7=R4R5R6R7==================BMULPROCNEAR;……BMULENDP;------------R4R5R6R7/R2R3=R6R7--------------------BDIVPROCNEAR;……BDIVENDP;---------------二翻十程序--------------------------------BCTDPROCNEARRETBCTDENDP;-----------------软件延时----------------------------------DELAYPROCNEARRETDELAYENDP;-------------------键盘扫描--------------------------------KEY_SCANPROCNEARRETKEY_SCANENDP;------------------------------------------------------------PROGRAMENDSENDSTART;---------------------------------------------------------------------------------------2、将程序编译连接成可执行文件。二、程序载入1、用DEBUG命令将程序载入到内存2、用反汇编U命令观察和记录以下信息:主程序起始地址:[145E:0000]主程序结尾地址:[145E:001E]乘法程序起始地址:[145E:0013]乘法程序结尾地址:[145E:005C]除法程序起始地址:[145E:005D]除法程序结尾地址:[145E:00B6]代码段段地址:CS=145E用户数据段段地址:DATA=145B当前系统数据地段段地址:DS=140B乘法子程序入口地址:BMUL=145E:0013除法子程序入口地址:BDIV=145E:005D3、用R命令观察记录一下信息DS=145BES=140BSS=141BSP=03FA4、执行程序G0A回车,用D0命令观察并记录以下信息R0分得的单元地址:145B:0000~145B:0001R7分得的单元地址:145B:000E~145B:000FX分得的地址:145B:0010~145B:0013X双字数据存放的顺序:单元号地址:0010内容:0X78单元号地址:0011内容:0X56单元号地址:0012内容:0X34单元号地址:0013内容:0X12Y分得的地址:145B:0014~145B:0017Y双字数据存放的顺序:单元号地址:0014内容:0X21单元号地址:0015内容:0X43单元号地址:0016内容:0X65单元号地址:0017内容:0X87三、程序的调试1、调试乘法程序:1)程序执行到乘法子程序入口2)在入口参数输入:R2R3=10000006400R6R7=100000064003)执行程序到乘法程序RETF指令处,查看结果R4R5R6R7=0X00000000000010274)自行输入一组数据,复位IP=0,验证结果R2R3=600000600R6R7=500000500执行程序后:R4R5R6R7=0000000000001E002、调试除法程序:1)复位IP=0,将程序执行到除法子程序入口2)在入口信息输入数据:R4R5R6R7=10000R2R3=1003)程序执行到除法程序的RETF指令,用D0命令查看结R6R7=000064004)自选一组数据,自行验证除法程序R4R5R6R7=0000000000001E00R2R3=00000600执行程序后结果:R6R7=00000500四、编程,R0R1=X*Y/Z=R2R3*R6R7/R2R31)自行编写一段程序,调用乘法和除法程序,计算上式DO_WAIT:MOVAX,XMOVR3,AXMOVAX,X+2MOVR2,AXMOVAX,YMOVR7,AXMOVAX,Y+2MOVR6,AXCALLBMUL;第一断点MOVAX,Z;第二断点MOVR3,AXMOVAX,Z+2MOVR2,AXCALLBDIV;第三断点MOVAX,R7MOVR1,AXMOVAX,R6MOVR0,AXJMPDO_WAIT;第四断点2)执行程序,验证结果程序执行到第一断点:R2R3=34127856(即是0x12345678)R6R7=65872143(即是0x87654321)程序执行到第二断点:R4R5R6R7=A00905CDB870788D(即是0x09A0CD0570B88D78)中间结果正确吗?答:运行的中间结果正确,0x12345678*0x87654321=0x09a0cd0570b88d78程序执行到第三断点:R2R3=55555555(即是0x55555555)R4R5R6R7=A00905CDB870788D(即是0x09A0CD0570B88D78)程序执行到第四断点:R6R7=E21C1067(即是0x1CE26710)中间结果正确吗?答:运行结果正确0x09A0CD0570B88D78/0x55555555=0x1CE267103)自行修改数据段定义的X,Y,Z的值,执行程序验证结果X=1111hY=2222hZ=3333hR0R1=0000600B(即是0x0B60),运行结果正确
本文标题:实验二数字处理程序(一)
链接地址:https://www.777doc.com/doc-2458726 .html