首页 理论教育 微机原理与接口技术-开发软件介绍

微机原理与接口技术-开发软件介绍

时间:2023-11-16 理论教育 版权反馈
【摘要】:在DOS环境下开发汇编语言程序,除了要有DOS操作系统外,还必须具备以下软件:编辑软件、宏汇编程序MASM.EXE、连接程序LINK.EXE、交叉引用文件处理程序CREF.EXE、库管理程序LIB.EXE、调试程序DEBUG.COM等,下面对其中主要的程序作简单介绍。获得以上三个文件的基础是源程序没有语法错误。中括号表示可以先不调入程序,进入DEBUG监控状态后再用相应的命令调入程序。

微机原理与接口技术-开发软件介绍

在DOS环境下开发汇编语言程序,除了要有DOS操作系统外,还必须具备以下软件:编辑软件、宏汇编程序MASM.EXE、连接程序LINK.EXE、交叉引用文件处理程序CREF.EXE、库管理程序LIB.EXE、调试程序DEBUG.COM等,下面对其中主要的程序作简单介绍。

1.编辑软件

编辑程序除了常用的DOS环境下的EDIT.EXE外,其他编辑程序也都可以使用。

2.宏汇编程序MASM.EXE

MASM是在DOS环境下运行的一种功能很强的宏汇编程序。它除了具有一般汇编程序的功能外,还具有宏处理、条件汇编及其他多种功能。MASM的主要功能包括以下内容:产生可再定位的目标文件(.OBJ);处理各种伪指令;允许用户定义宏指令并建立自己的宏库;提供包括源程序、目标程序以及符号表在内的汇编列表文件(.LST),并给出语法出错提示;提供一个夹有特定控制字符的符号交叉参考文件(.CRF)。

汇编程序可通过对源程序进行一次或多次扫描来实现以上功能。所谓扫描,就是汇编从头至尾逐行阅读源程序,一边阅读一边分析处理,直至碰到伪指令END为止。现在的汇编程序一般都采取对源程序进行两次扫描的方法,第一次确定用户自定义符号的值,第二次产生目标代码。MASM就是一个两次扫描的汇编程序,即两次扫描后,MASM就能将源程序翻译成目标程序,并同时实现以上所介绍的各项功能。

现假设已编辑好的源程序EXAM.ASM在C盘的MASM目录里,并且宏汇编程序也在该目录里,宏汇编程序的运行方式如下:

978-7-111-42233-4-Chapter04-84.jpg

该命令是调用宏汇编程序MASM对源程序EXAM.ASM进行汇编,并生成目标文件EXAM.OBJ。该命令用“;”号结束,这种方式使MASM不对用户提问而直接生成相应的文件,且按分号之前的文件名为生成的文件命名(扩展名不同)。若没有分号,则执行情况为:

978-7-111-42233-4-Chapter04-85.jpg

978-7-111-42233-4-Chapter04-86.jpg

这样生成三个文件:目标文件EXAM.OBJ、汇编列表文件EXAM.LST和交叉引用文件EXAM.CRF。获得以上三个文件的基础是源程序没有语法错误

3.连接程序LINK.EXE

源程序经汇编后获得目标文件,可对目标文件进行连接,获得可执行文件。连接程序的运行方式如下:

978-7-111-42233-4-Chapter04-87.jpg

执行该命令后,若连接过程没有错误,则生成可执行文件.EXE和地址分配信息文件.MAP;若有错误,则显示错误信息。

同样地也可按如下方式执行:

978-7-111-42233-4-Chapter04-88.jpg

执行该命令后,显示器显示:

978-7-111-42233-4-Chapter04-89.jpg

以上四个提示中,第一个提示询问要连接的目标文件名,直接键入文件名即可,若有多个模块需要连接,则在各文件名之间用“+”符号。第二个提示询问生成可执行文件名。第三个提示询问是否要建立地址分配文件,若键入文件名再回车表示要建立,直接回车表示不建立。第四个提示询问是否有要加入的库文件,如果没有建立相应的库文件,则直接回车。

当有几个程序模块连接时,还可按如下方式执行:

978-7-111-42233-4-Chapter04-90.jpg

