微机实验指导10机械1、2、5_第1页
微机实验指导10机械1、2、5_第2页
微机实验指导10机械1、2、5_第3页
微机实验指导10机械1、2、5_第4页
微机实验指导10机械1、2、5_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、实验熟悉汇编语言程序设计的实验环境一、实验目的k熟悉masm5.0汇编环境和汇编过程。2、熟练掌握汇编程序从编写到执行的过程。二、实验内容及步骤对汇编程序设计而言,目前绝大多数应用是基于masm的宏汇编语言。通 常,汇编语言系统软件包括:(1)汇编语言编译器:将汇编语言源程序(.asm文件)翻译为二进制目 标代码(.obj文件)。具有这个功能的编译器有masm.exeml.exe和cv.exe 等。本书使用较为普遍的masm5.0版本。(2)连接器:连接二进制目标代码和库函数代码生成可执行程序(.exe文 件),常用的程序为link.exeo(3)动态调试器:对可执行程序(.exe)进行静态了

2、解和动态执行调试, 具有这个功能的软件有debug.exe> tr.exe等。本书使用较为普遍的debugexeo注意:上述软件要在pc机的dos系统下运行。在windows操作系统上, 提供了模拟的dos操作系统环境。(-)了解实验环境1、下载masm文件夹到学生机上的e:o2、进入dos环境中。单击电脑桌面左下角的“开始” 一点击“运行”一输入“and”,如下图1-1和图1-2所示。运行©)注销 administrator打开©:cmd关闭计算机)2 0 9 *确定取消浏览©)图m打开“运行”对话框图12显示“运行”对话框单击“确定”后,进入dos方式,

3、如图13所示。图1-33、改变路径,进入到汇编编译器masm所在的路径,如图14图1-44、查看汇编编译器masm所在文件夹masm,是否具备所需的汇编语言系统软件,如图l-5o:nasn>dir驱动蛊e中的卷是enjoy卷的序列号是0434-7d321 e:nasn的目录2010-10-0721:34<dir>2010-10-0721:34<dir> 1987-07-3100:0064.982link.exe1987-07-3108:00103,175masm.exe2009-10-1822:20138mas m牙发坏境配置-txt3个文件168.295字芾2个

4、目录14,275,096,576可用字节图1-5列出的当前目录屮必须有masm.exe和link.exe文件,否则汇编语言 实验将无法进行。随着用户上机操作的进行,在该文件夹中将不断增加新的文件。(-)熟悉汇编语言程序设计的上机过程 汇编语言程序设计的上机操作流程如下:(1)建立与编辑汇编语言源程序。方式一:使用dos系统屮的edit.exe程序来编辑源程序。(由于edit.exe是常驻 内存的程序,因此,并不需要出现在文件夹masm中。)e:masm>edit sy 1 .asm将出现对话框,如图16所示。c、c:wind0vssystem32cbd. exe 一 edit syl.

5、as>二|口|*|file edit search uiew options help图1-6编辑完源程序,如图17所示。file/save,保存好汇编语言程序源文件。图1-7方式二:采用“记事本”建立并编辑汇编语言源程序(扩展名为.asm)o源程序如下:code segmentassumecs:codemovax,0123hmovbx,4567hmovah,4chint21hcode endsend编辑完成后,将文件保存为:文件名syl.asmo注:分号后的文字是程序的注释,可以不输入;为了使得汇编语句更整齐, 可用tab键设置间隔,如输入movt按tabt输入axt)(2)汇编(即编

6、译)。使用宏汇编程序masm对asm文件进行汇编,即对.asm文件进行语法检查,在没有语法错课的情况下,可将asm文件汇编成obj文件。e: masm>masm svl.asm(注:事先应将源程序文件sy 1 .asm保存在文件夹e:masm中。)汇编完成后,窗口中若出现图1-8的提示,表明源程序中没有错误(0 warning errors和0 severe errors),可继续往下一步。否则,要回到源程序syl. asm 中改正错课,再重新汇编,直至出现图1-8所示的提示信息为止。¥indo¥ssyst eb32c*d.ezee:nasfn>nasfi sy

7、l .asmall rights reservedmicrosoft <r> macro assembler uersion 500 copyright <c> microsoft corp 1981-1985, 1987.object f ilenavne syl .obj:source listing nul.lst:cross-reference nul.crf:50724 * 450092 bytes symbol space free0 warnin g errors0 severe errors图1-8(3) 连接。通过连接程序link.exe,将obj文件

