实验一 DEBUG的使用.doc_第1页
实验一 DEBUG的使用.doc_第2页
实验一 DEBUG的使用.doc_第3页
实验一 DEBUG的使用.doc_第4页
实验一 DEBUG的使用.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

实验一 DEBUG的使用实验目的:1学习使用DEBUG程序的各种命令。2掌握8088/86指令系统-算数指令。3掌握用DEBUG调试自编程序的方法。4掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。5掌握内存操作数及寻址方法。6掌握汇编语言伪操作:BYTE PTR,WORD PTR。内容及步骤:一、DEBUG 命令使用:1、 敲 DEBUG 进入 DEBUG 环境,显示提示符 _ 。2、 用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。3、 用命令 E100 30 31 32 3F 将30H3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?4、 用命令 F100 10F A 将A的ASCII码填入内存,用D命令查看结果。5、 用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。6、 用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。7、 用R命令将AX,BX内容改写为1234H及5678H。8、 用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H(4)1284H,5678H(5)A758,347FH二、8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOVAX,1234MOVBX,5678XCHGAX,BXMOVAH,34MOVAL,56MOVCX,75ABXCHGAX,CX2)用U命令检查键入的程序,特别注意左边的机器码。3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。2、加减法指令:1)用A命令在内存200H处键入下列内容:MOVAH,34MOVAL,2EADDAL,AHSUBAL,78MOVCX,1234MOVDX,5678ADDCX,DXSUBCX,AXSUBCX,CX2)用U命令检查键入的程序及对应的机器码。3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。思考题: 这次运行还是打入T,行不行?如何单步运行上述小程序?用R命令检查一下IP的内容。注意T命令与IP的关系。3、带进位加减法:1)用A命令在内存300H处键入下列内容,并用U命令检查:MOVAH,12MOVAL,89MOVCH,56MOVCL,98ADDAL,CLADCAH,CHMOVDH,A7MOVDL,58SUBDL,7FSBBDH,342)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。4、BCD码加减法1)内容:MOVAL,58ADDAL,25DAA2)要求:用A 命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。三、内存操作数及各种寻址方式使用: 1)用A命令在内存400H处键入下列内容,并用U命令检查:MOVAX,1234 MOV1000,AXMOVBX,1002MOVBYTE PTRBX,20MOVDL,39INCBXMOVBX,DLDECDLMOVSI,3MOVBX+SI,DLMOVBX+SI+1,DLMOVWORD PTRBX+SI+2,28462)用T命令逐条运行这些指令,每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。注意:D命令显示结果中右边的ASCII字符及双字节数存放法。思考题: 有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。 四、DEBUG下汇编运行程序方法用A命令汇编程序,编程完成将DS:1000开始的10个字节的内存单元的内容相加,并把相加结果存放在DS:200A 内存单元中,用DEBUG调试运行该程序,并察看运行结果。内容: MOV CX,0AH MOV AL,0 MOV BX,1000LL: ADD AL,BX INC BX DEC CX JNZ LL MOV BX,AL INT 3步骤:1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入JNZ指令时LL用实际地址值代替。2)用U命令检查键入的程序及对应的机器码。3)用E1000 01 02 03 04 05 06 07 08 09 0A将1000H开始的前10个内存单元的内容修改为01,02,03,04,050A,用D命令查看修改结果。4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。5)用F2000l0A 02 03 04 05 0B 将1000H开始的10 个内存单元的内容修改为02,03,04,050B。用D命令查看修改结果。6)用G=100 全速运行上述小程序,用D1000 100F 查看运行结果。思考题: 可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行的首地址?实验报告:1、列出8088常用指令练习部分的逐条运行记录。2、列出DEBUG下调式运行小程序的运行步骤和运行结果。3、回答思考题。附:DEBUG 使用:1、打 DEBUG 进入 DEBUG,显示提示苻 _ 。2、退出DEBUG命令:Q3、显示内存命令:D 起始地址 结束地址4、修改内存命令:E 起始地址,连续修改打空格键。打回车键退出E命令。5、检查寄存器命令:R标志位显示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPEPODFDNUPIFEIDI6、修改寄存器命令:R 寄存器名7、小汇编命令:A 起始地址,不输入指令打回车键退出A命令。8、反汇编命令:U 起始地址 结束地址9、文件命名命令:N 盘号:文件名10、读文件命令:L 内存地址11、写文件命令:W 内存地址10、读扇区命令:L 内存地址 盘号(0-A:,1-B:) 扇区号 扇区数11、写扇区命令:W 内存地址 盘号 扇区号 扇区数12、运行命令:G=起始地址 结束(断点)地址13、单步命令:T=起始地址 运行指令数,进入子程序内部。14、单步命令:P=起始地址 运行指令数,不进入子程序内部。15、内存搬家命令:M 起始地址 结束地址 目的地址实验二 数码转换程序实验目的:1、掌握二进制和十进制数转换程序的编制和调试。2、掌握批处理文件的编制及使用。3、熟悉双字节乘法的编程方法。实验内容及步骤:一、数码转换程序1、将一个十六位二进制数转换成十六进制数显示。CODESEGMENTASSUME CS:CODEBEGIN:MOV BX,1011000101010111BMOV CH,4MOV CL,4ROLT:ROL BX,CLMOV DL,BLAND DL,0FHCMP DL,9JLE LADD DL,7L:ADD DL,30HMOV AH,2INT 21HDEC CHJNZ ROTLMOV DL,HMOV AH,2INT 21HMOV AH,4CHINT 21HCODEENDSEND BEG进入汇编集成环境,输入、汇编、连接和运行此程序,观察结果。2、将一个十六位二进制数转换成十进制数并显示输出。 DATASEGMENTBUF0DW 2768HBUF1DB 5 DUP(0)BUF2 DW10000,1000,100,10,1DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATABEG:MOV AX,DATAMOV DS,AXMOV AX,BUF0MOV BX,OFFSET BUF1MOV SI,OFFSET BUF2MOV CX,5L:MOV DX,0DIV WORD PTRSIADD AL,30HMOV BX,ALINC BXADD SI,2MOV AX,DXLOOP LMOV AH,9MOV DX,OFFSET BUF1INT 21HMOV AH,4CHINT 21HCODEENDSEND BEG进入汇编集成环境,输入、汇编、连接和运行此程序,观察结果。二、自动汇编,连接及转换的批处理文件:1、用EDIT或COPY CON ALK.BAT命令将下列程序输入:echo offmasm %1;echo if you donot link,strike Ctrl-Break for quit;and either:pauselink %1;del *.objecho if the file is .exe,pleas strike Ctrl-Break for quit。and either:pauseexe2bin %1、exe %1、comdel %1、exe2、利用ALK.BAK文件汇编连接二个以前通过的源文件(COM型及EXE型)。三、双字节乘法程序:dispmacromessleadx,messmovah,9int21hendmstacksegmentstackdb256 dup(0)stackendsdatasegmentbufdb7db?db15 dup(?)messadbpleas input number A ! :$messbdb0dh,0ah,pleas input number B ! :$linefddb0dh,0ah,$bcddd1000000000,100000000,10000000dd1000000,100000,10000,1000dd100,10,1dataendscodesegmentassumecs:code,ds:data,ss:stackmainprocfarpushdsxorbx,bxpushbxmovax,datamovds,axdispmessacallgetpushbxdispmessbcallgetdisplinefdpopaxmulbxmovcx,10leasi,bcdleadi,buflop:callbineclooplopmovbyte ptrdi,$dispbufretmainendpgetprocleadx,bufmovah,0ahint21hleasi,buf+1xorbx,bxmovah,bhmovcl,sinext:incsiaddbx,bxmovdx,bxaddbx,bxaddbx,bxaddbx,dxmoval,siandal,0fhaddbx,axdeccljnenextretgetendpbinecprocmovbl,0again:subax,word ptrsisbbdx,word ptrsi+2incbljncagainaddax,word ptrsiadcdx,word ptrsi+2addbl,2fhmovdi,blincdiaddsi,4retbinecendpcodeendsendmain步骤:1、输入,汇编并连接此程序。2、在DOS下运行此程序,根据提示输入二个乘数,检查并记录结果。思考题: 本程序的输入范围是多少?若超过范围,会产生什么现象?试一试!四、根据上题,按下列要求选做一个修改程序:1、带符号数16位乘法。2、无符号数16位乘法,输入超过范围时能告警并要求重输。实验报告:1、列出实验记录。2、列出调试通过程序清单并加注释。3、回答思考题.4、写出心得体会。实验四 子程序实验目的: 1、掌握一般子程序的调用和返回,熟悉定义过程的伪指令。2、掌握利用堆栈传递参数的子程序调用方法。3、掌握子程序递归调用方法。实验内容及步骤: 一、利用堆栈传递参数的子程序调用。(求累加和)stacksegment stackdb256 dup(0)stackendsdatasegmentary1db1,2,3,4,5,6,7,8,9,10count1equ$-ary1sum1dw?ary2db10,11,12,13,14,15,16,17,18count2equ$-ary2sum2dw?dataendsmainsegmentassumecs:main,ds:data,ss:stackstartprocfarpushds;PSP段基址压栈xorax,axpushax;双字节0压栈movax,datamovds,axmovax,count1pushaxleaax,ary1pushaxcallfar ptr summovax,count2pushaxleaax,ary2pushaxcallfar ptr sumret;返回DOSstartendpmainendsprocesegmentassumecs: procesum proc farmovbp,spmovcx,bp+6movbx,bp+4xorax,axadn:addal,bxadcah,0incbxloopadnmovbx,axret4sum endpproceendsendstart步骤:1、输入,汇编并将此程序连接成EXE文件。2、用DEBUG的断点命令和T命令运行此程序,观察并记录每次过程调用及进出栈指令前后(带;的语句)的SP和堆栈内容。3、记录最后结果:SUM1,SUM2的段及偏移地址和它们的内容。思考题:1、sum子程序结尾为什么要用 ret 4返回?2、什么是程序段前缀PSP?二、完成一个四位十进制数相加的程序设计,形式为:2345+7869=?要求:1 设计一个子程序,完成从键盘输入一个四位十进制数的操作。 2 设计一个子程序,完成将缓冲区数送屏幕显示功能。 3 设计一个子程序,完成两个数相加操作。三、子程序递归调用(求阶乘)。stacksegment stackdb100h dup(?)stackendsdatasegmentresuldw?dataendscodesegmentmainprocfarassumecs:code,ds:data,ss:stackstart:pushdssubax,axpushaxmovax,datamovds,axmovax,5callfactmovresul,axretfactprocandal,aljneiiamoval,1retiia:pushaxdecalcallfactx2:popcxmulclretfactendpmainendpcodeendsendstart步骤:1、将程序输入,汇编并连接成EXE文件。2、用DEBUG的断点和T命令检查并记录每层递归嵌套过程的堆栈和AL内容。3、修改源程序,将阶乘数 3 改为本程序的最大允许值(是多少?),重新汇编连接之。用 DEBUG运行并记录RESUL单元内容。4、若要在DOS命令下直接运行并显示阶乘结果(16进制形式),试修改程序并调试运行。(机动)四、自编程序:用递归方法编程实现两个正整数M和N相乘。编程说明: 正整数M和N相乘可看作如下形式的递归函数: MULT(M)=若设N=15,M=4,则MULT(4)= MULT(3)+15= MULT(2)+15+15=MULT(1)+15+15+15=15+15+15+15=60=3CH实验报告:1、列出实验记录。2、列出自编程序清单并加注释。3、回答思考题.4、写出心得体会。实验五 宏指令及宏调用实验目的: 1、 熟悉宏定义的一般结构。2、 掌握宏指

温馨提示

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

最新文档

评论

0/150

提交评论