《微机原理及应用实验报告_2.docx》由会员分享,可在线阅读,更多相关《微机原理及应用实验报告_2.docx(17页珍藏版)》请在第一文库网上搜索。
1、CMOOUBiKtHA1工NCN6Nq实验报告课程名称实验日期学生专业学生学号学生姓名教师姓名成绩南京理工大学机械工程学院实验一DEBUG命令及其操作一、实验目的1 .熟练掌握debug的常用命令,学会用debug来调试程序。2 .深入了解数据在存储器中的存取方法及堆栈中数据的压入与弹出。3 .掌握各种寻址方法以及简单指令的执行过程。二、实验要求1 .实验前要作好充分准备,包括汇编程序清单、调试步骤、调试方法以及对程序结果的分析等。2 .本实验要求在PC机上进行。3 .本实验只要求在DEBUG调试状态下进行,包括汇编程序,调试程序,执行程序。三、实验内容实验内容1:学习用DEBUG调试工具进行
2、源程序的输入、汇编、调试和执行。答:1运行结果:2.小结debug常用命令及使用体会a汇编d显示内存单元内容e修改单元内存内容g执行命令t单步(或多步)调试n指定文件路径文件名(含扩展名)U反汇编r查看寄存器值及修改1加载程序w写盘命令体会:实验内容2设AX=3000H,BX=5OOOH,请编一程序段将AX的内容和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。实验报告要求:1 .写出完成上述功能的程序段;.单步执行,并记录寄存器AX,BX及堆栈指针SP的值答:R-30MB-50pS-1379ES-13791379:010753cx-0Dx-
3、eeSS-1379CS-1379PUSHSP-FFECp-ee?BP-W0NUUPEIB-SES-1379379:010858B-5ES-1379379:8109SBBX-30ES-1379379:ei(MCD20B-300ES-13797:107290CX-MDXTM0SS-1379C8-1379POPAXCX-DX-MMSS-1379CS-1379POPBXc-eeWTeM-1379C8-1379INTC-0DXS8-1379CSNOPSP-FFESIP-172SP-FFEAIP-1MSP-FFECIPVt9SP-FFEBIP-*1MbnuSpbi8NUeJpiM8P1iSiNII实验内容
4、3设DS=当前段地址,BX=0300H,S1=0002H,请用DEBUG的命令将存储器偏移地址300H304H连续单元装入OAH,OBH,OCH,ODH,OEHo在DEBUG状态下送入下面的程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?A1OO;给各内存单元赋值Movdi,0300Movdx,0aMovex,51oopkmovdi,dxIncdiIncdx1oopIoop1程序清单如下:寻址方式和AX的内容X0S=13?9ES13,7933911f110000CX=00SS=13,79ADDP=DOCIJME-1JS:X1deb11Fa1131_
5、379(10013=006=010800B10E0ii0=011315t8rmoVrmoVmoVmoVrmoVrmovrmovrmovmovJbx.0300SI,0002cx-Jbx:axa034ax,0304Ja:XJItTjbXJaxj000iCbx:JaxCbxJCSIJax。tbxJESIJ一tMOVBX,0300立即寻址MOVMOVSI,0002立即寻址AX,BX寄存器寻址AX:0300MOVAX,0304H立即寻址AX:0304MOVAX,0304H存储器直接寻址AX:ds:0304内存单元的内容OEHMOVAX,BX寄存器间接寻址AX:ds:0300内存单元的内容OAHMOVAX
6、,OOO1IBX基址相对寻址AX:ds:0301内存单元的内容OBHMOVAX,BXJSI基址变址寻址AX:ds:0302内存单元的内容OCHMOVAX,0001IBXJISI基址变址寻址AX:ds:0303内存单元的内容ODH实验内容4设AX=OoO2H,编写程序将AX的内容乘10,要求用移位的方法完成。写出实现上实验报告要求:1 .述功能的程序段;2 .单步执行程序,记录每条指令的机器码及相关寄存器的内容注意:左移指令用SH1,而不能使用SA1AIOOMovax,2机器码:b80200ax:0002dx:0000c!:00Movdx,0机器码:baOOOOax:0002dx:OOOOc1:
7、00Sh1axJ机器码:dieOax:0004dx:0000c1:00Movdx,ax机器码:O1doax:0004dx:0004c1:00Movc1,2机器码:b102ax:0004dx:0004c1:02Sh1ax,c1机器码:d3eax:0010dx:0004c1:02Addax,dx机器码:O1dOax:0014dx:0004c1:02Int20机器码:cd20ax:0014dx:0004c1:02实验二简单程序的编写及汇编连接一、实验目的1 .熟练掌握编写汇编语言源程序的基本方法和基本框架。2 .学会编写顺序结构、分支结构和循环结构的汇编程序,掌握宏定义与宏调用的方法。3.掌握程序中
8、数据的产生与数输出的方法。4.熟悉建立源文件,进行汇编和连接的全过程,并对程序进行调试。二、实验要求1 .实验前准备分析题目,将程序中的原始数据、中间结果和最终结果的存取方式确定好。写出算法或画出流程图。写出源程序。对程序中的结果进行分析,并准备好上机调试的过程。2 .本实验要求在PC机上进行。3 .汇编过程中出现问题,可用DEBUG进行调试。三、实验内容1 .实验内容1编辑源程序(参考程序见下),建立.ASM文件;用MASM程序汇编,生成.OBJ文件;查看.1ST文件的内容用1INK程序链接,生成.EXE文件;使用DEBUG命令将.EXE文件调进内存,执行后查看程序运行结果;使用DEBUG命
9、令,检查各段在内存当中分配情况。参考程序:;exercize21datasegmentorg0200hbufferdwO,1,-5,10,256,-128,-100,45,6,3,dw-15,-67,39,4,20,-1668,-32766,32765,-525,dw300countequ($-buffer)/2maxdw?dataendsstacksegmentstack,stackdbIOOdup(s)stackendscodesegmentparacodeassumecs:code,ds:data,ss:stackstaprocfarpushdsxorax,axpushaxmovax,d
10、atamovds,ax1easi,buffermovex,countdecCXmovax,sichkmax:addsi,2cmpsi,axj1enextmovax,sinext:1oopchkmaxmovmax,axretstaendpcodeendsendsta答:I.把待汇编的程序放在存放汇编、链接程序的文件夹里打开汇编程序输入待汇编的程序名字,以默认配置生成Obj文件,再打开链接程序输入待链接的程序名字以默认配置生成exe文件2 .执行前后buff数据数据块不变max执行前数据为OoOoH执行后为7ffdH3 .顺利实验2:;disp1ayw0-9n100timesstacsegment
11、stackstackdb100dup(s)stacendscodsegmentparacodeassumecsxod,ss:stacstaprocfarpushdsxorax,axpushaxmovex,100movb1,0goon:pushexmovah,2movdi,Odhint21hMovah,2Movd1,0ahInt21hmova1,b1inca1daaanda1,Ofhmovb1,a1ora1,30hmovd1,a1movah,2int21hmovdx,5I1:movex,Offffhagain:1oopagaindecdxjnz11PPCX1oopgoonretstaendpco
12、dendsendsta作业:编程并且在计算机上调试。用汇编语言编写一个加法程序:1234+5678请用ASCII码的形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加的结果显示输出。假设有一组数据:5,-4,0,3,100,-51,,请编一程序,判断每个数是否大于0,等于0,还是小于0,并输出判断结果。即:11当x0y=Yo当x=011当x0SStaCksegmentdw32dup(?)sstackendsdatasegmentdata1db1234data2db5678data3db4dup(?)dataendscodesegmentassumecs:code,ss:sstac
13、k,ds:datasta:pushdsxorax,axpushaxmovax,datamovds,ax1easi,data11eadi,data21eabx,data3mova1,si+3movah,di+3anda1,Ofhandah,Ofhadda1,ahora1,30hmovbx+3,a1mova1,si+2movah,di+2anda1,Ofhandah,Ofhadca1,ahora1,30hmovbx+2,a1mova1,si+1movah,di+1anda1,Ofhandah,Ofhadca1,ahora1,30hmovbx+1,a1mova1,simovah,dianda1,Ofhandah,Ofhadca1,ahora1,30hmovbx,a1movex,4movah,2ha1:movd1,bxint21hincbx1oopa1retcodeendsendsta(2)sstacksegmentstack*stack,dw32dup(?)sstackendsdatasegmentbuffdb12,-23,5,-4,O,3,1OO,-51,3,-45,9,2dataendscountequ$-buffcodesegment