生成的可执行文件以第一个模块名称命名。若一个程序由一个主模块和若干个子模块构成,连接时,主模块文件名一定要在所有的子模块名之前。

4.调试程序DEBUG

调试程序DEBUG.COM是一个交互式的机器语言程序的调试程序,它的作用是:提供一个控制测试的环境,以便用户能够监视和控制被调试程序的执行;可以直接确定程序中出现的问题,然后立即执行程序,以便判断这些问题是否已经解决;装入、修改或显示某个文件;执行用机器语言编写的可执行程序。

(1)DEBUG的调用

在DOS的提示符下,调用格式:

978-7-111-42233-4-Chapter04-91.jpg

文件名为要调试的程序名,扩展名只能是.COM或.EXE。执行DEBUG命令后把被调试程序调入主存。中括号表示可以先不调入程序,进入DEBUG监控状态后再用相应的命令调入程序。

在DEBUG程序调入主存后,出现提示符“-”,说明系统在DEBUG程序的管理之下,所有的DEBUG命令,只有在出现该提示符后才有效。

(2)DEBUG的主要命令

DEBUG命令的一些共同信息:DEBUG命令都是一个字母,后面跟有一个或多个参数;命令和参数可以用大写或小写或混合方式输入;命令和参数之间,可以用定界符(逗号或空格)分隔,但定界符只是在两个邻接的十六进制数之间是必需的;可以按<Ctrl+Break>组合键来停止一个命令的执行,返回DEBUG提示符;对于每一个命令,只有按了回车键以后才有效;若一个命令产生了相当多的输出行,为了能在屏幕上在一行卷走以前读清楚它,可以在显示过程中,按<Ctrl+NumLock>组合键,以暂停上卷动作;可以按任何一个键来继续上卷动作;若DEBUG检查出一个语法错误,则显示具有错误的行和指示错误所在;所有输入或显示的数均为十六进制数,每个十六进制数可由1~4个十六进制数字组成,其后不跟十六进制标志“H”。

①显示内存单元内容的命令D。命令格式:

D [地址]

或 D [范围]

其中,D是命令字母,[地址]或[范围]都是为了指定要显示的存储单元的范围。

存储单元的内容用两种方式显示:一种是每一个存储单元的内容(每一字节)用两位十六进制数显示;另一种是用相应的ASCII字符显示,点号(·)表示不可显示的字符。

显示有两种格式:若是40列系统显示格式,每一行显示8个字节;若是80列显示格式,每一行显示16个字节,第8、9字节间有一个连字符(-)。

显示命令有两种常用的格式:

a.从指定地址开始显示,命令格式:

D [地址]

或 D

若命令中指定了地址,则从指定地址开始,显示40H个字节(对应于40列显示格式)或80H个字节(对应80列显示格式)。若命令中没有指定起始地址,则从上一个D命令所显示的最后一个单元的下一个单元开始(若以前没有使用过D命令,则将DEBUG初始化的段寄存器的内容,加上地址偏量0100H作为起始地址)。若在命令所包含的地址参数中,只包含起始地址的偏移量,则D命令认为段地址包含在DS中。

b.显示指定范围的内容,命令格式:

D[范围]

在范围中包含起始地址和结束地址。若输入的起始地址中未包含段地址部分,则D命令认为段地址在DS中;而输入的结尾地址中,只允许有地址偏移量。

例如:

978-7-111-42233-4-Chapter04-92.jpg

显示DS:100H~DS:300H共201H个字节单元的内容。

②修改存储单元内容的命令E。有两种基本格式:

a.用命令给定的内容表去代替指定范围的内存单元的内容。命令格式:

E[地址][内容表]

例如:

978-7-111-42233-4-Chapter04-93.jpg

内存单元DS:100H开始的5个字节的内容由其后表中给定的5个字节的内容所代替,该命令执行后,这5个单元的内容依次为0F3H、58H、59H、5AH、8DH。

b.单个单元地址连续修改方式。命令格式:

978-7-111-42233-4-Chapter04-94.jpg