8、连接成在可执行文件exe。如图1-9所示。e:nasn>link sylmicrosoft <rlinker uersion 3.60copyright <c> microsoft corp 1983-1987. all rights reservedrun file sv1.exej:list file nul.mapi:libraries .lib:link : warning l4021: no stack segment图1-9上图屮出现的warning是no stack segment,可忽略。如果连接不成功,必须重新编辑、汇编和连接,直至生成可执行文件。(4

9、) 运行与调试。上述编译、连接的过程只是保证了没有语法上的错误或较为简单的错误,并 不能保证程序在逻辑或算法上没有出错,所以,必须对程序的执行过程进行调试、 跟踪分析,才能保证所设计程序的正确性。由于汇编语言指令系统涉及的输入输岀较复杂,因此,通常程序运行的结果 往往存放在内存单元或寄存器中,因此,初学汇编语言程序设计时,要了解程序 运行结果,就必须熟练掌握直接深入内存的调试程序debug.exeo在完成步骤(1)-(3)后,如果syl.exe的运行结果达不到耍求或出现异常, 则要修改源程序,再重新进行编辑、编译、连接和运行调试(即步骤(1) (4)o用调试程序(debug)来对可执行文件进行

10、调试、跟踪一个程序的运行过程: 进入debug.exe调试程序。如图110。e: nasrt)>debug syl .exe图110进入debug调试环境后,出现提示符“”,此时,可键入所需的debug命 令。debug命令。用u命令查看一下debug加载入内存的程序。用t命令单步跟踪程序执行的情况。用r命令查看寄存器的内容。用d命令查看内存单元的内容。用g命令执行程序或程序连续运行,直至程序正常终止,出现"program terminated normally, 提刀退出debug程序用q命令。对于某些屮断程序、子程序,没有必要进行单步跟踪时,用p命令,直接 执行完该中断程序

11、或子程序,如遇到dos功能调用指令int 21h,用p命令后, 在执行完int21h指令,会返回到int 21h的下一条指令上。实验步骤:用u命令,查看一下debug加载入内存的程序,如图111。显然,本实验 屮的syl中的汇编语句在前面四行中。e:masn>debug syl.exe1 li0b7e:0000 b82301mouax,01230b7e:0003 bb6745moubx.45670b7e:0006 b44cmouah.4c0b7e:0008 cd21int210b7e:000a 16pushss0b7e:000b 8b00mouax.ebx+sij0b7e:000d 89

12、46f6moulbp-0aj.ax0b7e:0010 a1a407mouax. 0*40b7e:0013 398672ffcmpbp*ff?21,ax0b7e:0017 7?5eja007?0b?e:0019 8b5e06moub*.ebp+06j0b7e:001c 26es:0b7e:001d 8b5f06moubx,bx+06j图 1-11用一次r命令,观察在程序执行前寄存器ax、bx的内容,记录其值。如图1-12所示。ax=0000bx=0000cx=000adx=0000sp=0000bp=0000 si=0000 di=0000ds=0b6e es=0b6e ss=0b7e cs=0

13、b7e ip=0000 nu up el pl nz na po nc 0b7e:0000 b82301mou ax,0123图 1-12用t命令单步执行syl中的每条语句,观察寄存器ax、bx的变化,记录其 值,直至出现语句int 21h,用p命令。如图113所示。ax=0123bx=0000cx=000adx=0000sp=0000bp=0000 si=0000 di=0000fos=0b6ees=0b6ess=0b7ecs =0b?eip=0003nu up el pl nz na po nc0b7e:0003 bb6745mou bx.4567ax=0123bx=4567cx=000a

14、dx=0000sp=0000ds=0b6ees=0b6ess=0b7ecs=0b7eip=00060b7e:0006b44cmouah,4cax=4c23bx=4567cx=000adx=0000sp=0000ds=0b6ees=0b6ess=0b7ecs=0b7eip=00080b7e:0008cd21i nt21-t_pprogran terminated normallybp=0000 si=0000 di=0000 nu up el pl nz na po ncbp=0000 si=0000 di=0000 nu up el pl nz na po nc图 1-13根据实验结果,ax=

15、0123h, bx二4567h,与实验设想的结果相同,故本程 序syl.asm实现了实验要求。三、思考题1. 汇编程序从写出到执行的过程包括哪些步骤?2. 己知用debug.exe将syl.exe程序加载入内存后,cx中存放的是程序的长度,则本实验中的程序长度为字节。3. 已知ds中存放着syl.exe程序所在内存区的段地址,从ds:0起始的内存区,前256个字节存放的是psp (程序段前缀,dos用来和程序进行通信),从256 字节后的空间才开始存放程序。所以,本实验中存放程序的起始物理地址 为: ,可用段地址和偏移地址表示为: o提示:存放程序的起始内存单元物理地址:pa = (ds) x

