计科《汇编语言程序设计》_实验指导书_第1页
计科《汇编语言程序设计》_实验指导书_第2页
计科《汇编语言程序设计》_实验指导书_第3页
计科《汇编语言程序设计》_实验指导书_第4页
计科《汇编语言程序设计》_实验指导书_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编语言程序设计实验指导书刘晓燕计算机与信息科学学院2009年5月目 录实验一 开发工具的使用2实验二 寻址方式(一):操作数寻址6实验三 寻址方式(二):转移地址寻址8实验四 字符串拷贝11实验五 表格查找14实验六 过程调用18实验七 分类统计字符个数21实验八 查找电话号码25实验一 开发工具的使用实验目的 1 熟悉DOS操作系统;2 熟悉文本编辑器、编译器、连接器及调试器的使用。 预习与实验要求 1 预习实验指导书及教材的有关内容,了解debug常用的命令;2 熟悉文本编辑器、编译器、连接器及调试器的使用。3 了解汇编程序的基本结构4 实验前认真听讲,服从安排。尽可能独立思考并完成实验

2、。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 DEBUG.EXE是DOS提供的用于调试可执行程序的工具软件,是汇编语言程序设计中常用的调试工具。在DEBUG环境下,不但可以调试经汇编、连接后生成的可执行程序,也可以编写简单的程序。DEBUG程序启动方法:在DOS提示符下键入:DEBUG 路径文件名Debug执行,并将指定文件装入内存,供调试。此时屏幕显示提示符“”,说明计算机当前处于DEBUG的管理之下,可接受、并执行DEBUG命令。MASM和LINK程序是Microsoft公司的汇编程序和连接程序,汇

3、编语言程序的上机过程如图1-1所示:myfile.asm编辑程序汇编程序连接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe图1-1:汇编语言程序上机过程 实验内容 熟悉文本编辑器、编译器、连接器及调试器的使用。 了解汇编程序的基本结构,结合给出的示例程序eg01.asm练习汇编语言程序上机步骤。1. 启动dos环境开始-运行-输入cmd 或者 所有程序-附件-命令提示符2. 进入masm和link程序所在目录(1) 键入masm所在盘符(2) cd masm所在路径3.汇编程序:masm myfile.asm

4、4.连接程序:link myfile.obj5.调试程序:debug myfile.exe(1)u 反汇编(2)t4 运行前4步对照反汇编结果或者是打开list文件观察ip寄存器内容查看cx寄存器内容(3)d ds:0 查看数据段从0开始的内容(4)d es:0 查看附加数据段从0开始的内容(5)t 单步执行,查看cx寄存器内容(6)继续单步执行观察各寄存器变化情况(7)运行到inc di 处时 d es:0 查看附加数据段从0开始的内容(8)继续单步执行观察ip变化情况(9)继续单步执行观察ip变化情况(10) g 1d运行到loop 处时 d es:0 查看附加数据段从0开始的内容(11)

5、执行一次循环后再d es:0 观察附加数据段变化情况连续单步或者接第10步,输入t 再输入g1d(12)g 1f 运行到程序结束,d es:0 观察附加数据段变化情况(13)q 退出debug实验报告 1. 用文本编辑器输入示例代码,编译、连接;2. 调试程序eg01.exe,写出程序运行的相关情况。将实验内容第5步所有要求查看的内容写出来 思考题 1. 用debug的u指令反汇编和通过lst文件查看有什么差别?2. debug的t指令和g指令有哪些区别?附:示例程序eg01.asmdata segment ;数据段定义 stringdb Happy New Year!, 0DH , 0AH

6、, $ countdw 17data endsextra segment ;附加数据段定义new_stringdb 17 dup(?)extra endscode segmentmain proc far assume cs:code, ds:data, es:extrastart: movax,data mov ds,ax mov ax,extra mov es,ax mov cx, count mov bx, offset string mov di, 0 Next:mov dl, bx mov new_stringdi, dl inc bx inc di loop Next movah,

7、4chint 21hmain endpcode endsend start实验二 寻址方式(一):操作数寻址实验目的 1 掌握操作数的不同寻址方式;2 继续熟悉DEBUG调试程序。 预习与实验要求 1复习教材的有关内容,回顾汇编语言程序中对操作数的7种寻址方式,回顾8086的实模式寻址;2回顾汇编程序上机过程以及debug常用指令;3回顾汇编程序的基本结构;4实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 计算机中的指令由操作码字段和操作数字段两部分组成,

