第一个程序
一个源程序从写出到执行的过程
编写汇编源程序
使用edit、记事本编辑
编译源程序
编译程序,产生目标文件,使用连接程序对目标程序进行连接,生成可执行文件
可执行文件
程序 = 源程序中汇编指令翻译过来的机器码
数据 = 源程序中定义的数据
相关的描述信息(程序大小,内存空间)
执行程序
将可执行文件的数据和机器码加载到内存,比如设置CS:IP指向第一条运行指令
源程序
伪指令
伪指令不被CPU执行,是由编译器来执行的指令
xxx segment
......
xxx ends
这是一对成对的伪指令,功能是定义一个段,segment开始,ends结束,xxx段名end 标记汇编程序结束
end:标记汇编程序技术
assume:假设,将有特定用途的段和相关寄存器关联
如:codesg segment ...cpdesg ends定义了一个名叫codesg的段,使用assume cs:codesg将用作代码段的段codeesg和cou中的段寄存器
程序
源程序 = 伪指令 + 汇编指令
标号
一个标号代表了一个地址
如 codesg在segment的前面,作为一个段的名称,这个段的名称最终被编译、连接程序处理为一个段的地址
程序的结构
定义一个段
xxx segment
......
xxx ends
在段中写入汇编指令
xxx segment
mov ax,2
xxx ends
指出程序在何处结束
xxx segment
mov ax,2
xxx ends
end
关联段寄存器CS
assume cs:xxx
xxx segment
mov ax,2
xxx ends
程序返回
程序P2需要运行,P1程序将它加载到内存,并将控制权交给P2
可执行程序运行完毕之后,将CPU控制权交还P1,这个过程称为程序返回
mov ax,4c00H
int 21H
语法错误和逻辑错误
略
编辑源程序
进入DOS,运行Edit
编辑程序
将程序保存为c:\1.asm(指定文件名称和路径)
.asm源文件名称
编译
进入DOS,运行masm
[.ASM]是提示文件的扩展名为asm,在后面输入文件名称
输入源文件名称的时需要指明路径,x:\x\1.txt如果在当前路径下,可以只输入文件名
如果扩展名不是asm,就要输入全名如:1.txt
[.OBJ] 默认输出的目标文件,可以在后面输入更改名字和路径
[NUL.LST] 提示输入列表文件的名称,这个文件是编译器将源程序编译为目标文件的过程产生的中间结果,不生成,直接按ENTER
[NUL.CRF]提示输入交出啊引用文件的名称,这个文件是编译器将源程序编译为目标文件的过程产生的中间结果,不生成,直接按ENTER
连接
进入DOS,运行link
[.OBJ]是提示文件的扩展名为OBJ,在后面输入文件名称
输入源文件名称的时需要指明路径,x:\x\1.bin如果在当前路径下,可以只输入文件名
[.EXE] 默认输出的目标文件,可以在后面输入更改名字和路径
[.MAP] 提示输入印象的名称,这个文件是编译器将源程序编译为目标文件的过程产生的中间结果,不生成,直接按ENTER
[.LIB] 提示输入库文件的名称,这个文件是编译器将源程序编译为目标文件的过程产生的中间结果,不生成,直接按ENTER
当源程序很大时,可以将它作为多个源文件来编译,生成目标文件后,通过连接程序将他们连接在一起,生成一个可执行程序
程序调用了可文件的子程序,需要将这个库文件和该程序生成的目标文件连接在一起,生成一个可执行文件
一个源程序编译后,得到了存有机器码的目标文件,目标文件中有些内容不能直接生成可执行文件,连接文件将这些内容生成可执行的信息
以简化的方式进行编译和连接
在编译和连接文件时,在文件名称后面加入分号会自动生成obj或者exe文件
l.exe的执行
进入dos,输入可执行文件路径>文件名及名称(不加后缀),直接运行文件
谁将可执行文件.exe装载到内存并运行
程序执行过程的跟踪
debug 可执行文件名称.exe