《汇编语言程序设计》实验指导书刘晓燕计算机与信息科学学院2009年5月目录实验一开发工具的使用........................................................................2实验二寻址方式(一):操作数寻址..................................................5实验三寻址方式(二):转移地址寻址..............................................8实验四字符串拷贝..............................................................................11实验五表格查找..................................................................................14实验六过程调用..................................................................................17实验七分类统计字符个数..................................................................20实验八查找电话号码..........................................................................21实验一开发工具的使用实验目的1.熟悉DOS操作系统;2.熟悉文本编辑器、编译器、连接器及调试器的使用。预习与实验要求1.预习实验指导书及教材的有关内容,了解debug常用的命令;2.熟悉文本编辑器、编译器、连接器及调试器的使用。3.了解汇编程序的基本结构4.实验前认真听讲,服从安排。尽可能独立思考并完成实验。实验设备与器材微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。实验原理DEBUG.EXE是DOS提供的用于调试可执行程序的工具软件,是汇编语言程序设计中常用的调试工具。在DEBUG环境下,不但可以调试经汇编、连接后生成的可执行程序,也可以编写简单的程序。DEBUG程序启动方法:在DOS提示符下键入:DEBUG[路径\]文件名↙Debug执行,并将指定文件装入内存,供调试。此时屏幕显示提示符“-”,说明计算机当前处于DEBUG的管理之下,可接受、并执行DEBUG命令。MASM和LINK程序是Microsoft公司的汇编程序和连接程序,汇编语言程序的上机过程如图1-1所示:图1-1:汇编语言程序上机过程实验内容熟悉文本编辑器、编译器、连接器及调试器的使用。了解汇编程序的基本结构,结合给出的示例程序eg01.asm练习汇编语言程序上机步骤。1.启动dos环境开始---运行---输入cmd或者所有程序---附件---命令提示符2.进入masm和link程序所在目录(1)键入masm所在盘符(2)cdmasm所在路径3.汇编程序:masmmyfile.asm4.连接程序:linkmyfile.obj5.调试程序:debugmyfile.exe(1)u反汇编(2)t4运行前4步对照反汇编结果或者是打开list文件观察ip寄存器内容查看cx寄存器内容(3)dds:0查看数据段从0开始的内容(4)des:0查看附加数据段从0开始的内容(5)t单步执行,查看cx寄存器内容myfile.asm编辑程序汇编程序连接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe(6)继续单步执行观察各寄存器变化情况(7)运行到incdi处时des:0查看附加数据段从0开始的内容(8)继续单步执行观察ip变化情况(9)继续单步执行观察ip变化情况(10)g1d运行到loop处时des:0查看附加数据段从0开始的内容(11)执行一次循环后再des:0观察附加数据段变化情况连续单步或者接第10步,输入t再输入g1d(12)g1f运行到程序结束,des:0观察附加数据段变化情况(13)q退出debug实验报告1.用文本编辑器输入示例代码,编译、连接;2.调试程序eg01.exe,写出程序运行的相关情况。将实验内容第5步所有要求查看的内容写出来思考题1.用debug的u指令反汇编和通过lst文件查看有什么差别?2.debug的t指令和g指令有哪些区别?附:示例程序eg01.asmdatasegment;数据段定义stringdbHappyNewYear!,0DH,0AH,'$'countdw17dataendsextrasegment;附加数据段定义new_stringdb17dup(?)extraendscodesegmentmainprocfarassumecs:code,ds:data,es:extrastart:movax,datamovds,axmovax,extramoves,axmovcx,countmovbx,offsetstringmovdi,0Next:movdl,[bx]movnew_string[di],dlincbxincdiloopNextmovah,4chint21hmainendpcodeendsendstart实验二寻址方式(一):操作数寻址实验目的1.掌握操作数的不同寻址方式;2.继续熟悉DEBUG调试程序。预习与实验要求1.复习教材的有关内容,回顾汇编语言程序中对操作数的7种寻址方式,回顾8086的实模式寻址;2.回顾汇编程序上机过程以及debug常用指令;3.回顾汇编程序的基本结构;4.实验前认真听讲,服从安排。尽可能独立思考并完成实验。实验设备与器材微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。实验原理计算机中的指令由操作码字段和操作数字段两部分组成,8086中与数据有关的寻址方式一共有7种,用来确定操作数地址从而找到操作数。1.立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里;2.寄存器寻址方式使用寄存器来存放要处理的操作数;3.其它5种寻址方式:直接寻址方式、寄存器间接方式、寄存器相对寻址方式、基址变址寻址方式、相对基址变址寻址方式,操作数都在除代码段以外的存储区中,在8086里,把操作数的偏移地址称为有效地址EA,这五种寻址方式分别对应五种计算EA的方法。4.有效地址可以由以下三种成分组成:位移量(Displacement)是存放在指令中的一个8位或16位数,但它不是立即数,而是一个地址。基址(Base)是存放在基址寄存器(BX或BP)中的内容。它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。变址(Index)是存放在变址寄存器(SI或DI)中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。这三种成分都可正可负,以保证指针移动的灵活性。它们任意组合使用,可得到不同的寻址方式。5.伪操作DB、DW、DD分别用来定义字节、字和双字变量。实验内容1.使用多种寻址方式读写内存变量。(1)定义字节变量,字变量,双字变量;(2)使用直接寻址方式访问这些变量;(3)采用寄存器间接寻址访问这些变量;(4)采用寄存器相对寻址访问这些变量;(5)采用基址变址寻址方式访问这些变量。2.定义字节变量,字变量,双字变量使用伪操作DB、DW、DD,示例:datasegment;数据段定义data_dbDB11h,22h,’a’,’b’data_dwDW1000h,2000h,3h,’ab’data_ddDD1,2,12345678h,9ahdataends实验报告1.根据实验要求,设计程序,在源程序中用(1)、(2)、(3)……进行标注,并在指令后面注明所使用的寻址方式;2.用Debug调试程序,写明程序运行情况。可参考如下格式:当程序运行到(1)处时,**寄存器的内容为****,把**变量读取到寄存器中;运行到(2)处时,**寄存器的内容为**3.比较各种寻址方式,总结自己的实验心得。思考题1.在使用存储器寻址方式的时候,可以使用哪些寄存器?2.字节变量,字变量,双字变量在内存中的实际存储是怎样的?对它们的访问有什么不同?3.比较直接寻址方式、寄存器间接方式、寄存器相对寻址方式、基址变址寻址方式有什么不同。附:示例程序eg02.asmdatasegmentxdb11h,22h,'a','b'ydw1000h,2000h,3h,'ab'zdd1,2,12345678h,9ahdataendscodesegmentassumecs:code,ds:databegin:movax,datamovds,axmovdx,y;(1)movbx,offsetxmovah,[bx];(2)leasi,ymovcx,[si+2];(3)movbx,offsetzmovsi,8;(4)movax,[bx][si];(5)movdx,[bx+si+2];(6)movax,dx;(7)movah,4chint21hcodeendsendbegin实验三寻址方式(二):转移地址寻址实验目的1.转移地址的4种寻址方式;2.了解汇编程序中指令跳转是如何实现的。预习与实验要求1.复习教材的有关内容,回顾汇编语言程序中对转移地址的4种寻址方式;2.回顾汇编程序上机过程以及debug常用指令;3.回顾汇编程序的基本结构;4.实验前认真听讲,服从安排。尽可能独立思考并完成实验。实验设备与器材微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。实验原理与转移地址有关的寻址方式最终确定一条指令的地址。1.顺序执行的指令地址是由指令指针寄存器IP自动增量形成的,而程序转移的地址必须由转移类指令和CALL指令指出,表示转向地址的寻址方式包括:段内直接寻址、段内间接寻址、段间直接寻址、段间间接寻址;2.本实验以JMP指令来实现程序的转移;3.与转移地址相关的有三个表示转移距离(称为位移量)的操作符:SHORT、NEAR、FARa)SHORT,短转移,表示位移量在-128~127字节之间。b)NEAR,近转移,表示在同一段内转移,位移量在-32768~32767字节范围内。c)FAR,远转移,表示转移距离超过±32K字节,在不同段之间转移。4.CS:IP寄存器总是指向下一条将要执行的指令的首地址(称为IP当前值),当转移指令执行后,必须修改IP或CS、IP的值。a)SHORT转移和NEAR转移,位移量分别用8位和16位表示,程序控制仍然在当前代码段,所以只修改IP的值,CS的值不变。b)FAR转移,程序控制超出了当前代码段,所以CS和IP都必须修改为新的值。5.与转移地址有关的4种寻址方式就是告诉CPU如何修改CS和IP的值,以达到控制程序转移的目的。实验内容1.定义两个代码段;code1segment;定义代码段1assumecs:code1;……code1endscode2segment;定义代码段2assumecs:code2;……code2ends2.加入段内短转移指令;JMPSHORTNEXT3.加入段内近转移指令:直接和间接转移;段内直接近转移:JMPNEARPTRNEXT段内间接近转移:JMPTABLE[BX]4.加入段间远转移指令:直接和间接转移。段间直接远转移:JMPFARPTRNEXT段间间接远转移:JMPDWORDPTR[BX]实验报告1.根据实验要求,设计程序,在源程序中用(1)、(2)、(3)……进行标注,并在指令后面注明该指令所使用的寻址方式;2.用Debug调试程序,用U指令进行反汇编,查看指令地址,或者输出.lst文件,查看编译之后的源程序。3.写明程序运行情况,对关键指令(JMP指令