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

下载本文档

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

文档简介

1、汇编语言程序设计实验指导书王茂忠计算机与信息科学学院2014年9月目 录实验一 汇编编程、调试环境的使用2实验二 操作数寻址5实验三 表格查找7实验四 分类统计字符个数11实验五 过程调用16实验六 查找电话号码18实验一 汇编编程、调试环境的使用实验目的 1 熟悉DOS操作系统;2 熟悉文本编辑器、编译器、连接器及调试器的使用。 预习与实验要求 1. 掌握汇编程序的基本结构;2. 熟悉文本编辑器、编译器、连接器及调试器的使用;3. 了解debug常用的命令。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理

2、1. MASM和LINK程序是Microsoft公司的汇编程序和连接程序;2. DEBUG.EXE是DOS提供的用于调试可执行程序的工具软件,是汇编语言程序设计中常用的调试工具。在DEBUG环境下,不但可以调试经汇编、连接后生成的可执行程序,也可以编写简单的程序。 图1-1:汇编语言程序上机流程 实验内容 熟悉文本编辑器、编译器、连接器及调试器的使用。 了解汇编程序的基本结构,结合给出的示例程序eg01.asm练习汇编语言程序上机步骤。1. 启动dos环境开始-运行-输入cmd 或者 所有程序-附件-命令提示符2. 进入masm和link程序所在目录(1) 键入masm所在盘符(2) cd m

3、asm所在路径3.汇编程序:masm myfile.asm4.连接程序:link myfile.obj5.调试程序:debug myfile.exeDEBUG程序的启动: drive:path DEBUG d:pfilename.extDebug的几个常用命令(1)命令A,格式为: -A地址 该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。 例如: -a 136B:0100 mov ax,100 136B:0103 mov bx,200 136B:0106 mov cx,300 136B:0109 mov dx,400 136B:010C - (2

4、) 反汇编命令U,有两种格式: 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。 例如:-u 13C9:0000 1E PUSH DS 13C9:0001 2BC0 SUB AX,AX 13C9:0003 50 PUSH AX 13C9:0004 B8C313 MOV AX,13C3 13C9:0007 8ED8 MOV DS,AX 13C9:0009 B8C613 MOV AX,13C6 13C9:000C 8EC0 MOV ES,AX 13C9:000E 8D360000 LEA SI,0000 13C9:0012 8D3E

5、0000 LEA DI,0000 13C9:0016 FC CLD 13C9:0017 B92800 MOV CX,0028 13C9:001A F3 REPZ 13C9:001B A4 MOVSB 13C9:001C CB RETF 13C9:001D 0000 ADD BX+SI,AL 13C9:001F 0000 ADD BX+SI,AL-U 范围 该命令对指定范围的内存单元进行反汇编, 例如:-u 13c9:000e 001b 13C9:000E 8D360000 LEA SI,0000 13C9:0012 8D3E0000 LEA DI,0000 13C9:0016 FC CLD 1

6、3C9:0017 B92800 MOV CX,0028 13C9:001A F3 REPZ 13C9:001B A4 MOVSB - (3) 追踪命令T,有两种格式: 1)单条指令追踪-T=地址 该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。 -t AX=0000 BX=0000 CX=007D DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=13B3 ES=13B3 SS=13C3 CS=13C9 IP=0001 NV UP EI PL NZ NA PO NC 13C9:0001 2BC0 SUB AX,AX - 2)多条指令追踪: -

7、T=地址值 该命令从指定地址起执行n条命令后停下来,n由值确定。 -t 3AX=0000 BX=0000 CX=007D DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=13B3 ES=13B3 SS=13C3 CS=13C9 IP=0001 NV UP EI PL NZ NA PO NC 13C9:0001 2BC0 SUB AX,AXAX=0000 BX=0000 CX=007D DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=13B3 ES=13B3 SS=13C3 CS=13C9 IP=0003 NV UP E

8、I PL ZR NA PE NC 13C9:0003 50 PUSH AX AX=0000 BX=0000 CX=007D DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000 DS=13B3 ES=13B3 SS=13C3 CS=13C9 IP=0004 NV UP EI PL ZR NA PE NC 13C9:0004 B8C313 MOV AX,13C3(4) 显示内存单元内容的命令D,格式为: D范围 -d ds:0 13C3:0000 61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61 aaaaaaaaaaaaaa

