黄强-汇编-第十章汇编语言程序设计上机指导课件_第1页
黄强-汇编-第十章汇编语言程序设计上机指导课件_第2页
黄强-汇编-第十章汇编语言程序设计上机指导课件_第3页
黄强-汇编-第十章汇编语言程序设计上机指导课件_第4页
黄强-汇编-第十章汇编语言程序设计上机指导课件_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

10.1汇编语言程序设计上机概述10.2汇编程序10.3连接程序10.4调试工具第10章汇编语言程序设计上机指导10.1汇编语言程序设计上机概述第10章汇编语言程序110.1汇编语言程序设计上机概述10.1.1上机环境为了对包括Pentium指令在内的汇编语言的源程序文件进行汇编,应有一台Pentium以上的计算机。操作系统使用DOS5.0以上版本或在Windows操作系统命令提示符下进行。编辑程序可用EDIT等。MASM5.0以上宏汇编系统,包括:

(1)MASM:汇编程序 (2)LINK:连接程序 (3)CREF:索引程序 (4)LIB:库管理程序用DEBUG调试程序时,假定后面的内容假定在C盘上建立了MASM子目录,且上述程序都在该目录中或建立了相应路径。第10章汇编语言程序设计上机指导10.1汇编语言程序设计上机概述10.1.1上机环210.1.2汇编语言源程序上机操作步骤

从编写好的汇编语言源程序到计算机可以运行这个程序,中间要经历一些步骤。可以归纳如下:

1.编辑源文件

根据给定的任务编写程序。一般在编辑过程中总会有错误产生,因此还要进行人工检查、重新编辑修改,直到所编辑的源程序认为无误为止。最后将它以一个源程序文件(.ASM文件)存盘。

2.汇编源程序文件

由编辑程序所建立的.ASM文件只是一个文本文件,计算机无法直接运行该文件。需要经过汇编程序的汇编,使其转换为目标代码文件。它是通过调用宏汇编MASM程序完成这一汇编操作的。汇编程序还将对源程序进行语法检查,如发现有错,将给出错误原因。程序设计者可根据它分析和修改源程序,并再经过汇编,直到无误为止,此时得到的是一个目标文件(.OBJ)。第10章汇编语言程序设计上机指导10.1.2汇编语言源程序上机操作步骤

从编写好的33.目标文件

目标文件为浮动的相对地址,是不可以直接执行的。必须经过连接,把有关模块连接在一起构成统一的编址,从而为运行提供条件。在运行时,装填到内存中的具体位置由段地址来确定。连接过程是由LINK连接程序实现的。此时得到的是一个可执行文件(.EXE文件)。

4.运行可执行文件

得到该可执行文件后,就可以直接调用运行该可执行文件。如果程序设计正确,则可获得正确的运行结果。但对于一个较大的程序,往往会有很多设计上的逻辑错误,不可能一次就得到正确的结果。返回本章首页第10章汇编语言程序设计上机指导3.目标文件

目标文件为浮动的相对地址,是不410.2.1汇编程序的类别

经过编辑程序所建立的汇编语言源程序,是不能直接在计算机上运行的,必须经过汇编、连接后才能运行。目前使用的汇编程序中,主要有Microsoft公司的宏汇编MASM5.0和MASM6.11及Borland公司的TruboAssember5.0等版本,它们的基本功能是相似的,但高版本功能更强一些。另外,MASM6.11系统所提供的编程集成环境PWB将源程序的编辑、汇编、连接和运行集成在一起,也是一种不错的选择。MASM5.0支持80386以下CPU的指令集,以下以MASM5.0为例介绍汇编程序。10.2汇编程序第10章汇编语言程序设计上机指导10.2.1汇编程序的类别

经过编辑程序所建立的汇编510.2.2汇编过程

宏汇编程序是二次扫描的汇编程序,它两次从头到尾逐行扫描源程序完成汇编过程。第一次扫描用来定义源程序每个行的相对位置。汇编程序中有一个软件计数器,称为定位计数器或地址计数器LC(LocationCounter)。当每个段开始时,LC复位(LC=0)。汇编程序在逐行扫描中,LC按每行指令的字节数进行计数。读入一个源程序行后,先查看其是否为伪指令,若为伪指令则LC不计数,否则将指令长度(指令字节数)送L。再检查此行语句是否有标号,若有则把标号写到一个符号表中,并且把现行LC(即为上一条指令的计数结果)赋给标号且填入符号表中,然后将LC+L→LC,形成下一条指令的地址,即这条指令在段中的相对位置,称为段内偏移量。若语句没有标号则直接将LC十L→LC及其后的操作,其它行按同样的方法处理,直至扫描到END指令时结束第一次扫描,这样通过第一次扫描可将源程序中的标号、变量的偏移量等填进符号表中,从而构成并得到了各条指令的相对地址和一张符号表。在第一次扫描时还计算出了源程序机器码的总长度,并可检查出一些语法错误,但不产生机器码。第10章汇编语言程序设计上机指导10.2.2汇编过程

