本文已参与「新人创作礼」活动,一起开启掘金创作之路。 4.1源程序从写出到执行的过程
.con文件只有一个栈 (古老的黑客程序)
.exe可以设立多个栈多个段
使用汇编语言编译程序(MASM.exe)对源程序文件中的源程序进行编译,产生目标文件
再用连接程序(LINK.exe)对目标文件进行连接,生成可在操作系统中直接运行的可执行文件
可执行文件中包含两部分内容:
对编译、连接的理解
1.编写代码,生成.c或.cpp文件,这时候它还是文本的;
2.编译,就是Compile,由C编译程序对你写的代码进行词法和句法分析,发现并报告错误,有错时编译不能通过。如若无错,则生成中间代码,扩展名为obj,此时它便是二进制的了;
3.连接,在汇编里称Link,在C里叫生成,即Build,它的作用是生成可执行的exe文件。由于一个程序的源码可由多个文件组成。这些文件在第二步 中分别编译,生成各自的目标文件,这一步的作用便是将这些obj文件,以及程序中需要的其它库文件(dll除外),统一到一个文件中来,形成单个的exe 文件。此exe文件便可以在操作系统下直接运行了。
任何程序要执行都会首先加载到内存
伪指令
定义一个段
segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。
segment和ends的功能是定义一个段,segment说明一个段的开始,ends说明一个段结束。
一个汇编程序是由多个段组 成的
4.2源程序
end是汇编程序的结束标记
如果没有写end ,程序将无法结束,永远停留在内存中。
end和ends被搞混!!!!!
assume
程序是编译后的结果
伪指令
伪指令由编译器处理,通过伪指令让编译器知道哪里结束(开始),哪里指向CS(DS、SS),让编译器通过伪指令去处理机器码
汇编指令
汇编指令告诉计算机通用寄存器ax中的内容放入bx,(mov、 add。。。),编译为机器码
ATTENTION
用编辑器编辑的叫源程序 xxx.asm,编译后的数据叫做程序
标号
源程序
DOS中的程序运行
dos是一个单任务操作系统
cmd.exe程序为模拟DOS系统而设立的程序,虚拟8086模式的程序
程序返回
一个程序结束后,将CPU的控制权交还给使它得以运行的程序,我们称这个过程为:程序返回。
如何返回
int 21H中断的标志,(中断机制)
段结束、程序结束、程序返回
编辑源程序
1.asm
1.masm 1.asm
2.link 1.obj
3.1.exe
1.exe的执行
程序执行完成后,返回,屏幕上再次出现操作系统的提示符
以简化的方式进行编译和连接
eg:masm 1.asm;
link 1.obj
ML.exe 是masm.exe和link.exe结合
编译和连接的作用