您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 微机原理及汇编语言程序设计实验指导书
《汇编语言程序设计》实验指导书1微机原理及汇编语言程序设计实验指导书计算机实验中心《汇编语言程序设计》实验指导书2目录实验一DEBUG的使用………………………………………3实验二数制转换程序……………………………………8实验三数组排序程序……………………………………10实验四数据的输入与输出程序…………………………11实验五子程序设计………………………………………12实验六宏调用程序设计…………………………………14《汇编语言程序设计》实验指导书3实验一DEBUG的使用【实验目的】1.学习使用DEBUG调试程序的各种命令。2.掌握8088/8086指令系统---数据传送指令、算术指令。3.掌握用DEBUG调试程序的方法。4.掌握8088/8086CPU寄存器的用途和存储器组织及它们之间的关系。5.掌握内存操作数及寻址方法。6.掌握汇编语言伪操作:BYTEPTR,WORDPTR。7.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。8.掌握数据传送、算术运算、BCD码调整和循环指令的用法,掌握字符显示的方法。【实验性质】验证性实验(学时数:2H)【实验内容】一、DEBUG命令的使用1.敲DEBUG进入DEBUG环境,显示提示符'_'。2.用命令D10010F观察内存中的16进制码及屏幕右边的ASCII字符。3.用命令E100303132……3F将30H~3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?4.用命令F100L0F'A'将'A'的ASCII码填入内存,用D命令查看结果。5.用命令F11011F41将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/8086常用指令练习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,1234《汇编语言程序设计》实验指导书4MOVDX,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,1234MOV[1000],AXMOVBX,1002MOVBYTEPTR[BX],20MOVDL,39INCBXMOV[BX],DLDECDLMOVSI,3MOV[BX+SI],DLMOV[BX+SI+1],DLMOVWORDPTR[BX+SI+2],28462)用T命令逐条运行这些指令,每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。注意:D命令显示结果中右边的ASCII字符及双字节数存放法。思考题:有关指令中BYTEPTR及WORDPTR伪操作不加行不行?试一试。《汇编语言程序设计》实验指导书5四、DEBUG环境下汇编运行程序方法用A命令汇编程序,编程完成将DS:1000开始的10个字节的内存单元的内容相加,并把相加结果存放在DS:100A内存单元中,用DEBUG调试运行该程序,并察看运行结果。内容:MOVCX,0AHMOVAL,0MOVBX,1000LL:ADDAL,[BX]INCBXDECCXJNZLLMOV[BX],ALINT3步骤:1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入JNZ指令时LL用实际地址值代替。2)用U命令检查键入的程序及对应的机器码。3)用E10000102030405060708090A将1000H开始的前10个内存单元的内容修改为01,02,03,04,05……0A,用D命令查看修改结果。4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。5)用F2000L0A02030405……0B将1000H开始的10个内存单元的内容修改为02,03,04,05……0B。用D命令查看修改结果。6)用G=100全速运行上述小程序,用D1000100F查看运行结果。思考题:可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行的首地址?五、两个多位十进制数相加要求:将下面程序在汇编平台下,完整地进行汇编、连接、运行,然后用DEBUG软件调入可执行文件到内存,用反汇编命令查看实际程序及数据区内容,用t命令逐条执行,以观察各寄存器及数据区内存的数据变化情况,然后使用p命令和g命令执行,以观察执行过程有何特点。将两个5位十进制数相加,要求被加数(本题选47193)和加数(本题选28056)均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回以DATA3为首的5个内存单元中(低位在前),并显示相加的结果。实验程序和结果如下:DATASEGMENTDATA1DB33H,39H,31H,37H,34H;存放被加数47193,ASCII码形式,低位在前DATA2DB36H,35H,30H,38H,32H;存放加数28056,ASCII码形式,低位在前DATA3DB5DUP(?);留出5个存放结果的单元DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,5;循环次数置5,5个位要相加5次MOVSI,0;SI放地址位移量,每个数的第一字节地址位移量为0CLC;CF清0,防止第1个字节相加时ADC指令多加CF中可能的1NEXT:MOVAL,DATA1[SI];取被加数一个字节送AL,DATA1偏移地址+SI为有效地址ADCAL,DATA2[SI];AL+加数对应字节+CF(低位相加时可能的进位)结果送AL《汇编语言程序设计》实验指导书6AAA;AL中两字节相加的和调整成非压缩的BCD码,进位在CF中MOVDATA3[SI],AL;结果送入DATA3对应字节单元中INCSI;地址位移量加1指向高一位字节单元LOOPNEXT;5次未到,继续循环MOVSI,5;显示5个位,SI中的数既是循环次数又作地址位移量DISP:ADDDATA3[SI-1],30H;将结果从高位单元开始把非压缩的BCD码变成ASCII码MOVDL,DATA3[SI-1];将ASCII码送DL以满足2号功能调用的规定要求MOVAH,2;功能号送AHINT21H;调用2号功能,显示一位数字DECSI;次数减1JNZDISP;5次未到,继续循环MOVAH,4CH;功能号送AHINT21H;调用4CH号功能,返回DOSCODEENDSENDSTART运行结果:75249思考题:1.上述程序只显示了相加的结果,没有显示被加数和加数,如果在上述程序的基础上将显示格式改为47193+28056=75249,则程序如何修改?2.上述程序没有考虑运算结果最高位有进位的情况,如果考虑可能产生的进位,则要显示完整的结果,程序如何修改?(提示:INC和LOOP指令均不影响CF)【报告要求】1.列出8086常用指令练习部分的逐条运行记录。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盘号:文件名《汇编语言程序设计》实验指导书710.读文件命令:L内存地址11.写文件命令:W内存地址10.读扇区命令:L内存地址盘号(0--A:,1--B:)扇区号扇区数11.写扇区命令:W内存地址盘号扇区号扇区数12.运行命令:G=起始地址结束(断点)地址13.单步命令:T=起始地址运行指令数,进入子程序内部。14.单步命令:P=起始地址运行指令数,不进入子程序内部。15.内存搬家命令:M起始地址结束地址目的地址《汇编语言程序设计》实验指导书8实验二数制转换程序【实验目的】1.掌握汇编语言程序结构。2.掌握建立、汇编、链接、调试和运行汇编程序的过程。3.掌握DOS功能调用INT21H02号功能字符显示输出方法。4.掌握INT21H4C号功能返回系统的方法。【实验性质】验证性实验(学时数:2H)【实验内容】一、完成一个十六位二进制数到十六进制数的转换操作程序设计。参考程序:;将二进制数一边转换成十六进制数一边显示(用2号功能调用)DATASEGMENTBUFADW1111001000110100B;F234HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVDX,BUFAMOVCH,4;循环控制十六进制数显示位数MOVCL,4ROTATE:ROLDX,CL;循环左移4位,将高位十六进制数移到低位MOVBX,DX;保护移动后的数ANDDX,0FH;屏蔽掉高位保留该低位数CMPDL,9JGLADDDL,30H;转换成ASCII码MOVAH,2;送显示INT21HJMPNEXTL:ADDDL,37HMOVAH,2INT21HNEXT:MOVDX,BXDECCHJNZROTATEMOVAH,4CHINT21HCODEENDSENDSTART二、把上题改造成COM文件的编程格式,汇编、链接和运行调试该程序。参考程序:CODESEGMENTASSUMECS:CODEORG100H《汇编语言程序设计》实验指导书9BEG:JMPSTARTBUFADW0001001000110100B;1234H(用户程序数据区)START:MOVDX,BUFAMOVCH,4;循环控制十六进制数显示位数MOVCL,4ROTATE:ROLDX,CL;循环左移4位,将高位十六进制数移到低位MOVBX,DX;保护移动后的数ANDDX,0FH;屏蔽掉高位保留该低位数CMPDL,9JGLADDDL,30H;转换成ASCII码MOVAH,2;送显示INT21HJMPNEXTL:ADDDL,37HM
本文标题:微机原理及汇编语言程序设计实验指导书
链接地址:https://www.777doc.com/doc-2469975 .html