宏汇编程序是二次扫描的汇编程6汇编程序的第二次扫描是把汇编指令翻译成机器码,它根据汇编程序中的指令代码表找到汇编指令助记符对应的机器指令操作码,再根据第一次扫描产生的符号表,将指令中的符号操作数在符号表中查到,并找到其偏移值,从而将每条汇编指令翻译成机器代码并写到目标程序文件中去。在第二次扫描时,还要进行语法检查,将第一次扫描时未检查到的语法错误查出并显示。在第二次扫描后除了产生出目标程序文件(.OBJ)外,还可根据需要产生列表文件(.LST)和交叉索引文件(.CRF)。第10章汇编语言程序设计上机指导汇编程序的第二次扫描是把汇编指令翻译成机器码,它根据7其中:

·目标程序文件——其扩展名为.OBJ。在这个程序文件中,操作码部分已变成了机器码,可由机器识别,但地址操作数部分只是一个可浮动的相对地址,而不是内存中的绝对地址。

·列表文件——其扩展名为.LST。此文件包含源程序及其注释、地址和目标码(即汇编后的目标程序)。它们都是用ASCII码表示的文本文件,需要时可用编辑程序将其打开以供查阅。

·交叉索引文件——其扩展名为.CRF。交叉索引文件是用来了解源程序中每个符号是在哪里定义的。哪些指令用到了这个符号,给出该指令的行号。交叉索引文件对较大的程序很有用,可以用来帮助查错。要把交叉索引文件打印出来,必须用CREF程序生成交叉索引列表文件,然后用编辑程序等查看。第10章汇编语言程序设计上机指导其中:

·目标程序文件——其扩展名为.OBJ。在这个810.2.3操作过程