9、aa 13C3:0010 61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61 aaaaaaaaaaaaaaaa 13C3:0020 61 61 61 61 61 61 61 61-00 00 00 00 00 00 00 00 aaaaaaaa. 13C3:0030 61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61 aaaaaaaaaaaaaaaa 13C3:0040 61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61 aaaaaaaaaaaaaaaa 13C3

10、:0050 61 61 61 61 61 61 61 61-00 00 00 00 00 00 00 00 aaaaaaaa. 13C3:0060 1E 2B C0 50 B8 C3 13 8E-D8 B8 C6 13 8E C0 8D 36 .+.P.6 13C3:0070 00 00 8D 3E 00 00 FC B9-28 00 F3 A4 CB 00 00 00 .>.(. - (5) 检查和修改寄存器内容的命令R1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R R命令显示中标志位状态的含义如下表所示: 标志位置位(1)复位(0)溢出overflow(是/否)OVNV方

11、向Direction(减量/增量)DNUP中断Interrupt(允许/屏蔽)EIDI符号符号Sign(负/正)NGPL零Zero(是/否)ZRNZ辅助进位Auxiliary Carry(是/否)ACNA奇偶Parity(偶/奇)PEPO进位Carry(是/否)CYNC2)显示和修改某个指定寄存器内容,格式为: -R 寄存器名 例如打入:-R AX 系统将响应如下: AX FIF4 : 表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如: -R BX BX 0369 :059F 则BX内容由0369改为059F(6)q 退出debug实验报告 1. 用文

12、本编辑器输入示例代码,编译、连接;2. 调试程序ex1.exe,写出程序运行的相关情况。附:示例程序ex1.asmdata segment :数据段定义 stringdb "Happy New Year!", 0DH , 0AH , '$' 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 m

13、ov 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,4chint 21hmain endpcode endsend start实验二 操作数寻址实验目的 a) 掌握操作数的不同寻址方式;b) 继续熟悉DEBUG调试程序。 预习与实验要求 1复习教材的有关内容,回顾汇编语言程序中对操作数的7种寻址方式,回顾8086的实模式寻址;2回顾汇编程序上机过程以及debug常用指令;3回顾汇编程序

14、的基本结构;4实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。 实验原理 计算机中的指令由操作码字段和操作数字段两部分组成,8086中与数据有关的寻址方式一共有7种,用来确定操作数地址从而找到操作数。1. 立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里;2. 寄存器寻址方式使用寄存器来存放要处理的操作数;3. 其它5种寻址方式:直接寻址方式、寄存器间接方式、寄存器相对寻址方式、基址变址寻址方式、相对基址变址寻址方式,操作数都在除

15、代码段以外的存储区中, 在8086里,把操作数的偏移地址称为有效地址EA,这五种寻址方式分别对应五种计算EA的方法。4. 有效地址可以由以下三种成分组成:位移量(Displacement)是存放在指令中的一个8位或16位数,但它不是立即数,而是一个地址。基址(Base)是存放在基址寄存器(BX或BP)中的内容。它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址。变址(Index)是存放在变址寄存器(SI或DI)中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。这三种成分都可正可负,以保证指针移动的灵活性。它们任意组合使用,可得到不同的寻址方式。 5伪操作DB、DW、

16、DD分别用来定义字节、字和双字变量。实验内容 1. 使用多种寻址方式读写内存变量。(1)定义字节变量,字变量,双字变量;(2)使用直接寻址方式访问这些变量;(3)采用寄存器间接寻址访问这些变量;(4)采用寄存器相对寻址访问这些变量;(5)采用基址变址寻址方式访问这些变量。2定义字节变量,字变量,双字变量使用伪操作DB、DW、DD,示例:data segment ;数据段定义data_dbDB11h,22h,a,bdata_dwDW1000h,2000h,3h,abdata_ddDD 1,2,12345678h,9ahdata ends实验报告 1 根据实验要求,设计程序,在源程序中对标有(1)

17、、(2)、(3)的指令注明所使用的寻址方式;2 用Debug调试程序,写明程序运行情况。可参考如下格式:当程序运行到(1)处时,xx寄存器的内容为xxxx;运行到(2)处时,xx寄存器的内容为xxxx3 比较各种寻址方式,总结自己的实验心得。思考题 1 在使用存储器寻址方式的时候,可以使用哪些寄存器?2 字节变量,字变量,双字变量在内存中的实际存储是怎样的?对它们的访问有什么不同?3 比较直接寻址方式、寄存器间接方式、寄存器相对寻址方式、基址变址寻址方式有什么不同。附:示例程序ex2.asmdata segment x db11h,22h,'a','b'ydw1

