汇编语言实验题目及报告格式_第1页
汇编语言实验题目及报告格式_第2页
汇编语言实验题目及报告格式_第3页
汇编语言实验题目及报告格式_第4页
汇编语言实验题目及报告格式_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

四川师范大学计算机科学学院《汇编程序设计》实验报告课程名称:汇编语言姓名:院系:专业:年级:学号:指导教师:郭荣佐职称:副教授2011年月日

实验项目列表序号实验项目名称成绩指导教师1汇编程序调试的基本操作郭荣佐2顺序程序设计郭荣佐3循环程序设计郭荣佐4DOS功能调用郭荣佐5子程序设计郭荣佐6字符处理程序设计郭荣佐7891011121314151617181920

四川师范大学计算机科学学院《汇编程序设计》实验报告院系:专业:年级:姓名:学号:实验课程:汇编程序设计实验室号:______实验设备号:实验时间:指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程;(2)生成.1ST文件,查看.1ST文件;(3)生成.OBJ文件,修改语法错误;(4)生成.EXE文件;(5)执行程序2.实验原理汇编程序从编写到执行的过程编程→.ASM→编译→.OBJ→连接→.EXE→加载→内存中的程序→执行3.主要仪器设备(实验用的软硬件环境)WindowsXP操作系统,MASM,LINK4.操作方法与实验步骤1)编写源程序用记事本输入程序,并存储成源程序,保存在MASM目录下,扩展名为ASM。2)对源程序进行汇编、连接操作如下:(1)在DOS状态下,进入MASM目录;(2)输入命令:MASM文件名(连同扩展名);(3)在系统出现的提示中输入:objectfilename[.obj]:按回车键。Sourcelistling[nul.lst]:输入:文件主名,生成.lst文件,也可以不生成,直接按回车键。.Lst文件用于查看编译为目标文件的过程中产生的中间结果。Cross-reference[nul.crf]:按回车键。(4)如果系统没有提示出错,那么编译过程就完成了。如果提示错误则应用edit打开源文件进行修改,然后再重复2和3步骤(5)输入:link文件主名(不要输扩展名,也可以输入扩展名.obj) runfile[.exe]:按回车键。Listfile[nul.map]:按回车键。Libraries[.lib]:按回车键。(6)没有提示错误,汇编过程就结束了,产生了exe可执行文件。如果出现‘nostracksegment’的错误警告,不用理会。3)执行程序(由DOS中的COMMAND命令将文件加载入内存)在DOS提示符下直接输入文件主名就可以执行文件了。程序执行后,有的会显示结果,有的可能执行后什么结果都没有,是因为程序中没有显示命令。5.实验内容及实验数据记录5.1(1)输入数据段1:DATASEGMENTORG20HNUM1=8NUM2=NUM1+10HDA1DB'IBMPC'DB0AH,0DHCOUNTEQU$-DA1DATAENDSEND(2)生成1-1.lst,用EDIT1-1.lst文件得知DA1=0020,COUNT=0008(参见实验截图)5.2(1)输入数据段2:DATASEGMENTVAR1DB0,25,0DH,30HVAR2DB12H,0A4H,6BHVAR3DB'ABCDEFH'VAR4DW1234H,5678HVAR5DW10HDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DE:DATABEINGMOVAX,DATAMOVDS,AXLEASI,VAR5MOVBX,OFFSETVAR2MOV[SI],0ABHMOVAX,VAR1+2MOV[BX],[SI]MOVVAR5+4,VAR4MOVAH,4CHINT21HCODEENDSEND(2)进行汇编:提示有6个错误。经分析得:第9行:将DE→DS第10行:将BEING→BEGIN:第14行:将[SI]→SI第15行:将VAR1+2→[VAR1+2]第16行:将[BX]→BX第17行:将VAR5+4→AX,VAR4→[VAR4]修改后进行汇编得:5.3(1)输入数据段3:STACKSSEGMENTSTACKDW128DUP(?)STACKSENDSDATASSEGMENTSTRINGDB'WELCONME!',13,10,'$'DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXLEADX,STRINGMOVAH,9INT21HMOVAH,4CHINT21HCODESENDSENDSTART(2)运行程序3得到:WELCOME!(3)实验截图:6.数据处理与分析1)在DOS状态下,对.asm文件汇编,可以得到一个1.lst文件,通过EDIT1.lst,可以查看到DA1=0020,COUNT=00082)AX是数据寄存器,而VAR是地址,赋值应该写成[VAR1+2];7.质疑、建议、问题讨论直接用edit.exe编辑汇编程序修改不方便,可以使用记事本编辑,再通过更改后缀名变成.asm文件。四川师范大学计算机科学学院《汇编程序设计》实验报告院系:专业:年级:姓名:学号:实验课程:汇编程序设计实验室号:______实验设备号:实验时间:指导教师签字:成绩:实验二:顺序程序设计1.实验目的和要求(1)学习使用DEBUG的命令;(2)使用DEBUG命令在数据段中查看程序运行的结果;(3)利用DEBUG运行简单的程序段。2.实验原理DEBUG命令的使用过程。3.主要仪器设备(实验用的软硬件环境)WindowsXP操作系统,MASM,LINK4.操作方法与实验步骤1)将输入的大写字母改为小写字母并输出,编写程序。输入程序观察寄存器变化2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。如果是将小写字母改成大写字母带注释的语句该如何修改?3)程序的跟踪执行操作在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。那么如何查看程序的运行结果呢?程序执行过程的跟踪操作步骤如下:(1)在DOS下输入:DEBUG文件名.EXE(2)在DEBUG提示符下输入U命令 如果程序中有数据段,可以看到反汇编后第一句可执行语句为: A地址:B地址MOVAX,K地址如:1261:0000MOV AX,1260 其中:K地址就是数据段的段寄存器内容,A地址为代码段段寄存器地址,B地址为程序第一条指令的偏移地址。(3)可以用T命令单步执行指令,执行到MOVAH,4CH时结束,也可以用G命令执行整个程序,输入:G=B地址(如:G=0000)(4)用D命令查看程序执行后数据段的变化 输入:DK地址:0(如:D1260:0) 在显示的数据中,对照源程序或LST文件查看结果所在的偏移地址的内容。4)输入下面的程序,按实验一和上面的步骤运行一遍。这是一个两个数相与的程序。结果存放在MSG2单元中,偏移地址为?值为多少? DSEG SEGMENT MSG1 DW 7856H,2038H MSG2 DW ? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV AX,MSG1 AND AX,MSG1+2 MOV MSG2,AX MOV AL,0 MOV AH,4CH INT 21H CSEGENDS END START3.编写调试下面的程序,用DEBUG查看数据段中的结果1)Z=((W-X)*10+5)/(X+Y),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。2)X,Y为字节类型数,求Z=((X+Y)*8-(X-Y)*2)/16,写出完整的数据段和代码段,不用乘除指令。5.实验内容及实验数据记录1)在debug中用a命令,输入以下程序后观察寄存器变化2)创建文件并逐步执行4)实验截图为Z=((W-X)*10+5)/(X+Y),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。6)X,Y为字节类型数,求Z=((X+Y)*8-(X-Y)*2)/16,程序代码6.质疑、建议、问题讨论四川师范大学计算机科学学院《汇编程序设计》实验报告院系:专业:年级:姓名:学号:实验课程:汇编程序设计实验室号:______实验设备号:实验时间:指导教师签字:成绩:实验三:分支循环程序设计1.实验目的和要求(1)学习调试程序,查找逻辑错误;(2)学习分支语句的编程和调试;(3)学习循环语句的编程和调试。2.实验原理利用DEBUG命令查找发现逻辑错误并修改,调试。3.主要仪器设备(实验用的软硬件环境)WindowsXP操作系统,MASM,LINK4.实验内容(1)有10个数,统计正数的个数,存放在变量M中。经过汇编后,行程.exe文件。在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确(AL寄存器中存放正数的个数)。程序DSEG SEGMENT MSG DB4,-2,-6,0,5,67,8,-3,5,6 M DB? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV CX,10 MOV AL,0 LEA SI,MSG L1: MOV BL,[SI] CMP BL,0 JBE NEXT INC AL NEXT: INC SI LOOP L1 MOV M,AL MOV AL,0 MOV AH,4CH INT 21H CSEG ENDS END START输入程序并调试。得到上面程序的分析结果。(2)数据段中是一组无符号数,将最小数存放在M单元中。对其进行调试发现错误并修改。源程序如下:DSEG SEGMENT MSG DB13,15,7,25,24 MDB? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV CX,4 MOV AL,MSG MOV SI,OFFSETMSG+1 L1: CMP AL,[SI] JB NEXT MOV AL,[SI] NEXT: LOOP L1 MOV M,AL MOV AL,0 MOV AH,4CH INT 21H CSEG ENDS END START经调试发现循环结束AL中的数值不变,且SI没有自增故要在next:处加上INCSI(3)编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果放在RESULT中。(4)编程:,Ai、Bi为字节型无符号数据,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。四川师范大学计算机科学学院《汇编程序设计》实验报告院系:专业:年级:姓名:学号:实验课程:汇编程序设计实验室号:______实验设备号:实验时间:指导教师签字:成绩:实验四:子程序设计1.实验目的和要求(1)学习子程序的编写,主子程序的调用(2)不同模块间程序的调用和调试2.主要仪器设备(实验用的软硬件环境)WindowsXP操作系统,MASM,LINK3.实验内容(1)数据段的三个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。但不执行,对CALL语句和RET语句观察SP、IP的变化,并用D命令查看栈顶内容。程序段如下:DATA SEGMENT MAG DB‘ABC’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,0 MOV CX,3 LL: MOV DL,MAG[SI] CALL MADD INC SI LOOP LL MOV AH,4CH INT 21H MADD PROC MOV AH,02H INT 21H RET MADD ENDP CODE ENDS END START进行汇编单步执行。用T命令运行五次,D命令查看SS段内容。通过在DEBUG中用T单步执行与用P子程序执行,分别使ABC逐个显示出来,当执行到调用子程序时候SP=007A,对IP进行保护,当子程序执行完毕以后,返回到SP保护的IP地址0012.。直接把文件名输进去后可以把三个字符一起输出:(2)阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行的文件S31.EXE。具体步骤如下:MASMS31.ASM(分别汇编)MASMS32.ASMLINKS31S32(将两个文件连接成为一个文件名为S31)S31.EXE(运行)源程序如下:NAMES31.ASMEXTRNDISP:FARCODESEGMENTPARA'CODE'ASSUMECS:CODESTART:MOVAH,01HINT21HMOVBL,ALINT21HMOVAH,ALMOVAL,BLCMPAX,3030HJEEXITCALLNEARPTRTRANCALLFARPTRdispJMPSTARTEXIT:MOVAH,4CHINT21HTRANPROCNEARANDAX,0F0FHMOVBL,AHMOVCL,10DMULCLADDAL,BLRETTRANENDPCODEENDSENDSTARTNAMES32.ASMPUBLICDISPCODE1SEGMENTPARA'CODE'ASSUMECS:CODE1DISPPROCFARMOVBL,ALMOVBH,00MOVCH,4ROLL:MOVCL,4ROLBX,CLMOVDL,BLANDDL,0FHCMPDL,9JBENEXT1ADDDL,07HNEXT1:ADDDL,30HMOVAH,02HINT21HDECCHJNZROLLRETDISPENDPCODE1ENDSEND经过汇编,链接得到S31.EXE4.编程题(1)编程:利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来(也可以将找到的不相等字符逐个显示,用INT21H的02功能调用)。最后的输出结果为:(2)编程:子程序搜索指定字符缓冲区中是否有N,如果有用Y替代。调用子程序将BUF1、BUF2、BUF3中的N全部用Y替代。源程序如下:运行程序:四川师范大学计算机科学学院《汇编程序设计》实验报告院系:专业:年级:姓名:学号:实验课程:汇编程序设计实验室号:______实验设备号:实验时间:指导教师签字:成绩:实验五DOS功能调用1.实验目的和要求(1)学会DOS中关于显示功能调用指令的用法;(2)领会修改显存方法显示字符。2.主要仪器设备(实验用的软硬件环境)WindowsXP操作系统,MASM,LINK3.实验内容1)输入一个字符,显示出来。2)输入一个字符串,显示出来。3)BUF开始的3个16位二进制数用十六进制数的形式显示出来。(1)理解程序(2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。(3)如果要分行显示,程序要如何修改?4)直接改变显存内容显示。(1)显存空间分配:内存地址空间中,B8000H-BFFFFH共32KB的空间,为80×25彩色字符模式显示缓冲区。向这个地址空间写入数据,写入的内容将立即出现在显示器上。80×25=2000个字符,每个字符在缓冲区中占2个字节,一个字节存放ASCII码,一个字节存放字符属性(字符颜色、字符背景颜色、闪烁、高亮度)(2)偏移地址计算:如第2行,第40列:(2-1)×160+40×2这个偏移地址中存放字符的ASCII码,(2-1)×160+40×2+1这个偏移地址中存放字符的属性。第M行,第N列的一般计算公式为:(M-1)×160+N*2存放ASCII码(M-1)×160+N*2+1存放属性(3)运行下列程序,在屏幕的第1行,会显示一个字符X。根据上面(1)、(2)点理解程序段。 STACK SEGMENT DB 128 DUP(0) STACK ENDS CSEG

温馨提示

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

评论

0/150

提交评论