8、8086中与数据有关的寻址方式一共有7种,用来确定操作数地址从而找到操作数。1. 立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里;2. 寄存器寻址方式使用寄存器来存放要处理的操作数;3. 其它5种寻址方式:直接寻址方式、寄存器间接方式、寄存器相对寻址方式、基址变址寻址方式、相对基址变址寻址方式,操作数都在除代码段以外的存储区中, 在8086里,把操作数的偏移地址称为有效地址EA,这五种寻址方式分别对应五种计算EA的方法。4. 有效地址可以由以下三种成分组成:位移量(Displacement)是存放在指令中的一个8位或16位数,但它不是立即数,而是一个地址

9、。基址(Base)是存放在基址寄存器(BX或BP)中的内容。它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。变址(Index)是存放在变址寄存器(SI或DI)中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。这三种成分都可正可负,以保证指针移动的灵活性。它们任意组合使用,可得到不同的寻址方式。 5伪操作DB、DW、DD分别用来定义字节、字和双字变量。实验内容 1. 使用多种寻址方式读写内存变量。(1)定义字节变量,字变量,双字变量;(2)使用直接寻址方式访问这些变量;(3)采用寄存器间接寻址访问这些变量;(4)采用寄存器相对寻址访问这些变量;(5)采用基址变址寻

10、址方式访问这些变量。2定义字节变量,字变量,双字变量使用伪操作DB、DW、DD,示例:data segment ;数据段定义data_dbDB11h,22h,a,bdata_dwDW1000h,2000h,3h,abdata_ddDD 1,2,h,9ahdata ends实验报告 1 根据实验要求,设计程序,在源程序中用(1)、(2)、(3)进行标注,并在指令后面注明所使用的寻址方式;2 用Debug调试程序,写明程序运行情况。可参考如下格式:当程序运行到(1)处时,*寄存器的内容为*,把*变量读取到寄存器中;运行到(2)处时,*寄存器的内容为*3 比较各种寻址方式,总结自己的实验心得。思考题

11、 1 在使用存储器寻址方式的时候,可以使用哪些寄存器?2 字节变量,字变量,双字变量在内存中的实际存储是怎样的?对它们的访问有什么不同?3 比较直接寻址方式、寄存器间接方式、寄存器相对寻址方式、基址变址寻址方式有什么不同。附:示例程序eg02.asmdata segment x db11h,22h,a,bydw1000h,2000h,3h,abzdd1,2,h,9ahdata endscode segmentassume cs:code,ds:databegin:mov ax,datamov ds,axmov dx,y;(1)mov bx,offset xmov ah,bx;(2)lea si

12、,ymov cx,si+2;(3) mov bx,offset zmovsi,8;(4)movax,bxsi;(5) movdx,bx+si+2;(6)movax,dx;(7)mov ah,4chint 21hcode endsend begin实验三 寻址方式(二):转移地址寻址 实验目的 1. 转移地址的4种寻址方式;2. 了解汇编程序中指令跳转是如何实现的。 预习与实验要求 1复习教材的有关内容,回顾汇编语言程序中对转移地址的4种寻址方式;2回顾汇编程序上机过程以及debug常用指令;3回顾汇编程序的基本结构;4实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计

13、算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 与转移地址有关的寻址方式最终确定一条指令的地址。1 顺序执行的指令地址是由指令指针寄存器IP自动增量形成的,而程序转移的地址必须由转移类指令和CALL指令指出,表示转向地址的寻址方式包括:段内直接寻址、段内间接寻址、段间直接寻址、段间间接寻址;2 本实验以JMP指令来实现程序的转移;3 与转移地址相关的有三个表示转移距离(称为位移量)的操作符:SHORT、NEAR、FARa) SHORT,短转移,表示位移量在-128127字节之间。b) NEAR,近转移,表示在同一段内转移,位移量在

14、-3276832767字节范围内。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 定义两个代码段;code1 segment ; 定义代码段1