执行上述命令后,屏幕上显示指定单元的地址和原有的内容,可以采用下面方法修改:输入一个字节的十六进制数,以代替原单元中的内容,然后按空格键,则该单元的内容修改,并显示下一个单元的地址和原有的内容,可继续修改;若某一单元的内容不需要修改,而操作要进行下去,则可直接按空格键;可以输入一个连字符“-”,显示前一个单元的地址和内容,可进行修改,再按“-”,则又显示前一个单元的地址和内容,可以连续地修改;若所示的前一单元的内容不需要修改,可直接按“-”;按回车键结束此命令。

③检查和修改寄存器内容的命令R。R命令有三种功能:显示CPU内部的所有寄存器的内容和全部标志位的状态;显示和修改一个指定的寄存器的内容;显示和修改所有标志位的状态。

下面分别介绍实现这三种功能的命令格式及用法:

a.显示CPU内部所有寄存器的内容和全部标志位的状态命令。

命令格式: R

例如:

978-7-111-42233-4-Chapter04-95.jpg

则显示:

978-7-111-42233-4-Chapter04-96.jpg

前两行显示了所有CPU内部寄存器的内容和全部标志的状态(下面进行说明),第三行显示了现行CS:IP所指的指令的机器码以及汇编指令,该指令为下一条即将要执行的指令。

b.显示和修改一个指定寄存器内容的命令。

命令格式: R[寄存器名]

执行该指令后,首先显示指定寄存器的内容,接着可进行以下操作:若不需要改变其内容,直接按回车键;若需要改变其内容,可输入1~4个十六进制数后按回车键。

c.显示和修改标志位状态的命令。

命令格式: RF

执行该指令后系统可能显示如下信息:

978-7-111-42233-4-Chapter04-97.jpg

这里表示的是除跟踪标志T以外的其他8个标志的状态位,这8个标志的显示次序和符号见表4-1。

表4-18 个标志的显示次序和符号(www.xing528.com)

978-7-111-42233-4-Chapter04-98.jpg

执行该命令后,可以采取以下两种之一的操作:若不需要修改任一个已设置的标志状态,可直接按回车键;若有一个或多个标志需要修改,则可以输入此标志的相反的值。输入的各个标志值之间可以没有空格,按回车键,实现修改。

④运行命令G。命令格式:

978-7-111-42233-4-Chapter04-99.jpg

其中,address1规定了执行的起始地址,即以CS的内容作为段地址,以等号后面的地址值address1作为偏移地址,这里等号是不可缺少的。若不输入起始地址,则以CS:IP作为起始地址。后面的地址参数是断点地址,可设置多个断点。当程序执行到一个断点地址时就停下来,显示CPU内部所有寄存器的内容以及全部标志位的状态。若在命令行中,除了起始地址以外,没有任何地址参数,则程序执行时没有断点。

⑤跟踪命令T。跟踪命令有两种形式:

a.逐条指令跟踪命令。

命令格式:T[=address]

该命令执行一条指定地址处的指令就停下来,显示CPU所有寄存器的内容和全部标志位的状态,以及下一条指令的地址和内容,返回DEBUG。若在指令中没有指定地址,则按“CS:IP”的现行值执行一条指令。

b.多条跟踪命令。

命令格式: T[=address][值]

该命令从指定的地址开始,执行由命令中的[值]所决定的几条指令。T命令显示每条指令执行后,各寄存器的内容和全部标志位的状态。执行停下来后,返回DEBUG。

⑥汇编命令A。

命令格式:A[地址]

该命令将输入的汇编语言的语句汇编成机器码并从指定的地址单元开始连续存放。若在命令中没有指定地址,但前面用过汇编命令,则接着上一个汇编命令的汇编结果存放的最后一个单元开始存放。若前面未用过汇编命令,则从CS:100单元开始存放。

反汇编命令U。该命令的作用是将目标程序反汇编为源程序,有两种常用的形式。

第一种形式的格式:U

或 U[地址]

该命令从指定的地址开始,反汇编16个字节(40列显示方式)或反汇编32个字节(80列显示方式)。若在命令中没有指定地址,则以上一个U命令处理的最后一条指令的地址加l作为起始地址;若没有输入过U命令,则从CS:100开始反汇编。

第二种形式的格式:U[范围]

该命令对指定范围的内存单元的内容进行反汇编。范围可以由起始地址、结束地址来规定,起始地址包含段地址和偏移地址,结束地址只包含偏移地址,其段地址与起始地址的段地址相同。范围也可以由起始地址及长度来规定。例如:

978-7-111-42233-4-Chapter04-100.jpg

表明起始地址为0,长度为30H个字节。

习题

4-1 伪指令语句与指令语句的本质区别是什么?伪指令的主要作用是什么?

4-2 请计算如下各数值表达式的值:

(1)23H AND 45H OR 67H

(2)1234H/16+10H

(3)NOT(65535 XOR 1234H)

(4)1024 MOD 7+3

(5)LOW 1234 OR HIGH 5678H

(6)23H SHL 4

(7)'Eb' GE 4562 XOR-1

(8)'a' AND(NOT('a'–'A'))

4-3 计算下列地址表达式的值,设BX=1000H,SI=2000H,DI=3000H,BP=4000H:

(1)[BX+100H]

(2)[DI][BP]

(3)2000H[SI]

(4)10H[BX][SI]

(5)[BP-128]

(6)[BX][DI-2]

4-4 定义的数据段如下,请根据该数据段画出该段中数据存储的形式。

978-7-111-42233-4-Chapter04-101.jpg

978-7-111-42233-4-Chapter04-102.jpg

4-5 根据题4-4定义的数据段,请写出下列程序段中各语句执行后寄存器的内容,并指出使用的寻址方式。

978-7-111-42233-4-Chapter04-103.jpg

4-6 自12F8:0000开始的内存单元中存放以下数据(用十六进制形式表示):280916B5 A668,试分别写出12F8:0000单元开始的字节型数据、字型数据及双字型数据的值。

4-7 某程序中的数据段内容如下所示,请指出变量BUF和NUM的偏移地址为多少?

978-7-111-42233-4-Chapter04-104.jpg

4-8 变量D1和D2定义如下:

978-7-111-42233-4-Chapter04-105.jpg

请写出取变量D1的偏移地址到寄存器SI中的三种方法。4-9 求下列指令汇编的结果。

978-7-111-42233-4-Chapter04-106.jpg

4-10 设如下两条指令中的符号ABCD是变量名,请说明这两条指令的异同。

978-7-111-42233-4-Chapter04-107.jpg

4-11请指出如下指令中的不明确之处,并使其明确:

(1)MOV ES:[BP],5

(2)ADD CS:[1000H],10H

(3)DEC SS:[BX-8]

(4)JMP CS:[SI+1000H]

4-12 设在某个程序中有如下片段,请改正其中有错误的指令语句:

978-7-111-42233-4-Chapter04-108.jpg

4-13 EUQ和=伪指令有何区别?请举例说明。

4-14 为什么说汇编语言中的等价语句EUQ可理解为简单的宏定义?请举例说明。

4-15 编写程序计算z=[(a−b)/(8*c)]2,式中各数均为有符号数。

4-16 从键盘输入一个字符串送入缓冲区,编程统计该字符串中字母出现的次数。

4-17 编写一个程序,把含有30个元素的字型数组ARY分成两组:正数组P和负数组N

4-18 编写子程序实现:从键盘输入一个无符号十进制数,在显示器上以十六进制形式显示。

4-19 已知数组A包含20个互不相等的字型整数,数组B包含30个互不相等的字型整数,试编制一程序把在A中不在B中的整数放于数组C中。

4-20 设有n个数,连续存放在BUF为首址的字存储区中,编写程序统计其中最高6位为全1的数的个数,并将统计结果送DX和显示器显示。(设n<256)

4-21 利用串比较指令进行两个字符串的比较。

4-22 有一个ASCII码字符串存放在STR存储区中,编程统计其中包括多少个字符串“AM”,并将统计结果以十进制形式输出到显示器。(设该数小于256)

4-23 从键盘输入一个2位十进制数的月份,然后显示相应的英文名,要求显示月份的功能用子程序实现。

4-24 写一个在字符串1后面追加字符串2的子程序。

4-25 编写一个宏定义,将一字节中的高4位与低4位交换。

4-26 已知n个学生的考试成绩登记表存放在以BUF为首址的存储区中,存储区的存放格式是:学号、分数1、…、分数n、总分、名次,其中,学号、总分为字型数据,其他为字节型数据。编写程序计算每个学生的总分和名次。(要求将计算某个学生总分的过程写成子程序)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