资源描述
下面介绍两种方法来建立一个汇编语言源程序并且经过编译连接、调试运行。
编译程序选择微软的 MASM 5.0。该汇编编译程序是DOS下的老牌编译工具。
一、命令行方式:
1、源程序的建立
可以使用任何一种文本编辑器(如记事本、写字板等,在DOS下可以使用EDIT来编辑)。在保存文件时不要忘了汇编语言源程序的扩展名应为 .asm。
例:打开上面所说的任何一种文本编辑器,输入下面的汇编代码:
(这是一个两数相加的程序,把 BUF 中的10与20相加)
CODE SEGMENT
ASSUME CS:CODE, DS:CODE
ORG 100H
START: JMP BEGIN
BUF DB 10,20,?
BEGIN: PUSH CS
POP DS
MOV AL,BUF
ADD AL,BUF+1
MOV BUF+2,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
输入完了,把它保存到编译程序masm目录下,如masm在D:盘,这个源文件名为 add.asm,那么就把add.asm保存到D:\masm 目录下。
2、编译
这一步是对汇编源程序 add.asm进行编译。
在DOS状态的提示符d:\masm 下键入 masm add.asm 编译程序就会出现各种提示,然后进行编译,如下所示:
( 在出现的每一个提示后回车 )
图中所示 Object filename 是二进制目标文件,Source listing 是列表文件,Cross-reference 是交叉引用文件。由于在提示符后直接回车,所以只产生了一个文件:add.obj(二进制目标文件), 而没有产生NUL.lst(列表文件)和 NUL.crf(交叉引用文件)。对于这几个文件,以后会讲,现在暂时不管它。
其中的add.obj将用于连接后生成可执行文件。
当源程序正确没有错误时,会出现 0 Warning Error 0 Server Error 的信息,表示编译通过。否则,还需要根据提示的错误信息,找出错误后再进行编译。
3、连接
对生成的二进制目标文件进行连接后可以生成运行文件 add.exe
连接操作如下:
在DOS的 d:\masm 下键入 link add.obj,出现如下提示:
( 在出现的每一个提示后按回车)
这时生成了add.exe文件。对于出现的 LINK: warning L4021: no stack segment 的提示,意思是没有定义堆栈段,可以不管它。
4、调试
对于每一个程序,虽然编译连接通过,但是并不能保证在运行时没有逻辑错误或者其它的运行时错误。这时就需要通过调试手段来排除这些错误。在DOS命令行下,可以用Debug来调试。如果会熟练使用Debug调试程序,对于汇编程序的调试是有很大帮助的。(对于Debug的详细用法,以后会讲)
在DOS状态下,键入 Debug add.exe 进入Debug 状态,并对add.exe进行调试。如下:
回车后出现了一个闪动的 ‘-’符号,在这个符号后面可以键入各种Debug命令。
键入 U命令( U是反汇编 ,键入这个命令后可以看到add.exe的汇编代码),回车:
可以看到在命令后面的第一条语句是 0B48:0100 EB04 JMP 0106 这就是我们编写的汇编源程序里面的 JMP BEGIN 可以看到 BEGIN 这个符号经过编译后成了偏移地址 0106。
下面对这条语句标识一下:
0B48: 0100 EB04 JMP 0106
↑ ↑ ↑ ↑
代码段地址 偏移地址 机器码 汇编代码
其中汇编代码 JMP 0106 翻译成机器码 就是 EB04。程序最后执行的都是机器码,这里是用十六进制表示的二进制机器码。
由图中我们看到只有一条语句 即 JMP 0106 与先前写的源程序对应。而后面的语句是什么,完全不是源程序中的汇编语句。这是由于有一个JMP 跳转语句的原故。没有跳转到放代码的地址,当然看不到源程序的代码。用T命令:
( T 命令是跟踪调试命令,这里只执行一条语句)
- T 回车
出现在-t后面的是寄存器的状态、标志位的状态及下面的一条将要执行的指令 PUSH CS
再用U命令看一下:
-U 回车
可以看到从偏移地址 0106至0114 就是我们的汇编代码。
然后,可以用T命令一步一步的进行调试观察。
怎样观察调试过程中存储器里面的数据变化
使用 D 命令(D命令是显示存储单元的命令)。
当用T命令跟踪到 MOV AL,[0103]时,键入:
- d 103 就可以看到在数据段偏移地址0103处存放在 BUF 中的数据 0A 14 ,其中0A 和14是以十六进制表示的10和20。
当程序执行完毕,再用D命令观察一下:
-D 103
可以看到在偏移0105地址处,数字为1E,这就是0A与14相加后的结果,其结果由语句 MOV BUF+2,AL 送到偏移0105保存。
展开阅读全文