15、 assume cs:code1;code1 endscode2 segment ; 定义代码段2 assume cs:code2;code2ends2 加入段内短转移指令;JMP SHORT NEXT 3 加入段内近转移指令:直接和间接转移;段内直接近转移:JMP NEAR PTR NEXT 段内间接近转移:JMP TABLE BX 4 加入段间远转移指令:直接和间接转移。段间直接远转移:JMP FAR PTR NEXT 段间间接远转移:JMP DWORD PTR BX 实验报告 1 根据实验要求,设计程序,在源程序中用(1)、(2)、(3)进行标注,并在指令后面注明该指令所使用的寻址方式;

16、2 用Debug调试程序,用U指令进行反汇编,查看指令地址,或者输出.lst文件,查看编译之后的源程序。3 写明程序运行情况,对关键指令(JMP指令)加以跟踪,可参考如下格式:本程序从代码段1始执行,(1)为段内近转移,直接寻址方式,所以(2)不执行,直接跳转到(3);(4)为段间远转移,直接寻址方式,IP和CS内容均发生变化,CS变为next所在的代码段段基址,IP为next段内偏移地址,程序跳转到(5)4 比较4种寻址方式,总结自己的实验心得。 思考题 1 段内直接寻址的IP变化与段内间接寻址有什么不同?2 段内间接寻址对转移地址的寻址方法,与实验二中,操作数的寻址方法有什么异同?3 段间

17、直接寻址与段内直接寻址对IP的修改有什么不同?4 段间间接寻址需要读出两个字的内容,其中哪个字填入IP,哪个字填入CS?附:示例程序eg03.asmdata segmentaddr dw 0002h,1000h,001Bhdata endscode1 segment ; 定义代码段1 assume cs:code1 mov ax, 5678h;本程序中类似指令均无实际意义,主要用于跟踪程序运行情况next:mov bx,9abch ;(5)立即数寻址jmp short again ;(6)跳转到agianmovsi,1234h 原变址寄存器again:movdx,1000h ;(7)add d

18、x,100h 相加后送入dxincdx 自加一mov bx,0004h送入jmpword ptr bx ; (8) 跳转到 以字的形式访问mov ax,1000hadd ax,1 ;(9)mov ax,2000h 立即数 movbx,0000h bx寄存器轻灵jmpdword ptr bx; (10) 跳转到以bx容的寄存器 以双字访问 ;code1 endscode2 segment ; 定义代码段2 assume cs:code2,ds:data data段 内容送到段寄存器ds当中start: mov ax,datamov ds,axmov cx, 1234hjmpnear ptr ne

19、xt1 ;(1) 跳转到next1标号中addcx,1 ;(2) 1235Hnext1:movax,1010h;(3) jmp far ptr next ;(4)跳转到next标号中去 movdx,1234h;code2 endsend start实验四 字符串拷贝 实验目的 1. 掌握字符串操作指令;2. 掌握汇编程序中简单循环程序设计的方法。 预习与实验要求 1复习教材相关内容,复习字符串操作指令;2复习控制转移指令:循环指令和条件转移指令;3回顾循环程序设计的基本方法,以及需要注意的问题;4实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操

20、作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 1字符串传送指令格式为MOVS DST, SRCMOVSB MOVSW 其中MOVS需要在指令中指定类型,MOVSB表示对字节进行操作,MOVSW对字进行操作。该指令执行操作:(1) (DI) (SI)(2) 字节操作:(SI)(SI)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2方向标志 DF=0 时用 + ,DF=1 时用 - 2设置方向标志指令:CLD、STDCLD置DF=0,STD置DF=13MOVS可与REP前缀配合工作 REP MOVS执行操作:(1) 如 (CX

21、)=0 则退出 REP,否则转(2)(2) (CX) (CX) -1(3) 执行 MOVS (4) 重复 (1) (3)4REP与MOVS配合工作可把数据段中SI指向的源串复制到附加数据段中DI指向的目的串。5循环指令LOOP可以用来执行简单的循环程序,可以在循环体中逐一复制字符串中的每一个元素。6LOOP指令默认使用CX计数器,可以用条件转移指令来实现它的功能LOOP NEXT DEC CX JNZ NEXT实验内容 1 定义一个字符串数组和三个空的字节型数组;2 采用寄存器相对寻址方式,将字符串数组中的字符按顺序拷贝到空数组1中;3 采用基址变址寻址方式,将字符串数组中的字符按顺序拷贝到空

