首页 > 代码库 > 《汇编语言》总结01
《汇编语言》总结01
(一)一个源程序从写出到执行的过程
编写汇编源程序
对源程序进行编译连接
执行可执行文件中的程序
操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关初始化(比如设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。
(二)源程序
伪指令:在汇编中,包含两种指令,一种是汇编指令,一种是伪指令。汇编指令有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。而伪指令没有对应的机器指令,最终不被CPU所执行,那么谁来执行伪指令呢?伪指令是由编译器来执行的指令。segment和ends是一对成对的伪指令,这是在写可被编译的汇编程序时,必须要用到的一对伪指令。它的功能是定义一个段,segment说明一个段的开始,ends说明一个段结束,一个段必须有一个名称来标识。
一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。
end是一个汇编结束标记,编译器在编译汇编源程序中,如果碰到了伪指令end,就结束对源程序的编译,注意end和ends,ends是和segment成对使用的,标记一个段的结束,ends的含义可理解为"end segment"。我们这里的end的作用是标记整个程序的结束。assume这条伪指令的含义是"假设"。它假设某一段寄存器和程序中的某一个用segment...ends定义的段相关联。
源程序中的“程序”:简单点,源程序文件中的所有内容为源程序。
标号:一个标号代表一个地址。
程序返回:指令mov 4c00h int 21h,这两条指令所实现的功能就是程序的返回
目的 相关指令 指令性质 指令执行者 通知编译器一个段结束 段名 ends 伪指令 编译时,由编译器执行 通知编译器程序结束 end 伪指令 编译时,由编译器执行 程序返回 mov ax,4c00h int 21h 汇编指令 执行时,由CPU执行
(三)编译和连接
在编译时忽略列表文件(.LST)生成,交叉引用文件(.CRF)文件生成。
在连接时忽略映象文件(.MAP)生成,库文件(.LIB)文件生成,假如没链接到其他库的情况下
(四)程序执行过程的跟踪
DOS系统中.EXE文件的加载过程
找到一段起始地址为SA:0000(即起始地址的偏移地址为0)的容量足够的空闲内存区。
在这段内存区的前256个字节中,创建一个称为程序段前缀(PSP)的数据区,DOS要利用PSP来和被加载程序进行通讯。
从这段内存区的256个字节处开始(在PSP的后面),将程序装入,程序的地址被设为SA+10H:0。
将该内存区的段地址存入ds中,初始化其它相关寄存器后,设置CS:IP指向程序的入口。
总结完毕。
本文出自 “凡凡不会玩” 博客,请务必保留此出处http://liaofan.blog.51cto.com/12295212/1917396
《汇编语言》总结01