宏指令应用程序设计实验程序设计实验报告20141211.docx_第1页
宏指令应用程序设计实验程序设计实验报告20141211.docx_第2页
宏指令应用程序设计实验程序设计实验报告20141211.docx_第3页
宏指令应用程序设计实验程序设计实验报告20141211.docx_第4页
宏指令应用程序设计实验程序设计实验报告20141211.docx_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

实验六宏指令运用程序设计实验学号:41210038姓名:罗天继一、实验目的:1、 复习掌握:宏定义,宏调用,宏展开概念;2、 练习掌握:宏指令在汇编程序中的应用方法;3、 学习掌握:宏库的概念,学会制作宏库文件的技术;4、 学习掌握:在汇编程序中引用宏库的编程技术;5、 学习掌握:宏操作符的概念,在汇编程序中的应用技术;6、 讨论掌握:宏在汇编程序设计中的地位与作用。二、实验内容:实验1:1、 编写一个将AX中数据乘以10的宏MULTAX10,并编制一个程序SY6_1.ASM调用MULTAX10,且调试运行,验证其功能的实现情况;源文件SY6_1.asm文件内容: .286 ;保留MULTAX10MACROPUSHBXSALAX , 1MOVBX , AXSALAX , 1SALAX , 1ADDAX , BXPOPBXENDMDATA SEGMENT ;保留 ;填入内容DATA ENDS ;保留STACK1 SEGMENT PARA STACK ;保留 DW 20H DUP(0) ;保留STACK1 ENDS ;保留CODE SEGMENT ;保留 ASSUME CS:CODE,DS:DATA,SS:STACK1 ;保留START: MOV AX,DATA ;保留 MOV DS,AX ;保留 MOVAX , 01HMULTAX10;填入内容 MOV AX,4C00H ;保留 INT 21H ;保留CODE ENDS ;保留 END START ;保留编译源文件“SY6_1.asm”生成可执行文件“Debug SY6_1.exe” SY6_1.ini文件内容:u 0,1Ed 2867:0,1fg=0,14d 2867:0,1fqSY6_1.bat文件内容:Debug sy6_1.exe sy6_1.txt执行SY6_1.bat文件后可以获得SY6_1.txt文件;SY6_1.txt文件内容:-u 0,1E2867:0000 B86328 MOVAX,2863 2867:0003 8ED8 MOVDS,AX 2867:0005 B80100 MOVAX,0001 2867:0008 53 PUSHBX 2867:0009 D1E0 SHLAX,1 2867:000B 8BD8 MOVBX,AX 2867:000D D1E0 SHLAX,1 2867:000F D1E0 SHLAX,1 2867:0011 03C3 ADDAX,BX 2867:0013 5B POPBX 2867:0014 CD21 INT21 2867:0016 22CB ANDCL,BL 2867:0018 40 INCAX 2867:0019 AF SCASW 2867:001A 21CB ANDBX,CX 2867:001C 40 INCAX 2867:001D AF SCASW 2867:001E 21CB ANDBX,CX -d 2867:0,1f2867:0000 B8 63 28 8E D8 B8 01 00-53 D1 E0 8B D8 D1 E0 D1 .c(.S.2867:0010 E0 03 C3 5B CD 21 22 CB-40 AF 21 CB 40 AF 21 CB .!.!.!.-g=0,14AX=000A BX=0000 CX=0056 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=2863 ES=2853 SS=2863 CS=2867 IP=0014 NV UP EI PL NZ NA PE NC 2867:0014 CD21 INT21 -d 2867:0,1f2867:0000 B8 63 28 8E D8 B8 01 00-53 D1 E0 8B D8 D1 E0 D1 .c(.S.2867:0010 E0 03 C3 5B CD 21 22 CB-40 AF 21 CB 40 AF 21 CB .!.!.!.-q显然,上面忠实地记录了内存的情况并且展示了实验结果。这是我做的第一个汇编程序,领悟很深刻,把编写汇编程序的流程拉了一遍,熟悉了一些汇编命令,对以后编写更大的汇编程序奠定了基础。实验2:2、 编写一个将两个存储单元(字或字节)的内容相互交换的宏EXCHANGE,并编制一个程序SY6_2.ASM调用EXCHANGE,且调试运行,验证其功能的实现情况;源文件SY6_2.asm文件内容: .286 ;保留EXCHANGEMACROMEM1, MEM2, REGMOVREG , MEM1XCHGREG , MEM2MOVMEM1 , REGENDMDATA SEGMENT ;保留 ;填入内容DA_W1DW1234HDA_W2DW5678HDATA ENDS ;保留STACK1 SEGMENT PARA STACK ;保留 DW 20H DUP(0) ;保留STACK1 ENDS ;保留CODE SEGMENT ;保留 ASSUME CS:CODE,DS:DATA,SS:STACK1 ;保留START: MOV AX,DATA ;保留 MOV DS,AX ;保留EXCHANGEDA_W1, DA_W2, CX;填入内容 MOV AX,4C00H ;保留 INT 21H ;保留CODE ENDS ;保留 END START ;保留编译源文件“SY6_2.asm”生成可执行文件“Debug SY6_2.exe”SY6_1.ini文件内容:u 0,1Ed 2868:0,1fg=0,1Fd 2868:0,1fqSY6_2.bat文件内容:debug SY6_2.exe SY6_2.txt执行SY6_2.bat文件后可以获得SY6_2.txt文件;SY6_2.txt文件内容:-u 0,1E2868:0000 B86328 MOVAX,2863 2868:0003 8ED8 MOVDS,AX 2868:0005 8B0E0000 MOVCX,0000 2868:0009 870E0200 XCHGCX,0002 2868:000D 890E0000 MOV0000,CX 2868:0011 0000 ADDBX+SI,AL 2868:0013 0000 ADDBX+SI,AL 2868:0015 0000 ADDBX+SI,AL 2868:0017 0000 ADDBX+SI,AL 2868:0019 0000 ADDBX+SI,AL 2868:001B 0000 ADDBX+SI,AL 2868:001D 0000 ADDBX+SI,AL -d 2868:0,1f2868:0000 B8 63 28 8E D8 8B 0E 00-00 87 0E 02 00 89 0E 00 .c(.2868:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-g=0,1FAX=2863 BX=0000 CX=5678 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=2863 ES=2853 SS=2864 CS=2868 IP=001F NV UP EI PL NZ NA PE CY 2868:001F 0000 ADDBX+SI,AL DS:0000=2D-d 2868:0,1f2868:0000 B8 63 28 8E D8 8B 0E 00-00 87 0E 02 00 89 0E 00 .c(.2868:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-q显然,上面忠实地记录了内存的情况并且展示了实验结果。领悟很深刻,把编写汇编程序的流程拉了一遍,熟悉了一些汇编命令,对以后编写更大的汇编程序奠定了基础。实验3:3、编制一个调用宏MULTAX10和EXCHANGE的程序SY6_3.ASM,且调试运行,验证其功能的实现;源文件SY6_3.asm文件内容: .286 ;保留MULTAX10MACROPUSHBXSALAX , 1MOVBX , AXSALAX , 1SALAX , 1ADDAX , BXPOPBXENDMEXCHANGEMACROMEM1, MEM2, REGMOVREG , MEM1XCHGREG , MEM2MOVMEM1 , REGENDMDATA SEGMENT ;保留 ;填入内容DA_W1DW1234HDA_W2DW5678HDATA ENDS ;保留STACK1 SEGMENT PARA STACK ;保留 DW 20H DUP(0) ;保留STACK1 ENDS ;保留CODE SEGMENT ;保留 ASSUME CS:CODE,DS:DATA,SS:STACK1 ;保留START: MOV AX,DATA ;保留 MOV DS,AX ;保留 MOVAX , 01HMULTAX10EXCHANGEDA_W1, DA_W2, CX;填入内容 MOV AX,4C00H ;保留 INT 21H ;保留CODE ENDS ;保留 END START ;保留编译源文件“SY6_3.asm”生成可执行文件“Debug SY6_3.exe”SY6_3.ini文件内容:u 0,1Cd 2868:0,1fg=0,14d 2868:0,1fqSY6_3.bat文件内容:debug SY6_3.exe SY6_3.txt执行SY6_3.bat文件后可以获得SY6_3.txt文件;SY6_3.txt文件内容:-u 0,1C2868:0000 B86328 MOVAX,2863 2868:0003 8ED8 MOVDS,AX 2868:0005 B80100 MOVAX,0001 2868:0008 53 PUSHBX 2868:0009 D1E0 SHLAX,1 2868:000B 8BD8 MOVBX,AX 2868:000D D1E0 SHLAX,1 2868:000F D1E0 SHLAX,1 2868:0011 03C3 ADDAX,BX 2868:0013 5B POPBX 2868:0014 8B0E0000 MOVCX,0000 2868:0018 870E0200 XCHGCX,0002 2868:001C 890E0000 MOV0000,CX -d 2868:0,1f2868:0000 B8 63 28 8E D8 B8 01 00-53 D1 E0 8B D8 D1 E0 D1 .c(.S.2868:0010 E0 03 C3 5B 8B 0E 00 00-87 0E 02 00 89 0E 00 00 .-g=0,14AX=000A BX=0000 CX=0070 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=2863 ES=2853 SS=2864 CS=2868 IP=0014 NV UP EI PL NZ NA PE NC 2868:0014 8B0E0000 MOVCX,0000 DS:0000=1234-d 2868:0,1f2868:0000 B8 63 28 8E D8 B8 01 00-53 D1 E0 8B D8 D1 E0 D1 .c(.S.2868:0010 E0 03 C3 5B 8B 0E 00 00-87 0E 02 00 89 0E 00 00 .-q显然,上面忠实地记录了内存的情况并且展示了实验结果。这是我前两个汇编程序综合后的结果,领悟很深刻。实验4:4、 利用宏操作符“&”编写“能够将某寄存器或存储单元R_M,进行由DIRECT指定的逻辑或算术左/右移位,移位次数由COUNT确定的宏SHIFT_VAR,并编制一个程序SY6_4.ASM调用SHIFT_VAR,且调试运行,验证其功能的实现情况;源文件SY6_4.asm文件内容: .286 ;保留SHIFTMACROR_M, DIRECT, COUNTMOVCL , COUNTS&DIRECTR_M , CLENDMDATA SEGMENT ;保留 ;填入内容DA_BYTEDB0FHDATA ENDS ;保留STACK1 SEGMENT PARA STACK ;保留 DW 20H DUP(0) ;保留STACK1 ENDS ;保留CODE SEGMENT ;保留 ASSUME CS:CODE,DS:DATA,SS:STACK1 ;保留START: MOV AX,DATA ;保留 MOV DS,AX ;保留 MOVAX , 0FHSHIFTAX, HL, 2;AX逻辑左移2位SHIFTDA_BYTE, AR, 3;DA_BYTE单元算术右移3位;填入内容 MOV AX,4C00H ;保留 INT 21H ;保留CODE ENDS ;保留 END START ;保留编译源文件“SY6_4.asm”生成可执行文件“Debug SY6_4.exe”SY6_4.ini文件内容:u 0,1Ed 2868:0,1Fg=0,14d 2868:0,1FqSY6_4.bat文件内容:debug SY6_4.exe SY6_4.txt执行SY6_4.bat文件后可以获得SY6_4.txt文件;SY6_4.txt文件内容:-u 0,1E2868:0000 B86328 MOVAX,2863 2868:0003 8ED8 MOVDS,AX 2868:0005 B80F00 MOVAX,000F 2868:0008 B102 MOVCL,02 2868:000A D3E0 SHLAX,CL 2868:000C B103 MOVCL,03 2868:000E D23E0000 SARBYTE PTR 0000,CL 2868:0012 0000 ADDBX+SI,AL 2868:0014 0000 ADDBX+SI,AL 2868:0016 0000 ADDBX+SI,AL 2868:0018 0000 ADDBX+SI,AL 2868:001A 0000 ADDBX+SI,AL 2868:001C 0000 ADDBX+SI,AL 2868:001E 0000 ADDBX+SI,AL -d 2868:0,1F2868:0000 B8 63 28 8E D8 B8 0F 00-B1 02 D3 E0 B1 03 D2 3E .c(.2868:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-g=0,14AX=003C BX=0000 CX=0003 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=2863 ES=2853 SS=2864 CS=2868 IP=0014 NV UP EI PL NZ NA PO NC 2868:0014 0000 ADDBX+SI,AL DS:0000=3D-d 2868:0,1F2868:0000 B8 63 28 8E D8 B8 0F 00-B1 02 D3 E0 B1 03 D2 3E .c(.2868:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-q显然,上面忠实地记录了内存的情况并且展示了实验结果。写汇编程序一定要仔细,有一个地方不对运行结果就出错,而且不会像我们在高级语言中会给出出错的提示,所以就得更加细心。实验55、 利用伪指令“LOCAL”编写“能够将某寄存器或存储单元R1_M1中的数值(作为被乘数),与另一个寄存器或存储单元R2_M2中的数值(作为乘数)相乘,乘积存入内存中存储单元M3中;要求定义的宏“MULTIP”能够在同一个程序中,被连续两次或两次以上的调用。并编制一个程序SY6_5.ASM两次调用MULTIP,且调试运行,验证其功能的实现情况;源文件SY6_5.asm文件内容: .286 ;保留MULTIPMACROMULT1, MULT2, MULT3LOCALLOP, EXIT0MOVDX , MULT1MOVCX , MULT2XORBX, BXXORAX, AXJCXZEXIT0LOP:ADDBX, DXADCAX, 0LOOPLOPEXIT0:MOVMULT3, BXMOVMULT3+2, AXENDMDATA SEGMENT ;保留 ;填入内容DA1DW1234H, 5678HDA2DW1200H, 0ABCDHDA3DW4DUP(0)DATA ENDS ;保留STACK1 SEGMENT PARA STACK ;保留 DW 20H DUP(0) ;保留STACK1 ENDS ;保留CODE SEGMENT ;保留 ASSUME CS:CODE,DS:DATA,SS:STACK1 ;保留START: MOV AX,DATA ;保留 MOV DS,AX ;保留MULTIPDA1, DA2, DA3;第一次宏调用MULTIPDA1+2, DA2+2, DA3+4;第二次宏调用;填入内容 MOV AX,4C00H ;保留 INT 21H ;保留CODE ENDS ;保留 END START ;保留编译源文件“SY6_5.asm”生成可执行文件“Debug SY6_5.exe”SY6_5.ini文件内容:u 0,1Ed 2868:0,1Fg=0,1Ed 2868:0,1FqSY6_5.bat文件内容:debug SY6_5.exe SY6_5.txt执行SY6_5.bat文件后可以获得SY6_5.txt文件;SY6_5.txt文件内容:-u 0,1E2868:0000 B86328 MOVAX,2863 2868:0003 8ED8 MOVDS,AX 2868:0005 8B160000 MOVDX,0000 2868:0009 8B0E0400 MOVCX,0004 2868:000D 33DB XORBX,BX 2868:000F 33C0 XORAX,AX 2868:0011 E307 JCXZ001A 2868:0013 03DA ADDBX,DX 2868:0015 150000 ADCAX,0000 2868:0018 E2F9 LOOP0013 2868:001A 891E0800 MOV0008,BX 2868:001E A30A00 MOV000A,AX -d 2868:0,1F2868:0000 B8 63 28 8E D8 8B 16 00-00 8B 0E 04 00 33 DB 33 .c(.3.32868:0010 C0 E3 07 03 DA 15 00 00-E2 F9 89 1E 08 00 A3 0A .-g=0,1EAX=0147 BX=A800 CX=0000 DX=1234 SP=0040 BP=0000 SI=0000 DI=0000 DS=2863 ES=2853 SS=2864 CS=2868 IP=001E NV UP EI PL NZ NA PE NC 2868:001E A30A00 MOV000A,AX DS:000A=0000-d 2868:0,1F2868:0000 B8 63 28 8E D8 8B 16 00-00 8B 0E 04 00 33 DB 33 .c(.3.32868:0010 C0 E3 07 03 DA 15 00 00-E2 F9 89 1E 08 00 A3 0A .-q显然,上面忠实地记录了内存的情况并且展示了实验结果。这是我做的第一个使用两次宏调用的汇编程序,对LOCAL命令有了深刻的理解,对以后编写更大的汇编程序奠定了基础。实验6:6、将上面所定义的“宏”,做成一个“宏库”文件,定义为:MACROLIB.MAC,并用MACROLIB.MAC改写SY6_1.ASM,SY6_2.ASM,SY6_3.ASM,SY6_4.ASM和SY6_5.ASM,从新调试运行程序,验证所调用宏的功能实现情况,以及宏库“MACROLIB.MAC”的作用。源文件MACROLIB.MAC文件内容: .286 ;保留MULTAX10MACROPUSHBXSALAX , 1MOVBX , AXSALAX , 1SALAX , 1ADDAX , BXPOPBXENDMEXCHANGEMACROMEM1, MEM2, REGMOVREG , MEM1XCHGREG , MEM2MOVMEM1 , REGENDMMULTAX10MACROPUSHBXSALAX , 1MOVBX , AXSALAX , 1SALAX , 1ADDAX , BXPOPBXENDMEXCHANGEMACROMEM1, MEM2, REGMOVREG , MEM1XCHGREG , MEM2MOVMEM1 , REGENDMSHIFTMACROR_M, DIRECT, COUNTMOVCL , COUNTS&DIRECTR_M , CLENDMMULTIPMACROMULT1, MULT2, MULT3LOCALLOP, EXIT0MOVDX , MULT1MOVCX , MULT2XORBX, BXXORAX, AXJCXZEXIT0LOP:ADDBX, DXADCAX, 0LOOPLOPEXIT0:MOVMULT3, BXMOVMULT3+2, AXENDM实验过程截图:实验结果分析:通过做实验发现,把所有的宏定义都放在一个文件内(即宏库),在需要用的程序中,只需把该库用INCLUDE伪指令包含进来,然后其他的就跟在源程序中直接定义宏的情况是一样的。三、实验心得体会:在大三接触汇编语言之前,我们在程序设计课程中就已经有所了解了,但也只是略微明白一些如jmp、mov这样的指令,极度缺乏系统性的学习。 在接触这门课程后,感到汇编语言并不是很容易就可以弄懂的。相比较以前学过的高级语言如C、C+等,电脑相当于在迁就人的思维方式,但学汇编,人却必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我们学习汇编语言时遇到的最大的障碍。 另外,在C语言中不到10个语句构成的程序,用汇编语言却要好几十行甚至上百行。这不得不让我们对汇编产生一种恐惧感。事实上,这是完全不必要的。一旦对它的原理掌握后,编写程序就容易多了。另外,学习汇编语言能让我们更加了解计算机内部的组织结构,对我们计算机专业的学生来说,学习汇编也是提升综合能力的关键环节。汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构。其中遇到很多新的概念、名字。如寄存器、中断、寻址方式等。这些概念在刚接触汇编这门课的时候难以理解,但在之后的学习中通过老师的讲解、自己亲手编程的方式也就渐渐清晰明了。 我们在学习之前都需要明确什么是汇编语言。计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。 经过快一个学期的学习,我也慢慢摸出了汇编学习的规律。 首先,学习这门语言时如果能联系上以前学过的其他高级语言的知识,则会起到良好的效果。例如C语言程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF.ELSE.)、循环结构(FOR.WHILE)三种结构。也通过C语言了解并掌握了什么是子程序,什么是调用。事实上,汇编语言中有关程序结构、子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同,汇编语言完全面向机器需要指明数据在寄存器、内存中的流向。 第二,学习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不

温馨提示

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

评论

0/150

提交评论