22、数组2中;4 采用字符串传送指令,将字符串数组中的字符按顺序拷贝到空数组3中;5 第2步和第3步,要求分别使用循环指令和条件转移指令。实验报告 1 根据实验要求,设计程序,在源程序中用(1)、(2)、(3)进行标注,并在指令后面注明该段指令所使用的拷贝方式;2 用Debug调试程序,用U指令进行反汇编,查看指令地址,或者输出.lst文件,查看编译之后的源程序。3 跟踪程序运行情况,可通过G指令设置断点,每用一种方法拷贝之后,用D指令查看存储单元内容。4比较3种不同的拷贝方法,总结自己的实验心得。 思考题 1 REP和LOOP都使用哪个寄存器作为默认计数器?2 空数组3需要定义在哪个段中,为什么

23、?3 比较3种拷贝方法的优缺点。附:示例程序eg04.asmdata segment mess db personal_computer$mess1 db 18 dup(?)mess2 db 18 dup(?)data endsextra segment mess3 db 18 dup (?)extra endscode segmentassume cs:code, ds:data, es:extrastart:mov ax, datamov ds, axmov ax, extramov es, axmov si,0 ;(1)用寄存器相对寻址方式拷贝mov cx,18next1: mov al

24、,messsimov mess1si,alinc siloop next1mov bx,offset mess ;(2)用基址变址寻址方式拷贝mov si,0mov cx,18next2: mov al,bxsimov mess2si,alinc sidec cxjnz next2lea si, mess ;(3)用字符串传送指令拷贝lea di, mess3mov cx, 18cldrep movsbmov ah,4chint 21hcode endsend start实验五 表格查找 实验目的 1 熟悉循环程序和分支程序设计方法;2 了解与键盘输入有关的DOS 21H功能调用;3 了解DO

25、S显示功能调用。 预习与实验要求 1复习控制转移指令:循环指令、无条件转移指令和条件转移指令;2复习教材相关内容,回顾循环程序和分支程序设计的基本方法,以及需要注意的问题;3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 1 循环程序和分支程序可用LOOP及J*指令实现,注意循环结束条件。2 与键盘输入有关的DOS 21H功能AHA:从键盘读入一串字符串并把它存入用户定义的缓冲区中。DS:DX缓冲区首地址;缓冲区第一个字节保存最大字符数,由用户程序给出

26、。第二个字节是实际输入字符的个数,由功能A填入。在这两个字节之后,字符串按字节存入缓冲区。例:lea dx,stokninmovah,0ahint 21h3 DOS显示功能调用AH9:显示字符串要求:DS:DX串地址;被显示输出的字符串必须以$结束。例:leadx,mess1movah,09int 21h实验内容 仓库管理中,总共存有有关库存品的编号、名称、数量、价格等情况的表格,根据用户提供的编者按号可以找到有关材料。假设表格中共有6种库存品,表格的格式为:stoktabdb05, Excavatorsdb08, Liftersdb09, Pressesdb12, Valvesdb23, P

27、rocessorsdb27, Pumps试编写一程序,根据用户提供的编号在终端上显示其名称。根据题目的要求,程序可由三部分组成:1. 输入:接受用户键入的库存品号;2. 查表:根据给定编号在表格中查找所要求的库存品名称;3. 输出:显示找到的库存品名称。其中,第二部分是程序的主体,可以使用循环结构。由于在给定的表格中,编号及库存品所占的字节数都是相等的,因此在查找的时候,只要根据编号的地址就可以逐项查找。循环结束条件应该是找到用户所指定的项时就可以退出,但还必须考虑在表格中没有找到所需编号的特殊情况。要求:如用户给出的编号可以在表格中查到,则显示出相应的库存品名;如用户不需要再查找,只要按一下

28、“回车”可结束程序;若表格中无用户给出的编号,则显示:“Not in table!”,然后结束程序。实验报告 1 根据实验要求,设计程序,程序由输入、查表、输出三部分构成;2 利用记事本输入源程序,经过MASM汇编检查语法后,得到OBJ文件,利用LINK连接程序生成EXE文件。3. 执行程序,写出程序运行情况。 思考题 1. 若要求当表格中无用户给出的编号,则显示:“Not in table!”,然后不结束程序,继续输出“stock number”提示用户继续查找,可以怎样实现?2. 思考:若表格中,编号及库存品所占的字节数不相等该怎样实现程序?3. 思考:汇编语言的表格查找实现与高级语言(C

29、、C+等)有什么异同。附:示例程序eg05.asmdata segmentmess1db stock number?,13,10,$ stoknin label bytemax db3act db?stokndb3 dup(?)stoktabdb05, Excavatorsdb08, Liftersdb09, Pressesdb12, Valvesdb23, Processorsdb27, Pumpsdescrn db14 dup(20h),13,10,$messdbNot in table!,13,10,$data endscode segmentassume cs:code, ds:dat