16、 16+256=(ds) x16+0100h=(ds) x24+28=(ds) +24 x24+0000h=(cs) x24+0000h4. 将下面的程序保存为sy2.asm文件,并将其生成可执行文件sy2.exe。code segmentassumecs:codemovax,2000hmovss,axmovsp,0addsp,10popaxpopbxpushaxpushbxpopaxpopbxmovah,4chint21hcode endsend用debug.exe调试sy2.exe,写出每一步执行后,相关寄存器的内容实验二寻址方式与基本指令的使用一、实验目的熟悉8086寻址方式及基本指令的

17、功能。二、实验内容1. 读懂源程序,将其生成可执行文件sy3.exe。data segmentnum db 82h,68h,88hsum db ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov bx,offset nummov al,bxinc bxadd al,bxinc bxadd al,bxmov sum,almov ah,4chint 21hcode endsend start2. 冋答下列问题。(1)程序加载后,寄存器cs的内容为h,代码段第一条可执行指令“mov ax, data”对应

18、的机器码是h,它是一条 个字节的指令,该指令的源操作数data的寻址方式是。(2)执行完mov ds,ax指令后,数据段寄存器ds的内容为h,源程序数据段屮定义的数据82h、68h、88h对应的存储单元的偏移地址分别是: h、h、ho(3)程序中的第一条add al,bx指令中,源操作数所在存储单元逻辑地址为(ds): (bx) =,执行该指令后(al) =h, cf=h, of=_ , zf=_, sf=_, af=_, pf=_。(4)执行完第二条 add al,bx扌旨令后,(al) =h, cf=_,of=_, zf=_, sf=_, af=_, pf=_。(5)指令mov sum,a

19、l中,目的操作数的寻址方式为,该指令执行后,sum单元中的值为ho三、上机自测题i. 指出下列指令错课的原因,上机运行,观察汇编程序masm给出的岀错信息,(1) movbp,bl(2) movbx,bp(3) mov|bxj,20h(4) incis1(5) addax,si+di(6) shlax,3(7) push2000h(8) popal(9) movcs,ax(10) movdsjoooh附:状态标志位在debug.exe中如何显示1、0的状态标志名置位(为1)复位(为0)溢overflow (是/否)ovnv方向direction (减量/增量)dnup中断interrupt (

20、允许/屏蔽)eidi符号sign (负/正)ngpl零zero (是/否)zrnz辅助进位auxiliary carry (是/否)acna奇偶parity (偶/奇)pepo进位carry (是/否)cync实验三 多字节二进制加、减法编程实验一、实验目的1、熟悉汇编语言二进制多字节加法基本指令的使用方法;2、熟悉汇编语言二进制多字节减法基本指令的使用方法;3、掌握汇编语言编程的一般结构。二、实验内容及步骤1、将两个双字长度的数分别相加并将结果存放在result中。分析:(1)存放多精度数多精度数的存放有两种方式,高地址优先(如1234h,5678h表示56781234h) 和低地址优先(如

21、1234h, 5678h表示12345678h),具体的存放方式由用户根 据自己的习惯选择。在这里虑我们使用了高地址优先的存储方式。(2)分析程序设计由于汇编语言的add, adc, sub, sbb指令都不支持两个操作数都是存 储器操作数的情况,因此将一个操作数的低字放到寄存器ax中,高字放到寄存 器dx屮分别完成高字部分的加法,高字部分的带进位加法。(3)具体程序设计data segmentdata1 dw 5311h,8a13h;表示数据 8a135311hdata2 dw 4783h,9526h;表示数据 95264783hresult dw 2 dup(?) ;存放多字节加法的结果d

22、ata endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ax,data 1mov dx,datal+2add ax,data2 ;低字部分相加adc dx,data2 + 2;高字部分带进位相加mov result,ax ;存放低字部分相加结果mov result+2,dx ;存放高字部分相加结果code endsend start2、编写程序,实现长度为2字的两个多精度数相减。利用debug程序进 行调试,查看数据区的加减法结果是否止确。3、编写程序,实现一个长度为3字的多精度数和一个长度为2字的多精度数

23、相加减。利用debug程序进行调试,查看数据区的加减法结果是否正确。三、思考题在例子中没有考虑最高位溢岀的问题,若考虑到最高位可能发生溢出,该如何修改程序。实验四十进制数的bcd加、减法编程实验一、实验目的1、熟悉bcd码的基本知识。2、熟悉汇编语言bcd码多字节加减法基本指令的使用方法。3、掌握bcd码调整指令的使用方法。二、实验内容及步骤1、分别计算长度为2字节的两个压缩bcd码相加和长度为2字节的两个非 压缩bcd码相加。分析:(1) 分析程序设计这里我们仍然采用高地址优先的方式来存放多精度数,高位相加的吋候采 用带进位相加。只是由于bcd码的加法是十进制数相加,所以每次相加之后都要 进行调整

温馨提示

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

评论

0/150

提交评论