编程(Edit) → 1.asm → 编译(masm) → 1.obj → 连接(link) → 1.exe → 加载(command) → 内存中的程序 → 运行(CPU)
可执行文件包含两部分内容:程序(从源程序的汇编指令翻译来的机器码)和数据(源程序中定义的数据),相关的描述信息(程序有多大、要占用多少内存空间)。
伪指令+汇编指令
1.定义一个段
<段名> segment
<段名> ends
end
assume,假设某一段寄存器和程序中某一个segments...ends定义的段相关联
assume cs:codesg ;将代码段codesg和CPU的段寄存器相关联
codesh segment ;伪指令是给编译器来处理
mov ax,0123H ;程序由源程序中的汇编指令经编译连接转变为机器码,存储在可执行文件中。
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H ;这两句
int 21H ;不用理解,实现程序返回
codesg ends
end
对于编译器来说,汇编命令的逻辑错误编译时候是发现不了的,除非是伪指令出错的语法错误,才可以发现。
c:\\masm>masm
Mircrosoft <R> Macro Assmebler Version 5.00
Copyright <C> Microsoft Corp 1981-1985, 1987. All rights reserved.
Source filename [.ASM]: c:\\1.asm
Object filename [1.OBJ]: ;编译出的目标文件,最终结果
Source listing [NUL.LST]: ;让输入列表文件的名称,是中间结果,可以直接回车跳过
Cross-reference [NUL.CRF]: ;让输入交叉引用文件的名称,是中间结果,可以直接回车跳过
51522 + 422654 Bytes symbol space free
0 Warning Errors
0 Severe Errors
#简化方式编译
c:\\masm>masm c:\\1;
c:\\masm>link
Mircrosoft <R> Overlay Linker Version 3.60
Copyright <C> Microsoft Corp 1981-1987. All rights reserved.
Object Modules [.OBJ]: 1 ;要连接的目标文件
Run File [1.EXE]: ;目标连接后的结果
List File [NUL.MAP]: ;让输入映像文件的名称,中间结果,可以跳过
Libraries [.LIB] ;让输入库文件的名称,没有调用任何子程序的话,可以跳过
LINK : warning L4021: no stack segment ;告警,提示没有栈段,可以忽略
#简化方式连接
c:\\masm>link c:\\1;
连接的作用是: