/Fb[file] Generate bound executable /Fe
Copyright (C) Microsoft Corp 1981-1991. All rights reserved.
Assembling: hello.asm
Microsoft (R) Segmented-Executable Linker Version 5.13 Copyright (C) Microsoft Corp 1984-1991. All rights reserved.
Object Modules [.OBJ]: hello.obj Run File [temp.exe]: \List File [NUL.MAP]: NUL Libraries [.LIB]:
Definitions File [NUL.DEF]: ;
LINK : warning L4021: no stack segment
运行HELLO.EXE,看看显示结果是不是“Hello, world.”。
2.7. 用DEBUG调试可执行文件
用MASM编译了汇编语言源文件HELLO.ASM之后,用DEBUG调试可执行程序HELLO.EXE。具体的做法是:
1、 在“命令提示符”窗口下执行“DEBUG <文件所在路径+文件名>”指令。 2、 执行“R”指令观看段寄存器CS和DS的值,在EXE文件中两值应该不同。 3、 执行“U”指令观看CS:IP所指地址的反汇编代码。
4、 程序刚开始时会设置DS段寄存器的值,将其指向DATA1数据段。用跟踪指令“P”检查
这两条指令的执行结果。
5、 DS段寄存器的值被修改后,执行指令“D DS:0”,观看数据段的具体内容。
6、 继续用指令P进行程序跟踪,检查各寄存器和标志位的修改内容以及程序的运行情况。 7、 程序正常结束后,用“R IP”指令修改寄存器IP的值,将其设置为0。
8、 重复第4步到第6步的工作,改用指令T而不是指令P对程序进行跟踪,观看跟踪情况。
2.8. 用MASM和LINK生成COM可执行文件
对于有多个数据段、栈段的汇编语言程序,建议将其汇编和链接成EXE文件。如果程序的代码和数据量比较小,可以将其汇编和链接成COM文件。EXE文件可以有多个段,每个段的最大空间为64KB,程序在执行需要对多个段进行管理,所以EXE文件的结构有些复杂。而COM文件只有一个段,执行代码和数据都处于一个段中,因此,COM文件比EXE文件显得更加短小精悍。COM文件其唯一的约束就是可执行的程序的大小不允许超过64KB。
编写如下的汇编程序,文件名定为HELLO2.ASM,内容如下: code1 segment
assume cs:code1, ds:code1 start:
jmp next msg db \next:
mov ax, cs mov ds, ax
mov dx, offset msg
add dx, 100h mov ah, 9 int 21h
mov ax, 4c00h int 21h code1 ends end start
执行以下指令对源文件进行汇编:MASM HELLO2.ASM。
执行以下指令将目标文件链接成COM文件:LINK /TINY HELLO2;。
命令执行完毕后,将生成HELL2.COM文件,执行HELLO2观看运行结果。
比较一下HELLO.EXE和HELL2.COM的大小,用DEBUG调试可执行程序HELLO2.COM,了解它的程序结构。