您好,欢迎访问三七文档
《汇编语言》实验讲义《汇编语言》实验学时分配表序号实验项目名称实验学时实验报告或作业课内课外1汇编语言程序上机过程以及调试2212顺序程序设计2213循环程序设计2214分支程序设计2215子程序设计2216I/O程序设计2217实验七综合程序设计221合计14147实验一汇编语言程序上机过程以及调试一、预习内容1.工具软件MASM、LINK的使用2.常用DEBUG命令的使用:G,D,R,T,U,Q3.完整程序设计方法的格式。二、目的要求1.掌握常用工具软件MASM、LINK的使用2.掌握常用DEBUG命令:G,D,R,T,U,Q能灵活使用这些命令调试程序3.掌握完整程序设计方法的格式,能正确书写数据段,代码段等。三、实验内容比较两个字符串string1和string2所含的字符是否相同,如果相同则显示’Match'否则显示’Nomatch’.请读程序,并将程序补充完整。DSEGSEGMENTstring1db'Movethecursorbackward.'string2db'Movethecursorbackward.'mess1db'Match.',13,10,'$'mess2db'Nomatch.',13,10,'$'DSEGENDSCSEGSEGMENTassumecs:CSEG,ds:DSEG,es:DSEG,MAINPROCFARstart:movax,dsegmovds,axmoves,axleasi,string1①cld②repzcmpsbjzmatchleadx,mess2jmpshortdispmatch:leadx,mess1disp:movah,09hint21hmovax,4c00hint21hMAINENDPCSEGENDSendstart实验步骤:1)用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在c:\masm50下,注意保存时将文件扩展名改为.asm(如lab1.asm)。2)打开桌面的“命令提示符”程序进入dos命令操作,先用cdmasm50命令改变路经,接着用”masm+文件名”(如masmlab1,这里文件名可以不带扩展名)对源文件进行汇编,产生.obj文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3)用”link+文件名”(如linklab1)将.obj文件连接成可执行的.exe文件(lab1.exe)。4)在DOS状态下直接运行link产生的.exe文件(如lab1),即在屏幕上显示Match.5)用debug调试程序,熟悉debug命令的使用:(1)打debuglab1.exe进入debug控制,显示提示符'_'。(2)用命令g执行程序,可得与步骤4相同的结果,也可用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况,并注意标志位有无变化。(3)用命令u检查键入的程序并记录,特别注意左边的机器码和指令地址。如果一条u命令没有显示完全,可以再次输入u命令,该命令会紧接着上一个命令的输出继续显示。(4)用命令’g+地址’设置断点,如g06,表示将断点设置在代码段的偏移地址为06h的指令前,并执行到该断点前。其中,命令中的地址项可以从上条命令u的运行结果获得。(5)用命令r查看各寄存器的情况。(6)用命令d0查看数据段的情况,0表示从偏移地址0开始,也可以指定其他偏移地址值。(7)用命令‘e+地址’的方式修改数据区的字符串,其中’地址’指需要修改的数据段内存单元偏移地址,可根据上条d0命令获得。如e29表示从偏移地址29h开始修改数据。试用此命令将数据段变量string1的内容修改为’Movethecursorforward.’(8)再次用命令g执行程序,查看执行结果。(9)用命令q退出debug,如果在上述步骤中碰到异常,可以先用q命令退出后再进入调试。四、实验报告或作业1.分析程序,画出程序流程图2.汇编,连接及调试时产生的错误,其原因及解决办法。3.思考:1)上述实验中用e修改数据段的内容,是否改变原文件lab1.asm的内容?2)用单步执行命令t运行程序,运行到movax,4c00h,int21h指令后,cs和ip寄存器内容前后有何变化,产生变化的原因是什么?附:DEBUG使用:1.打DEBUG进入DEBUG,显示提示符'_'。2.退出DEBUG命令:Q3.显示内存命令:D起始地址结束地址4.修改内存命令:E起始地址,连续修改打空格键。打回车键退出E命令。5.检查寄存器命令:R标志位显示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPEPODFDNUPIFEIDI6.修改寄存器命令:R寄存器名7.小汇编命令:A起始地址,不输入指令打回车键退出A命令。8.反汇编命令:U起始地址结束地址9.文件命名命令:N盘号:文件名10.读文件命令:L内存地址11.写文件命令:W内存地址10.读扇区命令:L内存地址盘号(0--A:,1--B:)扇区号扇区数11.写扇区命令:W内存地址盘号扇区号扇区数12.运行命令:G=起始地址结束(断点)地址13.单步命令:T=起始地址运行指令数,进入子程序内部。14.单步命令:P=起始地址运行指令数,不进入子程序内部。15.内存搬家命令:M起始地址结束地址目的地址标志位显示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPEPODFDNUPIFEIDI6.修改寄存器命令:R寄存器名7.小汇编命令:A起始地址,不输入指令打回车键退出A命令。8.反汇编命令:U起始地址结束地址9.文件命名命令:N盘号:文件名10.读文件命令:L内存地址11.写文件命令:W内存地址10.读扇区命令:L内存地址盘号(0--A:,1--B:)扇区号扇区数11.写扇区命令:W内存地址盘号扇区号扇区数12.运行命令:G=起始地址结束(断点)地址13.单步命令:T=起始地址运行指令数,进入子程序内部。14.单步命令:P=起始地址运行指令数,不进入子程序内部。15.内存搬家命令:M起始地址结束地址目的地址实验二顺序程序设计一、预习内容1.常用工具软件MASM、LINK和DEBUG的使用2.完整程序设计方法的格式3.汇编语言顺序结构程序的设计方法二、目的要求1.继续熟悉常用工具软件MASM、LINK和DEBUG的使用2.继续熟悉完整程序设计方法的格式3.学习与掌握汇编语言顺序结构程序的设计方法三、实验内容编程实现datax双字除以字datay(用div),并且把商存入quotient字单元,把余数存入remainder字单元(具体数值可自行确定)。并且用debug查看程序的运行结果,检查程序运行结果的正确性。DSEGSEGMENTdataxdd956123hdataydw123hquotientdw?remainderdw?DSEGENDSCSEGSEGMENTassumecs:CSEG,ds:DSEGstart:movax,dsegmovds,axmovax,dataxmovdx,datax[2]divdataymovquotient,axmovremainder,dxmovax,4c00hint21hCSEGENDSendstart实验步骤:1.用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在c:\masm50下,注意保存时将文件扩展名改为.asm(如lab2.asm)。2.用masm对源文件进行汇编,产生.obj(如lab2.obj)文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3.用link将.obj文件连接成可执行的.exe文件(lab2.exe)。4.直接运行link产生的.exe文件。5.用debug调试程序,单步执行程序,并记录黑体部分单步执行后ax,dx,cs,ip寄存器以及标志寄存器的值.6.在debug状态下,用“a+偏移地址”的方式将程序的div改为idiv再单步执行黑体部分,对比步骤5的结果,查看有何变化,并记录。7.修改源程序实现双字datax与字datay的无符号乘法。四、实验报告或作业1.分析程序,画出程序流程图。2.汇编,连接及调试时产生的错误,其原因及解决办法。3.步骤5的结果记录。4.步骤6的结果记录,并分析发生变化的原因。5.思考:1)指令movdx,datax[2]改写成movdx,[datax+2]经过汇编后,二者是否相同,为什么?2)如何实现双字datax与字datay的乘法,写出完整的源程序。实验三循环程序设计一、预习内容1.多重循环程序和排序程序设计方法。2.带符号数的比较转移指令:JL,JLE,JG,JGE二、目的要求1.掌握多重循环程序和排序程序设计方法。2.掌握带符号数的比较转移指令:JL,JLE,JG,JGE三、实验内容建立学生名次表,以grade为首地址的数组中保存了学生的成绩,其中grade+i保存学号为i+1的学生的成绩。要求建立一个10个字的rank数组,并根据grade中的学生成绩将学生名次填入rank数组中,其中rank+i的内容是学号为i+1学生的名次(提示:一个学生的名次等于成绩高于该学生的人数加1)DSEGSEGMENTgradedw88,75,95,63,98,78,87,78,90,60rankdw10dup(?)DSEGENDSCSEGSEGMENTassumecs:CSEG,ds:DSEGstart:movax,dsegmovds,axmovdi,10movbx,0loop:①movdx,1movcx,10②next:cmpax,[si]jgeno_countincdxno_count:addsi,2loopnext③addbx,2④jneloopmovax,4c00hint21hCSEGENDSendstart实验步骤:1.输入,汇编并连接此程序。2.在DEBUG下运行此程序,记录运行结果。3.将转移指令JGE改为JG,JL,JLE分别运行记录排序结果,察看结果是否正确不对,并分析原因。四、实验报告或作业1.分析程序,画出程序流程图2.汇编,连接及调试时产生的错误,其原因及解决办法。3.记录JGE情况下的排序结果,同时比较将转移指令JGE改为JG,JL,JLE时的排序结果,并分析结果正确与否,如果不正确,写出原因和解决办法。4.思考:如果想外循环也用loop实现,应该怎样修改程序?实验四分支程序设计一、预习内容1.分支程序设计方法。2.利用转移指令jl、jmp实现多岔分支的方法。二、目的要求1.掌握分支程序设计方法。2.掌握利用转移指令jl、jmp实现多岔分支的方法。三、实验内容统计学生成绩result。设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并分别存放到s5、s6、s7、s8、s9及s10单元中DSEGSEGMENTgradedw56,69,84,82,73,88,99,63,100,80s5dw0s6dw0s7dw0s8dw0s9dw0s10dw0DSEGENDSCSEGSEGMENTassumecs:CSEG,ds:DSEGstart:movax,dsegmovds,axmovcx,10movbx,offsetgradecompare:movax,[bx]cmpax,60jlfivecmpax,70jlsixcmpax,80jlsevencmpax,90jleightcmpax,100jnenine①②nine:incs9jmpshortchange_addreight:incs8jmpshortchange_addrseven:incs7jmpshortchange_addrsix:incs6jmpshortchange_addrfive:incs5change_addr:③④movax,4c00hint21hCSEGENDSendstart实验步骤:1.阅读程序,将程序补充完整。2
本文标题:汇编语言实验讲义
链接地址:https://www.777doc.com/doc-5745137 .html