首先启动操作系统,假设MASM系统(以MASM5.0为例)已预先装在硬盘的MASM子目录中。下面均以C盘上操作为例进行说明。假设事先用编辑程序编辑的源程序为yfile.ASM,则汇编过程如下:C:\MASM\masmMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Sourcefilename[.ASM]:MyfileObjectfilename[.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:51698+417454BytessymbolspacefreeOWarningErrorsOSevereErrors第10章汇编语言程序设计上机指导10.2.3操作过程

首先启动操作系统,假设MAS9宏汇编程序被调入以后,先显示版本号。然后依次提出提示,请求用户回答。

第一行提问被汇编的源文件的名字,方括号内表示此文件带有后缀.ASM(.ASM是该源程序文件的隐含扩展名),此时应键入将要汇编的源程序文件的名字,并按回车键。

第二行提问汇编后目标文件的名字,括号中的名字表示约定的文件名(其文件名部分自动采用源程序文件名),若采用这个名字则直接键入回车键,否则键入另起的名字。第10章汇编语言程序设计上机指导宏汇编程序被调入以后,先显示版本号。然后依次提出提示10第三行提问是否要建立列表文件。括号中的NUL为“空”的意思,表示不建立列表文件。若要建立列表文件,则需键入文件名,名字任选,也可同源程序文件名。但后缀必须为.LST,后缀可由用户连同文件名一起键入,也可不键入,即自动采用隐含值。如果不需要建立列表文件,则在第三行提问后直接按回车键。

第四行是询问是否要建立交叉索引文件,括号中的意义同第三行,若不需交叉索引文件,可直接按回车键,否则键入交叉索引文件名。第10章汇编语言程序设计上机指导第三行提问是否要建立列表文件。括号中的NUL为“空”11也可以直接用下面的命令进行汇编:

C:\MASM\MASMMyfile

提示同上。第10章汇编语言程序设计上机指导也可以直接用下面的命令进行汇编:

C:\MASM\MASM12用EDIT编辑程序观看列表文件的操作步骤如下: C:\MASM\EDIT文件名.LST汇编后,也可查看交叉索引文件,以了解源程序中的符号定义和引用情况。其操作步骤如下: C:\MASM\CREF Creffilename[.CRF]:交叉索引文件名 Listfilename[filename.REF]: C:\MASM\EDITfilename.REF在第一行提示下,打入汇编时在第四行询问时所键入的交叉索引文件名。第二行提示,可直接回车,表示采用括号中的文件名。第三行的EDIT程序就可列出交叉索引的列表文件了。如果在汇编时没有要求产生交叉索引文件,当然也就无需用CREF产生交叉索引文件了。返回本章首页第10章汇编语言程序设计上机指导用EDIT编辑程序观看列表文件的操作步骤如下:返回本1310.3.1连接程序的作用

由汇编程序生成的目标程序文件仍然不能执行,必须经过连接程序LINK连接以后,才能变成可执行文件。因为目标程序文件中有些指令地址还未完全确定,因此仍未成为可以用操作系统装入的程序形式。再者可能要将几个目标文件组合成一个功能更强的实用文件,甚至要和某些高级语言的目标程序文件进行组合,这些都要由连接程序LINK来完成。通过连接程序可将若干个目标文件连接成一个地址可浮动的、可由操作系统装入程序对地址定位的可执行文件。10.3连接程序第10章汇编语言程序设计上机指导10.3.1连接程序的作用

由汇编程序生成的目标程14这里要注意的是:连接程序LINK并不仅是为汇编语言程序所专用的。它作为Microsoft的80X86目标连接程序,可将宏汇编或高级语言(例如C、PASCAL等)编译生成的目标文件连接在一起,成为一个可执行程序。并以后缀为.EXE的文件方式存盘。在操作系统命令提示符下,可直接输入该文件名来执行这个程序。第10章汇编语言程序设计上机指导这里要注意的是:连接程序LINK并不仅是为汇编语言程1510.3.2连接过程

在连接之前,源程序必须通过汇编或编译成为目标文件。在执行连接操作时,以一定的格式将这些目标文件与需要的库文件一起提供给连接程序。连接程序将它们的代码和数据进行组合,成为可执行文件。操作系统能够利用装入程序将可执行文件加载到内存的适当位置,然后运行之。注意:连接程序LINK只能处理在1MB地址以下运行的程序。第10章汇编语言程序设计上机指导10.3.2连接过程

在连接之前,源程序必须通过汇1610.3.3LINK的使用与操作

LINK连接目标文件有两种常用的操作方式:

·会话方式

·命令方式

不论在哪种操作方式下,若想停止连接程序的工作,可按CTRL+C键来中断LINK程序的执行。第10章汇编语言程序设计上机指导10.3.3LINK的使用与操作

LINK连接目标文171.会话方式

首先在含有LINK程序的软盘插入软盘驱动器中,或预先将其存在硬盘上。在操作系统命令提示符下键入LINK,连接程序就被调入。LINK程序将显示有关信息并依次给出提示信息请用户逐行回答。屏幕显示如下:C:\MASM\LINKMicrosoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.ObjectModules[.OBJ]:myfileRunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:Warning:nostacksegment第10章汇编语言程序设计上机指导1.会话方式

首先在含有LINK程序的软盘插入软盘驱18第一行提示要求输入目标模块名。此时应键入你要连接的目标文件名(后缀.OBJ可省略,LINK程序自动加上.OBJ为后缀)。若要连接的是多个目标模块时,一定要用“+”号或空格将每个文件名分开。如果输入的名字一行放不下,就在该行的最后输入一个“+”号,然后按回车键,这时连接程序就提示用户追加目标文件。所有目标文件输入完后回车。

第二行提示要求输入将要生成的可执行文件的文件名,括号内为LINK程序给出的隐含文件名,它与第一行提示中的目标模块名一样,只是将后缀换成.EXE。若第一行回答的目标模块是多个的话,则隐含的可执行文件名取为第一个目标文件名。此行可不输入文件名而直接回车。第10章汇编语言程序设计上机指导第一行提示要求输入目标模块名。此时应键入你要连接的目19第三行提示问是否要建立列表(映象)文件,若要建立,可键入列表文件名,这时可不输入扩展名,由LINK程序自动按隐含值.MAP为扩展名。如果不想要列表文件,此行提示时直接按回车键即可。

第四行提示问是否需要连接库文件。若不需要,则直接按回车键。所谓库文件,是一些经常使用的目标文件的集合。它是为了提高效率,为了调试的方便而建立的。宏汇编语言可以把一些经常使用的子程序段单独汇编。这些单独汇编和调试的程序作为外部子程序,将它们以目标文件的形式存储起来而成为一个文件库。可把若干个目标文件集中起来,组成一个文件库,由库管理程序LIB对其进行编辑管理。第10章汇编语言程序设计上机指导第三行提示问是否要建立列表(映象)文件,若要建立,可20【例10.1】连接目标模块ex1.OBJ,ex2.OBJ,ex3.OBJ建立一个名为ex1.EXE的可执行文件。

操作如下:

C:\MASM\LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.

ObjectModules[OBJ]:ex1+ex2+

ObjectModules[.OBJ]:ex3/pause

RunFile[EX1.EXE]:

ListFile[NULMAP]:

Libraries[.LIB]:第10章汇编语言程序设计上机指导【例10.1】连接目标模块ex1.OBJ,ex2.OBJ,21第一行目标模块没输完,最后键入“+”号,则LINK程序。

第二行继续提示输入目标模块。第二行末尾的”/pause”为LINK程序的可选择的参数项。这里键入了这个参数,表示当几个目标模块不在一张磁盘上时,连接过程中需要换盘。在换盘时此参数可使连接程序暂停,待换好盘后继续执行。

第三行键入回车表示执行程序名选择括号里提示的名字。

第四行键入回车表示不建立列表文件。

第五行键入回车表示连接过程中不需要用文件库中的目标模块。第10章汇编语言程序设计上机指导第一行目标模块没输完,最后键入“+”号,则LINK程22【例10.2】连接目标模块ex1.OBJ,ex2.OBJ程序时用到了A驱动器上LIB目录下的库文件EX.LIB,可执行文件名为exa.EXE,建立一个名为aaa.MAP的映象(列表)文件。

操作过程:

C:\MASM\LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.

ObjectModules[.OBJ]:ex1+ex2

RunFile[EX1.EXE]:exa.exe

ListFile[NUL-MAP]:aaa

Libraries[.LIB]:a:\lib\ex

注:关于库文件的建立方法见10.3.4节。第10章汇编语言程序设计上机指导【例10.2】连接目标模块ex1.OBJ,ex2.OBJ程23目前常用的汇编语言调试工具主要有DEBUG、CodeView及TurboDebuger等,其中DEBUG通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。10.4调试工具第10章汇编语言程序设计上机指导目前常用的汇编语言调试工具主要有DEBUG、Code2410.4.1DEBUG程序的调用

在操作系统的命令提示符下,可键入命令:

C:\MASM\DEBUG[d:][PATH][filename][.ext]][parm1][parm2]

其中,文件名是被调试文件的名字。如用户键入文件名,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的d指定驱动器,PATH为路径,parm1和parm2则为运行被调试文件时所需要的命令参数。

在DEBUG程序调入后,将出现提示符“-”,此时就可用DEBUG命令来调试程序。第10章汇编语言程序设计上机指导10.4.1DEBUG程序的调用

在操作系统的命令提2510.4.2DEBUG的主要命令

1.显示存储单元的命令D(DUMP),格式为:

-D[address]或

-D[range]

例如,按指定范围显示存储单元内容的方法为:

-D100120

18E4:0100726F7220720D6164-696E672064726976rorr.adingdriv

18E4:01107375246669636965-6E74206D656D6F72su.ficientmemor

其中0100H至011FH是DEBUG显示的单元内容。左边用10六进制表示每个字节,右边用ASCII字符表示每个字节,“.”表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。

第10章汇编语言程序设计上机指导10.4.2DEBUG的主要命令

1.显示存储单元的命令26

2.修改存储单元内容的命令E(Enter)

此命令有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为:

-Eaddress[list]

例如,-Eds:100F5’OK’78

其中F5,’O’,’K’和78各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。第10章汇编语言程序设计上机指导

2.修改存储单元内容的命令E(Enter)

此命令27第二种格式则是采用逐个单元相继修改的方法。命令格式为:

-Eadress

例如,-Ees:100

则可能显示为:

18E4:010089.-

如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如:

18E4:010089.781B.-

这样,用户可以不断修改相继单元的内容,直到用Enter键结束该命令为止。第10章汇编语言程序设计上机指导第二种格式则是采用逐个单元相继修改的方法。命令格式为284.检查和修改寄存器内容的命令R(Register)

它有三种格式如下:

(1)显示CPU内所有寄存器内容和标志位状态,其格式为:

-R

例如:

-R

AX=0000BX=0000CX=010ADX=0000SP=FFFEEP=0000SI=0000DI=0000

DS=18E4ES=18E4SS=18E4CS=18E4IP=0100NVUPDIPLNZNAPONC

18E4:0100C70604023801MOVWORDPTR[0204],0138DS:0204=0138

其中标志位状态的含义如下:第10章汇编语言程序设计上机指导4.检查和修改寄存器内容的命令R(Register)

29表10.1DEBUG中标志位的符号表示标志名称溢出OF方向DF中断IF符号SF零ZF辅助进位AF奇偶PF进位CF置位状态OVDNEINGZRACPECY复位状态NVUPDIPLNZNAPONC第10章汇编语言程序设计上机指导表10.1DEBUG中标志位的符号表示标志名称溢出方向30(2)显示和修改某个寄存器内容,其格式为:

-Rregistername

例如,键入

-RAX

系统将响应如下:

AXFlF4

即AX寄存器的当前内容为F1F4,如不修改则按Enter键,否则,可键入欲修改的内容,如:

-RBX

BX0369

:059F

则把BX寄存器的内容修改为059FH。第10章汇编语言程序设计上机指导(2)显示和修改某个寄存器内容,其格式为:

-Rr31(3)显示和修改标志位状态,命令格式为:

-RF

系统将响应,如:

OVDNEINGZRACPECY-

此时,如不修改其内容可按Enter键,否则,可键入欲修改的内容,如:

OVDNEINGZRACPECY-PONZDINV

可见键入的顺序可以是任意的,且标志间也可不用空格。第10章汇编语言程序设计上机指导(3)显示和修改标志位状态,命令格式为:

-RF

325.运行命令G(Go),其格式为:

-G[=address1][address2[address3...]]

其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。第10章汇编语言程序设计上机指导5.运行命令G(Go),其格式为:

-G[=addre336.跟踪命令T(Trace),有两种格式:

(1)逐条指令跟踪

-T[=adress]

从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。

(2)多条指令跟踪

-T[=address][Value]

从指定地址起执行n条指令后停下来,n由value指定。第10章汇编语言程序设计上机指导6.跟踪命令T(Trace),有两种格式:

(1)逐条347.程序步跟踪命令P(Programmingstep)

由于T命令在遇到操作系统或BIOS中断时会跟踪到中断服务程序内部,有时出现死机现象,因而可用步跟踪命令P(Programmingstep)代替T命令,以避免上述现象。P命令的使用格式为:

-P[=address][Value]第10章汇编语言程序设计上机指导7.程序步跟踪命令P(Programmingstep)

358.汇编命令A(Assemble),其格式为:

-A[address]

该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:

DEBUG把键入的数字均看成10六进制数,所以如要键入10进制数,则其后应加以说明,如100D。第10章汇编语言程序设计上机指导8.汇编命令A(Assemble),其格式为:

-A[369.反汇编命令U(Unassemble),有两种格式。

(1)从指定地址开始,反汇编32个字节,其格式为:

-U[address]

例如:

-U100

18E4:0100C70604023801 MOVWORDRTR[0204],0138

18E4:0106C70606020002 MOVWORDPTR[0206],0200

18E4:010CC70608020202 MOVWORDPIR[0208],0202

18E4:0112BB0402 MOVBX,0204

18E4:0115E80200 CALL011A

18E4:0118CD20 INT20

如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。

第10章汇编语言程序设计上机指导9.反汇编命令U(Unassemble),有两种格式。

(137(2)对指定范围内的存储单元进行反汇编,格式为:

-U[range]

例如:

-U10010C

18E4:0100C70604023801 MOVWORDPTR[0204],0138

18E4:0106C70606020002 MOVWORDPTR[0206],0200

18E4:010CC70608020202MOVWORDPTR[0208],0202

-U100112

18E4:0100C70604023801 MOVWORDPTR[0204],0138

18E4:0106C70606020002 MOVWORDPTR[0206],0200

18E4:010CC70608020202 MOVWORDPTR[0208],0202

可见这两种格式是等效的。第10章汇编语言程序设计上机指导(2)对指定范围内的存储单元进行反汇编,格式为:

3817.输入命令I(Input)。其格式为:-Iportaddress(portaddress为端口号)其功能是从指定的端口输入一个字节并显示出来。例如:-I2F8FF它表示从02F8H端口读出的内容值为0FFH。第10章汇编语言程序设计上机指导17.输入命令I(Input)。其格式为:第10章汇编3918.输出命令O(Output)。其格式为:-Oportaddressbyte(portaddress为端口号)其功能是向指定的端口输出一个字节。例如:-O2F9B7它表示将字节值0B7H输出到端口2F9H中。19.退出DEBUG命令Q(Quit),其格式为:-Q它退出DEBUG,返回操作系统。本命令并无存盘功能,如需存盘应先使用W命令。返回本章首页第10章汇编语言程序设计上机指导18.输出命令O(Output)。其格式为:19.退出DEB40汇编语言程序设计是一门实践性很强的课程。编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。建立程序、调试程序需要一些应用程序的帮助。本章主要讲述了一些与上机操作有关的应用程序,如MASM、LINK、DEBUG、PWB等。对于一个掌握汇编语言程序设计的人来说,应熟练掌握以上知识。本章小结返回本章首页第10章汇编语言程序设计上机指导汇编语言程序设计是一门实践性很强的课程。编写程序、上4110.1汇编语言程序设计上机概述10.2汇编程序10.3连接程序10.4调试工具第10章汇编语言程序设计上机指导10.1汇编语言程序设计上机概述第10章汇编语言程序4210.1汇编语言程序设计上机概述10.1.1上机环境为了对包括Pentium指令在内的汇编语言的源程序文件进行汇编,应有一台Pentium以上的计算机。操作系统使用DOS5.0以上版本或在Windows操作系统命令提示符下进行。编辑程序可用EDIT等。MASM5.0以上宏汇编系统,包括:

(1)MASM:汇编程序 (2)LINK:连接程序 (3)CREF:索引程序 (4)LIB:库管理程序用DEBUG调试程序时,假定后面的内容假定在C盘上建立了MASM子目录,且上述程序都在该目录中或建立了相应路径。第10章汇编语言程序设计上机指导10.1汇编语言程序设计上机概述10.1.1上机环4310.1.2汇编语言源程序上机操作步骤

从编写好的汇编语言源程序到计算机可以运行这个程序,中间要经历一些步骤。可以归纳如下:

1.编辑源文件

根据给定的任务编写程序。一般在编辑过程中总会有错误产生,因此还要进行人工检查、重新编辑修改,直到所编辑的源程序认为无误为止。最后将它以一个源程序文件(.ASM文件)存盘。

2.汇编源程序文件

由编辑程序所建立的.ASM文件只是一个文本文件,计算机无法直接运行该文件。需要经过汇编程序的汇编,使其转换为目标代码文件。它是通过调用宏汇编MASM程序完成这一汇编操作的。汇编程序还将对源程序进行语法检查,如发现有错,将给出错误原因。程序设计者可根据它分析和修改源程序,并再经过汇编,直到无误为止,此时得到的是一个目标文件(.OBJ)。第10章汇编语言程序设计上机指导10.1.2汇编语言源程序上机操作步骤

从编写好的443.目标文件

目标文件为浮动的相对地址,是不可以直接执行的。必须经过连接,把有关模块连接在一起构成统一的编址,从而为运行提供条件。在运行时,装填到内存中的具体位置由段地址来确定。连接过程是由LINK连接程序实现的。此时得到的是一个可执行文件(.EXE文件)。

4.运行可执行文件

得到该可执行文件后,就可以直接调用运行该可执行文件。如果程序设计正确,则可获得正确的运行结果。但对于一个较大的程序,往往会有很多设计上的逻辑错误,不可能一次就得到正确的结果。返回本章首页第10章汇编语言程序设计上机指导3.目标文件

目标文件为浮动的相对地址,是不4510.2.1汇编程序的类别

经过编辑程序所建立的汇编语言源程序,是不能直接在计算机上运行的,必须经过汇编、连接后才能运行。目前使用的汇编程序中,主要有Microsoft公司的宏汇编MASM5.0和MASM6.11及Borland公司的TruboAssember5.0等版本,它们的基本功能是相似的,但高版本功能更强一些。另外,MASM6.11系统所提供的编程集成环境PWB将源程序的编辑、汇编、连接和运行集成在一起,也是一种不错的选择。MASM5.0支持80386以下CPU的指令集,以下以MASM5.0为例介绍汇编程序。10.2汇编程序第10章汇编语言程序设计上机指导10.2.1汇编程序的类别

经过编辑程序所建立的汇编4610.2.2汇编过程

宏汇编程序是二次扫描的汇编程序,它两次从头到尾逐行扫描源程序完成汇编过程。第一次扫描用来定义源程序每个行的相对位置。汇编程序中有一个软件计数器,称为定位计数器或地址计数器LC(LocationCounter)。当每个段开始时,LC复位(LC=0)。汇编程序在逐行扫描中,LC按每行指令的字节数进行计数。读入一个源程序行后,先查看其是否为伪指令,若为伪指令则LC不计数,否则将指令长度(指令字节数)送L。再检查此行语句是否有标号,若有则把标号写到一个符号表中,并且把现行LC(即为上一条指令的计数结果)赋给标号且填入符号表中,然后将LC+L→LC,形成下一条指令的地址,即这条指令在段中的相对位置,称为段内偏移量。若语句没有标号则直接将LC十L→LC及其后的操作,其它行按同样的方法处理,直至扫描到END指令时结束第一次扫描,这样通过第一次扫描可将源程序中的标号、变量的偏移量等填进符号表中,从而构成并得到了各条指令的相对地址和一张符号表。在第一次扫描时还计算出了源程序机器码的总长度,并可检查出一些语法错误,但不产生机器码。第10章汇编语言程序设计上机指导10.2.2汇编过程

宏汇编程序是二次扫描的汇编程47汇编程序的第二次扫描是把汇编指令翻译成机器码,它根据汇编程序中的指令代码表找到汇编指令助记符对应的机器指令操作码,再根据第一次扫描产生的符号表,将指令中的符号操作数在符号表中查到,并找到其偏移值,从而将每条汇编指令翻译成机器代码并写到目标程序文件中去。在第二次扫描时,还要进行语法检查,将第一次扫描时未检查到的语法错误查出并显示。在第二次扫描后除了产生出目标程序文件(.OBJ)外,还可根据需要产生列表文件(.LST)和交叉索引文件(.CRF)。第10章汇编语言程序设计上机指导汇编程序的第二次扫描是把汇编指令翻译成机器码,它根据48其中:

·目标程序文件——其扩展名为.OBJ。在这个程序文件中,操作码部分已变成了机器码,可由机器识别,但地址操作数部分只是一个可浮动的相对地址,而不是内存中的绝对地址。

·列表文件——其扩展名为.LST。此文件包含源程序及其注释、地址和目标码(即汇编后的目标程序)。它们都是用ASCII码表示的文本文件,需要时可用编辑程序将其打开以供查阅。

·交叉索引文件——其扩展名为.CRF。交叉索引文件是用来了解源程序中每个符号是在哪里定义的。哪些指令用到了这个符号,给出该指令的行号。交叉索引文件对较大的程序很有用,可以用来帮助查错。要把交叉索引文件打印出来,必须用CREF程序生成交叉索引列表文件,然后用编辑程序等查看。第10章汇编语言程序设计上机指导其中:

·目标程序文件——其扩展名为.OBJ。在这个4910.2.3操作过程

首先启动操作系统,假设MASM系统(以MASM5.0为例)已预先装在硬盘的MASM子目录中。下面均以C盘上操作为例进行说明。假设事先用编辑程序编辑的源程序为yfile.ASM,则汇编过程如下:C:\MASM\masmMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Sourcefilename[.ASM]:MyfileObjectfilename[.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:51698+417454BytessymbolspacefreeOWarningErrorsOSevereErrors第10章汇编语言程序设计上机指导10.2.3操作过程

首先启动操作系统,假设MAS50宏汇编程序被调入以后,先显示版本号。然后依次提出提示,请求用户回答。

第一行提问被汇编的源文件的名字,方括号内表示此文件带有后缀.ASM(.ASM是该源程序文件的隐含扩展名),此时应键入将要汇编的源程序文件的名字,并按回车键。

第二行提问汇编后目标文件的名字,括号中的名字表示约定的文件名(其文件名部分自动采用源程序文件名),若采用这个名字则直接键入回车键,否则键入另起的名字。第10章汇编语言程序设计上机指导宏汇编程序被调入以后,先显示版本号。然后依次提出提示51第三行提问是否要建立列表文件。括号中的NUL为“空”的意思,表示不建立列表文件。若要建立列表文件,则需键入文件名,名字任选,也可同源程序文件名。但后缀必须为.LST,后缀可由用户连同文件名一起键入,也可不键入,即自动采用隐含值。如果不需要建立列表文件,则在第三行提问后直接按回车键。

第四行是询问是否要建立交叉索引文件,括号中的意义同第三行,若不需交叉索引文件,可直接按回车键,否则键入交叉索引文件名。第10章汇编语言程序设计上机指导第三行提问是否要建立列表文件。括号中的NUL为“空”52也可以直接用下面的命令进行汇编:

C:\MASM\MASMMyfile

提示同上。第10章汇编语言程序设计上机指导也可以直接用下面的命令进行汇编:

C:\MASM\MASM53用EDIT编辑程序观看列表文件的操作步骤如下: C:\MASM\EDIT文件名.LST汇编后,也可查看交叉索引文件,以了解源程序中的符号定义和引用情况。其操作步骤如下: C:\MASM\CREF Creffilename[.CRF]:交叉索引文件名 Listfilename[filename.REF]: C:\MASM\EDITfilename.REF在第一行提示下,打入汇编时在第四行询问时所键入的交叉索引文件名。第二行提示,可直接回车,表示采用括号中的文件名。第三行的EDIT程序就可列出交叉索引的列表文件了。如果在汇编时没有要求产生交叉索引文件,当然也就无需用CREF产生交叉索引文件了。返回本章首页第10章汇编语言程序设计上机指导用EDIT编辑程序观看列表文件的操作步骤如下:返回本5410.3.1连接程序的作用

由汇编程序生成的目标程序文件仍然不能执行,必须经过连接程序LINK连接以后,才能变成可执行文件。因为目标程序文件中有些指令地址还未完全确定,因此仍未成为可以用操作系统装入的程序形式。再者可能要将几个目标文件组合成一个功能更强的实用文件,甚至要和某些高级语言的目标程序文件进行组合,这些都要由连接程序LINK来完成。通过连接程序可将若干个目标文件连接成一个地址可浮动的、可由操作系统装入程序对地址定位的可执行文件。10.3连接程序第10章汇编语言程序设计上机指导10.3.1连接程序的作用

由汇编程序生成的目标程55这里要注意的是:连接程序LINK并不仅是为汇编语言程序所专用的。它作为Microsoft的80X86目标连接程序,可将宏汇编或高级语言(例如C、PASCAL等)编译生成的目标文件连接在一起,成为一个可执行程序。并以后缀为.EXE的文件方式存盘。在操作系统命令提示符下,可直接输入该文件名来执行这个程序。第10章汇编语言程序设计上机指导这里要注意的是:连接程序LINK并不仅是为汇编语言程5610.3.2连接过程

在连接之前,源程序必须通过汇编或编译成为目标文件。在执行连接操作时,以一定的格式将这些目标文件与需要的库文件一起提供给连接程序。连接程序将它们的代码和数据进行组合,成为可执行文件。操作系统能够利用装入程序将可执行文件加载到内存的适当位置,然后运行之。注意:连接程序LINK只能处理在1MB地址以下运行的程序。第10章汇编语言程序设计上机指导10.3.2连接过程

在连接之前,源程序必须通过汇5710.3.3LINK的使用与操作

LINK连接目标文件有两种常用的操作方式:

·会话方式

·命令方式

不论在哪种操作方式下,若想停止连接程序的工作,可按CTRL+C键来中断LINK程序的执行。第10章汇编语言程序设计上机指导10.3.3LINK的使用与操作

LINK连接目标文581.会话方式

首先在含有LINK程序的软盘插入软盘驱动器中,或预先将其存在硬盘上。在操作系统命令提示符下键入LINK,连接程序就被调入。LINK程序将显示有关信息并依次给出提示信息请用户逐行回答。屏幕显示如下:C:\MASM\LINKMicrosoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.ObjectModules[.OBJ]:myfileRunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:Warning:nostacksegment第10章汇编语言程序设计上机指导1.会话方式

首先在含有LINK程序的软盘插入软盘驱59第一行提示要求输入目标模块名。此时应键入你要连接的目标文件名(后缀.OBJ可省略,LINK程序自动加上.OBJ为后缀)。若要连接的是多个目标模块时,一定要用“+”号或空格将每个文件名分开。如果输入的名字一行放不下,就在该行的最后输入一个“+”号,然后按回车键,这时连接程序就提示用户追加目标文件。所有目标文件输入完后回车。

第二行提示要求输入将要生成的可执行文件的文件名,括号内为LINK程序给出的隐含文件名,它与第一行提示中的目标模块名一样,只是将后缀换成.EXE。若第一行回答的目标模块是多个的话,则隐含的可执行文件名取为第一个目标文件名。此行可不输入文件名而直接回车。第10章汇编语言程序设计上机指导第一行提示要求输入目标模块名。此时应键入你要连接的目60第三行提示问是否要建立列表(映象)文件,若要建立,可键入列表文件名,这时可不输入扩展名,由LINK程序自动按隐含值.MAP为扩展名。如果不想要列表文件,此行提示时直接按回车键即可。

第四行提示问是否需要连接库文件。若不需要,则直接按回车键。所谓库文件,是一些经常使用的目标文件的集合。它是为了提高效率,为了调试的方便而建立的。宏汇编语言可以把一些经常使用的子程序段单独汇编。这些单独汇编和调试的程序作为外部子程序,将它们以目标文件的形式存储起来而成为一个文件库。可把若干个目标文件集中起来,组成一个文件库,由库管理程序LIB对其进行编辑管理。第10章汇编语言程序设计上机指导第三行提示问是否要建立列表(映象)文件,若要建立,可61【例10.1】连接目标模块ex1.OBJ,ex2.OBJ,ex3.OBJ建立一个名为ex1.EXE的可执行文件。

操作如下:

C:\MASM\LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.

ObjectModules[OBJ]:ex1+ex2+

ObjectModules[.OBJ]:ex3/pause

RunFile[EX1.EXE]:

ListFile[NULMAP]:

Libraries[.LIB]:第10章汇编语言程序设计上机指导【例10.1】连接目标模块ex1.OBJ,ex2.OBJ,62第一行目标模块没输完,最后键入“+”号,则LINK程序。

第二行继续提示输入目标模块。第二行末尾的”/pause”为LINK程序的可选择的参数项。这里键入了这个参数,表示当几个目标模块不在一张磁盘上时,连接过程中需要换盘。在换盘时此参数可使连接程序暂停,待换好盘后继续执行。

第三行键入回车表示执行程序名选择括号里提示的名字。

第四行键入回车表示不建立列表文件。

第五行键入回车表示连接过程中不需要用文件库中的目标模块。第10章汇编语言程序设计上机指导第一行目标模块没输完,最后键入“+”号,则LINK程63【例10.2】连接目标模块ex1.OBJ,ex2.OBJ程序时用到了A驱动器上LIB目录下的库文件EX.LIB,可执行文件名为exa.EXE,建立一个名为aaa.MAP的映象(列表)文件。

操作过程:

C:\MASM\LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1985-1987.Allrightsreserved.

ObjectModules[.OBJ]:ex1+ex2

RunFile[EX1.EXE]:exa.exe

ListFile[NUL-MAP]:aaa

Libraries[.LIB]:a:\lib\ex

注:关于库文件的建立方法见10.3.4节。第10章汇编语言程序设计上机指导【例10.2】连接目标模块ex1.OBJ,ex2.OBJ程64目前常用的汇编语言调试工具主要有DEBUG、CodeView及TurboDebuger等,其中DEBUG通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。10.4调试工具第10章汇编语言程序设计上机指导目前常用的汇编语言调试工具主要有DEBUG、Code6510.4.1DEBUG程序的调用

在操作系统的命令提示符下,可键入命令:

C:\MASM\DEBUG[d:][PATH][filename][.ext]][parm1][parm2]

其中,文件名是被调试文件的名字。如用户键入文件名,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的d指定驱动器,PATH为路径,parm1和parm2则为运行被调试文件时所需要的命令参数。

在DEBUG程序调入后,将出现提示符“-”,此时就可用DEBUG命令来调试程序。第10章汇编语言程序设计上机指导10.4.1DEBUG程序的调用

在操作系统的命令提6610.4.2DEBUG的主要命令

1.显示存储单元的命令D(DUMP),格式为:

-D[address]或

-D[range]

例如,按指定范围显示存储单元内容的方法为:

-D100120

18E4:0100726F7220720D6164-696E672064726976rorr.adingdriv

18E4:01107375246669636965-6E74206D656D6F72su.ficientmemor

其中0100H至011FH是DEBUG显示的单元内容。左边用10六进制表示每个字节,右边用ASCII字符表示每个字节,“.”表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。

第10章汇编语言程序设计上机指导10.4.2DEBUG的主要命令

1.显示存储单元的命令67

2.修改存储单元内容的命令E(Enter)

此命令有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为:

-Eaddress[list]

例如,-Eds:100F5’OK’78

其中F5,’O’,’K’和78各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。第10章汇编语言程序设计上机指导

2.修改存储单元内容的命令E(Enter)

此命令68第二种格式则是采用逐个单元相继修改的方法。命令格式为:

-Eadress

例如,-Ees:100

则可能显示为:

18E4:010089.-

如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如:

18E4:010089.781B.-

这样,用户可以不断修改相继单元的内容,直到用Enter键结束该命令为止。第10章汇编语言程序设计上机指导第二种格式则是采用逐个单元相继修改的方法。命令格式为694.检查和修改寄存器内容的命令R(Register)

它有三种格式如下:

(1)显示CPU内所有寄存器内容和标志位状态,其格式为:

-R

例如:

-R

AX=0000BX=0000CX=010ADX=0000SP=FFFEEP=0000SI=0000DI=0000

DS=18E4ES=18E4SS=18E4CS=18E4IP=0100NVUPDIPLNZNAPONC

18E4:0100C70604023801MOVWORDPTR[0204],0138DS:0204=0138

其中标志位状态的含义如下:第10章汇编语言程序设计上机指导4.检查和修改寄存器内容的命令R(Register)

70表10.1DEBUG中标志位的符号表示标志名称溢出OF方向DF中断IF符号SF零ZF辅助进位AF奇偶PF进位CF置位状态OVDNEINGZRACPECY复位状态NVUPDIPLNZNAPONC第10章汇编语言程序设计上机指导表10.1DEBUG中标志位的符号表示标志名称溢出方向71(2)显示和修改某个寄存器内容,其格式为:

-Rregistername

例如,键入

-RAX

系统将响应如下:

AXFlF4

即AX寄存器的当前内容为F1F4,如不修改则按Enter键,否则,可键入欲修改的内容,如:

-RBX

BX0369

:059F

则把BX寄存器的内容修改为059FH。第10章汇编语言程序设计上机指导(2)显示和修改某个寄存器内容,其格式为:

-Rr72(3)显示和修改标志位状态,命令格式为:

-RF

系统将响应,如:

OVDNEINGZRACPECY-

此时,如不修改其内容可按Enter键,否则,可键入欲修改的内容,如:

OVDNEINGZRACPECY-PONZDINV

可见键入的顺序可以是任意的,且标志间也可不用空格。第10章汇编语言程序设计上机指导(3)显示和修改标志位状态,命令格式为:

-RF

735.运行命令G(Go),其格式为:

-G[=address1][address2[address3...]]

温馨提示

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

最新文档

评论

0/150

提交评论