18、000h,2000h,3h,'ab'zdd1,2,12345678h,9ahdata endscode segmentassume cs:code,ds:databegin:mov ax,datamov ds,axmov dx,y;(1)mov bx,offset x ;(2)mov ah,bx;(3)lea si,y ;(4)mov cx,si+2;(5) mov bx,offset z (6)movsi,8;(7)movax,bxsi;(8) movdx,bx+si+2;(9)movax,dx;(10)movah,4chint 21hcode endsend begin【当

19、程序运行到时,DX为1000,Y的第一数读到DX中;运行到时,AX的内容是11EE,把BX=0000,DS:0000=11,读到AH中;当运行到时,CX的内容是2000,把SI+2=0006,DS:0006=2000读到CX(ax)?中;当运行到时,SI=0008,把8直接读到SI中;当运行到时,AX=5678,把BX+SI=0014,DS:0014=5678,读到AX中;当运行到时,DX=1234,把BX+SI+2=0016,DS:0016=1234,读到DX中;当运行到时,AX=1234,把DX得女人读到AX中。】实验三 表格查找 实验目的 1 熟悉循环程序和分支程序设计方法;2 了解与键

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

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

22、db'08',' Lifters'db'09',' Presses'db'12',' Valves'db'23',' Processors'db'27',' Pumps'试编写一程序,根据用户提供的编号在终端上显示其名称。根据题目的要求,程序可由三部分组成:1. 输入:接受用户键入的库存品号;2. 查表:根据给定编号在表格中查找所要求的库存品名称;3. 输出:显示找到的库存品名称。其中,第二部分是程序的主体,可以使用循环结构。由于在给定

23、的表格中,编号及库存品所占的字节数都是相等的,因此在查找的时候,只要根据编号的地址就可以逐项查找。循环结束条件应该是找到用户所指定的项时就可以退出,但还必须考虑在表格中没有找到所需编号的特殊情况。要求:如用户给出的编号可以在表格中查到,则显示出相应的库存品名;如用户不需要再查找,只要按一下“回车”可结束程序;若表格中无用户给出的编号,则显示:“Not in table!”,然后结束程序。实验报告 1 根据实验要求,设计程序,程序由输入、查表、输出三部分构成;2 利用记事本输入源程序,经过MASM汇编检查语法后,得到OBJ文件,利用LINK连接程序生成EXE文件。3. 执行程序,写出程序运行情况

24、。 思考题 1. 若要求当表格中无用户给出的编号,则显示:“Not in table!”,然后不结束程序,继续输出“stock number”提示用户继续查找,可以怎样实现?2. 思考:若表格中,编号及库存品所占的字节数不相等该怎样实现程序?3. 思考:汇编语言的表格查找实现与高级语言(C、C+等)有什么异同。附:示例程序ex3.asmdata segmentmess1db 'stock number?',13,10,'$' stoknin label bytemax db3act db?stokndb3 dup(?)stoktabdb'05',

25、' Excavators'db'08',' Lifters'db'09',' Presses'db'12',' Valves'db'23',' Processors'db'27',' Pumps'descrn db14 dup(20h),13,10,'$'messdb'Not in table!',13,10,'$'data endscode segmentassume c

26、s:code, ds:data, 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,0

27、7leadi,descrnrepmovswleadx,descrnmovah,09int 21hjmpstartexit:retmain endpcode endsend main实验四 分类统计字符个数 实验目的 综合掌握汇编程序设计方法。预习与实验要求 1复习与键盘输入有关的DOS 21H功能调用;2. 复习DOS显示功能调用;3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。 实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。实验原理 1 计算机中字符以ASCII码的形式存储,DOS 21H的0AH功能调用可

28、以把键入字符直接送到缓冲区中,然后再逐个取出分类计数。也可以采用01H功能调用,在接收字符后,先分类计数,然后再存入缓冲区中。2 程序需进入debug运行并查看计数结果。实验内容 程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类统计数, 然后将结果存入以letter、digit和other为名的存储单元中。实验报告 1根据实验要求,设计程序;2利用记事本输入源程序,经过MASM汇编检查语法后,得到OBJ文件,利用LINK连接程序生成EXE文件;3. 执行程序,写出程序运行情况。 思考题 思考:采用0AH功能调用和01H功能调用,在程序实现上

