汇编步骤和Debug使用方法.docx

上传人:b****6 文档编号:4436723 上传时间:2022-12-01 格式:DOCX 页数:11 大小:163.59KB
下载 相关 举报
汇编步骤和Debug使用方法.docx_第1页
第1页 / 共11页
汇编步骤和Debug使用方法.docx_第2页
第2页 / 共11页
汇编步骤和Debug使用方法.docx_第3页
第3页 / 共11页
汇编步骤和Debug使用方法.docx_第4页
第4页 / 共11页
汇编步骤和Debug使用方法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

汇编步骤和Debug使用方法.docx

《汇编步骤和Debug使用方法.docx》由会员分享,可在线阅读,更多相关《汇编步骤和Debug使用方法.docx(11页珍藏版)》请在冰豆网上搜索。

汇编步骤和Debug使用方法.docx

汇编步骤和Debug使用方法

实验预备知识汇编程序的建立与调试

一、汇编程序的建立

1.使用工具

(1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文件;

(2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件-目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表;

(3)Link连接程序,对使用的目标文件和库文件进行连接,生成.exe文件,同时调试用.map-地址映像文件;

如果源程序无语法错误,上述三步将生成可运行的.exe文件,如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存在错误,需要进行调试。

(4)Debug调试程序,对.exe文件进行调试,修改,直到程序正确。

图3目标程序生成步骤图

2.编程过程

(1)用文本编辑软件,编写扩展名为.asm的源文程序文件。

(2)用汇编程序对编好的源文件进行汇编。

命令行:

masm[*.asm]↙

如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。

使用MASM50汇编程序进行汇编,输入命令行masm或者masm*.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:

汇编程序可生成三个文件,*.obj,*.lst和*.crf。

*.obj-目标文件,用于连接生成可执行文件;

*.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于调试;

*.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。

(3)目标文件的连接

命令行:

link[*.obj][*.obj][*.lib]↙

连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。

*.map-地址映像文件,给出内存地址分配的有关信息。

下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe文件。

(4)执行程序

执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。

调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。

二、汇编程序的调试

1.调试方法

DEBUG工具的调试文件为可执行文件*.exe,在命令行窗口或者DOS环境下,执行DEBUG命令:

命令行Debug[*.exe]↙

DEBUG程序如果正常启动,提示符显示为“_”。

出现“_”提示符后,根据调试的需要,输入正确的Debug命令,根据显示内容,修改源文件。

2.常用DEBUG命令

(1)D命令-内存显示命令

命令格式格式1:

D[起始地址]↙

格式2:

D[起始地址][结束地址|L字节数]↙

调试程序的过程中,可利用该命令可以察看指定范围的内存单元的内容,以确定对内存单元的修改是否正确。

可以通过命令指定显示的范围(格式2),在不指定显示长度的情况下(格式1),将显示从起始地址开始128个字节的内容,如果只写D,则将从上一个D命令显示结束的位置开始显示128个字节。

在内存显示过程中,可以通过“Ctrl+S”键暂停,按任意键可继续显示,以防显示过快,来不及察看,另外可以通过“Ctrl+S”中止该命令的执行。

(2)E命令-数据编辑命令

命令格式格式1:

E[起始地址][列表]↙

格式2:

E[起始地址]↙

调试过程中,为了进行程序测试,需要改变内存或者寄存器的数据,此时利用DEBUG的E命令可以非常方便的进行修改。

E命令可以使用一连串的数据对内存连续地址单元进行修改,此时使用格式1,也可以修改某个地址单元的内容后,按“空格”键,继续修改高地址单元内容。

使用E命令时,可以同时配合使用D命令,以确定是否正确的完成了对内存单元的修改。

(3)U命令-反汇编命令

命令格式:

U[起始地址][结束地址]

调试过程中,可以利用U命令将目标程序反汇编为汇编程序,以观察汇编指令的存放位置,汇编指令的正确与否,对于无源码的目标程序,还可以利用反汇编获取目标程序的源码。

(4)G命令-运行程序命令

命令格式:

G[=起始地址][第一断点地址][第二断点地址]….

调试过程中,可以利用G命令运行程序,观察结果的正确性,或者设置断点,利用G命令观察程序运行到某一位置是否正确,G命令最多可以设置10个断点,当程序运行置断点时,停止执行,并显示当前所有寄存器和标志位的内容,以及下一条将要执行的指令。

如果G命令无起始地址,则从当前CS:

IP内容为开始运行。

(5)T命令-单步执行命令

命令格式格式1:

T[=地址]

格式2:

T[=地址][执行指令的条数]

调试过程中,可以利用该指令单步执行,从指定地址开始(如果不指定,则从CS:

IP开始),执行一条指令(格式1)或者执行指定条数的指令(格式2)后,停止执行,并显示当前所有寄存器和标志位的内容。

(6)R命令-寄存器访问命令

命令格式格式1:

R

格式2:

R寄存器名称

一般汇编程序中,会频繁的使用寄存器,使用R命令,可以在调试程序的过程中方便的进行寄存器内容的察看。

如果不指定寄存器名称(格式1),则显示所有寄存器和标志位内容;可以指定需要察看的寄存器的名称(格式2),只显示察看寄存器的内容。

(7)Q命令-Debug退出命令

命令格式Q

Debug程序使用结束后,使用该命令退出Debug。

3.Debug使用举例

右边所示的汇编源程序EX.asm,在命令行窗口中输入下面命令行:

MASMEX.asm↙

对EX.asm文件进行汇编,如果没有语法错误,则生成EX.obj目标文件。

输入下面命令行:

LINKEX.obj↙

对目标文件进行连接,连接后得到可执行文件EX.exe,使用Debug对该程序进行调试。

(1)U-反汇编

对EX.exe反汇编后,得到代码段地址和指令的对应图如下图所示。

从反汇编的结果,可以得到指令在代码段的偏移地址,常与T命令和G命令联合使用,使程序运行到固定的位置,查看结果。

同时,可以从反汇编代码中看出,变量会被汇编为直接寻址方式,使用变量在数据段内的有效地址表示。

 

(2)T-单步

每按一下T,执行一步,屏幕上显示执行指令后,通用寄存器、段寄存器和标志位的状态,下一条指令,以及指令中操作的存储器寻址方式对应的内存单元的内容。

 

(3)G-执行

根据反汇编的情况,G断点常设置在正常返回DOS调用之前,即MOVAH,4CH,执行后,可以通过查看寄存器内容,或者D命令查看内存地址单元的内容,检查程序的运行是否正常。

 

(4)D-查看存储器内容

查看数据段内容,屏幕上会给出128字节存储单元的内容,每行为顺序的16个字节。

因此可以根据定义的数据段中,变量的偏移量,查看运行结果。

 

(5)E-修改存储单元内容

在调试程序的过程中,如果要修改变量的值,可以使用E命令。

如下图所示,通过E命令修改了程序变量X和Y的值,而不需要修改程序,因此E命令为程序调试提供了方便。

 

DOS功能调用

(1)系统调用的方法

所有系统功能的调用方法都是一致的,包括以下几步:

✓将入口参数传递到指定寄存器中;

✓将系统调用子功能号写入AH寄存器中;

✓使用INT21H指令执行功能调用;

✓通过指定的寄存器获取出口参数,或者无出口参数;

(2)常用的几种DOS功能调用

①01H号功能调用-单字符键盘输入

调用格式:

MOVAH,01H

INT21H

该功能调用执行时,等待从键盘输入的单个字符,当有键按下的时候,将按键的ASCII值送入AL寄存器中,并在屏幕上显示按下的字符,此调用没有入口参数,调用完成后,通过读取AL寄存器的值,获取按键ASCII。

②02H号功能调用-单字符显示

调用格式:

MOVDL,‘字符’

MOVAH,02H

INT21H

该调用在显示屏幕上显示一个字符,调用时,将待显示字符的ASCII值送入DL寄存器后,调用02H号功能调用,进行显示。

③09H号功能调用-显示字符串

调用格式:

MOVDS,字符串段首地址

MOVDX,字符串段内偏移量

MOVAH,09H

INT21H

该调用将在屏幕上显示以DS:

DX作在起始地址,以’$’结束的一串字符串,因此需要在调用前,需要将字符串的起始地址存放在指定的DS:

DX寄存器中。

例:

BUFDB‘Hello!

$’

MOVAX,SEGBUF

MOVDS,AX

LEADX,BUF

MOVAH,09H

INT21H

④0AH号功能调用-字符串输入

调用格式:

MOVDS,字符串输入缓冲区段首地址

MOVDX,字符串输入缓冲区段内偏移地址

MOVAH,0AH

INT21H

该功能调用执行过程中,首先需要一块用于存放写入字符的缓冲区,并将缓冲区的起始地址写入DS:

DX起始的位置,在该缓冲区的第一个字节写入缓冲区允许写入的最大字符数,系统调用结束后,将实际输入的字符数写入第二个字节,而将键盘输入,写入指定起始地址开始的缓冲区的第三个单元开始的位置,键盘输入回车键作为字符串输入结束标记。

如果实际输入的字符数多于允许写入的最多字符数,则响铃报警。

⑤4CH号功能调用-返回操作系统

调用格式:

MOVAH,4CH

INT21H

结束当前正在执行的程序,并将控制权交给启动这个程序的上一级,多用于汇编运行结束后,返回DOS操作系统。

.DOS功能调用例程

从键盘上输入一个字符串,然后将该字符串逆序输出。

参考程序如下:

DATASEGMENT

BUFDB50DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVBUF,20;输入缓冲区第一个字节存放允许输入的最多字符数

MOVDX,OFFSETBUF;10号功能调用,数据缓冲区起始地址参数存入DX

MOVAH,0AH

INT21H

LEASI,BUF

ADDSI,2

MOVBX,SI

ADDBL,byteptr[BUF+1];10号功能调用,缓冲区的第二个字节存放实际输入的字符数。

ADCBH,0

MOVbyteptr[BX+2],'$';09号输出字符串,字符串要以’$’结束。

MOVDI,BX

L:

MOVAL,[SI]

XCHGAL,[DI]

MOV[SI],AL

INCSI

DECDI

CMPSI,DI

JNGL

MOVDL,0DH

MOVAH,02H

INT21H

MOVDL,0AH

MOVAH,02H

INT21H

LEADX,BUF

ADDDX,2;输出时,应注意,缓冲区的第三个字节开始才是输入的字符。

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1