30、a, es:datamain proc farpush dssub ax,axpush axmov ax, datamov ds, axmov es, axstart:leadx,mess1movah,09int 21hlea dx,stokninmovah,0ahint 21hcmpact,0jeexitmov al,stoknmov ah,stokn+1movcx,06lea si,stoktaba20:cmpax,word ptrsijea30addsi,14loopa20leadx,messmovah,09int 21hjmpexita30:mov cx,07leadi,descrnr

31、epmovswleadx,descrnmovah,09int 21hjmpstartexit:retmain endpcode endsend main实验六 过程调用 实验目的 掌握汇编程序设计中过程(子程序)设计方法。预习与实验要求 1复习教材相关内容,回顾子程序设计方法;2复习子程序的参数传递方法,以及需要注意的问题;3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。实验原理 子程序又称为过程,相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到“类

32、似”的程序段,即这些程序段的功能和结构形式都相同,只是某些变量赋值不同。此时就可以把这些程序段写成子程序形式,以便需要时调用它。例如:十进制数转换成二进制数;二进制数转换为十六进制数并显示输出等,都可以设计成子程序的形式。调用程序在调用子程序时,经常需要传送一些参数给子程序;子程序运行完后也经常要回送一些信息给调用程序。这种调用程序和子程序之间的信息传送称为参数传送。参数传送方式可以有以下一些方法:(1)通过寄存器传送参数(2)如过程和调用程序在同一源文件(同一程序模块)中,则过程可直接访问模块中的变量。(3)通过地址表传送参数地址(4)通过堆栈传送参数或参数地址实验内容 利用过程实现内存中压

33、缩BCD码数据的输出。要求:1 PROC伪指令带参数定义子程序2 使用CALL指令调用子程序3 使用堆栈传送参数实验报告 1根据实验要求,设计程序;2利用记事本输入源程序,经过MASM汇编检查语法后,得到OBJ文件,利用LINK连接程序生成EXE文件;3. 执行程序,写出程序运行情况。 思考题 1 思考:通过堆栈传送参数,需要注意些什么?2 思考:比较汇编语言的参数传递与高级语言(C、C+等)有什么异同。附:示例程序eg06.asmdata segment;定义数据段Xdb12h,34hdata ends stack segment stack;定义堆栈段Ydw100 dup(?)stack

34、ends code segmentassume cs:code,ds:data,ss:stackmain proc farstart:push dssubax,axpushax; 程序结束,返回操作系统 movax,datamovds,ax ;数据段初始化 movsi,0mov cx,2next:mov al,Xsimovah,alpushcxmov cl,4shrah,clandal,0fh; 将压缩的BCD码数分解到AX寄存器中pushaxmovbp,sp; 通过堆栈传送数据calldisp; 输出BCD码数据callcrlf; 输出回车换行 incsipopcxpopcx loopnex

35、tretmain endpdispprocnearmov dx,bp; 取参数movdi,2again:xchgdh,dladd dl,30hmovah,2int21hdec dijnz againretdispendpcrlfprocnearmovdl,13movah,2int 21hmovdl,10movah,2int 21hretcrlf endpcodeendsendstart实验七 分类统计字符个数 实验目的 综合掌握汇编程序设计方法。预习与实验要求 1复习与键盘输入有关的DOS 21H功能调用;2. 复习DOS显示功能调用;3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。实验原理 1 计算机中字符以ASCII码的形式存储,DOS 21H的0AH功能调用可以把键入字符直接送到缓冲区中,然后再逐个取出分类计数。也可以采用01H功能调用,在接收字符后,先分类计数,然后再存入缓冲区中。2 程序需进入debug运行并查看计数结果。实验内容 程序接收用

温馨提示

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

评论

0/150

提交评论