29、有什么不同? 附:示例程序ex4.asm(0AH功能调用)附:示例程序ex4.asm(0AH功能调用)SHUJU SEGMENTSTR DB 80,?,80 DUP(?)LETTER DB 0DIGIT DB 0OTHER DB 0SHUJU ENDS;定义数据段DAIMA SEGMENTASSUME CS:DAIMA,DS:SHUJUMAIN ? PROC ? FARGO: PUSH DS XOR AX,AXPUSH AX;程序结束,返回操作系统MOV AX,SHUJUMOV DS,AX ;数据段初始化LEA DX,STRMOV AH,10INT 21H;输入字符串,以回车结束 LEA SI

30、,STR+2;SI指向实际输入的字符串首地址MOV CL,SI-1;实际字符串长度送到CXMOV CH,0REPEAT:MOV AL,SICMP AL,'0'JB RESTCMP AL,'9'是否是数字JBE NUMCMP AL,'A'JB RESTCMP AL,'Z'是否是大写字母JBE CHARCMP AL,'a'JB RESTCMP AL,'z'是否是小写字母JA RESTCHAR:INC LETTER;字母JMP NEXTREST:INC OTHER;其他字符JMP NEXTNUM:INC

31、DIGIT;数字NEXT:INC SILOOP REPEATRETMAIN ENDPDAIMAENDSEND GO示例程序eg07b.asm (01H功能调用)datasegment letterDB0digitDB 0other DB 0 countDW 80data ends code segmentmain proc far assume cs:code, ds;datastart: push ds sub ax,ax push ax mov ax,data mov ds,axmov cx,countnewchar:movah,1int 21hcmpal,0dhjzexit deccx

32、cmpal,30hjlother_countcmpal,39hjledigit_countcmpal,41hjlother_countcmpal,5Ahjleletter_countcmpal,61hjlother_countcmpal,7Ahjleletter_countother_count:inc otherjcxzexitjmpnewchardigit_count:incdigitjcxzexitjmpnewcharletter_count:inc letterjcxzexitjmpnewcharexit: retmain endpcode endsend start实验五 过程调用

33、实验目的 掌握汇编程序设计中过程(子程序)设计方法。预习与实验要求 1复习教材相关内容,回顾子程序设计方法;2复习子程序的参数传递方法,以及需要注意的问题;3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。实验设备与器材 微型计算机,Windows操作系统,DOS操作系统,MASM或TASM编译器,LINK或TLINK连接器。实验原理 子程序又称为过程,相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到“类似”的程序段,即这些程序段的功能和结构形式都相同,只是某些变量赋值不同。此时就可以把这些程序段写成子程序形式,以便需要时调用它。例如:十进制数转换成二进制数;二进制数转换

34、为十六进制数并显示输出等,都可以设计成子程序的形式。调用程序在调用子程序时,经常需要传送一些参数给子程序;子程序运行完后也经常要回送一些信息给调用程序。这种调用程序和子程序之间的信息传送称为参数传送。参数传送方式可以有以下一些方法:(1)通过寄存器传送参数(2)如过程和调用程序在同一源文件(同一程序模块)中,则过程可直接访问模块中的变量。(3)通过地址表传送参数地址(4)通过堆栈传送参数或参数地址实验内容 利用过程实现内存中压缩BCD码数据的输出。要求:1 PROC伪指令带参数定义子程序2 使用CALL指令调用子程序3 使用堆栈传送参数实验报告 1根据实验要求,设计程序;2利用记事本输入源程序

35、,经过MASM汇编检查语法后,得到OBJ文件,利用LINK连接程序生成EXE文件;3. 执行程序,写出程序运行情况。 思考题 1 思考:通过堆栈传送参数,需要注意些什么?2 思考:比较汇编语言的参数传递与高级语言(C、C+等)有什么异同。附:示例程序ex5.asmdata segment;定义数据段Xdb12h,34hdata ends stack segment stack;定义堆栈段Ydw100 dup(?)stack 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 loopnextretmain endpd

温馨提示

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

最新文档

评论

0/150

提交评论