首页 > 代码库 > 《汇编语言》总结01

《汇编语言》总结01

(一)一个源程序从写出到执行的过程

  1. 编写汇编源程序

  2. 对源程序进行编译连接

  3. 执行可执行文件中的程序

操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关初始化(比如设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。

(二)源程序

  1. 伪指令:在汇编中,包含两种指令,一种是汇编指令,一种是伪指令。汇编指令有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。而伪指令没有对应的机器指令,最终不被CPU所执行,那么谁来执行伪指令呢?伪指令是由编译器来执行的指令。segment和ends是一对成对的伪指令,这是在写可被编译的汇编程序时,必须要用到的一对伪指令。它的功能是定义一个段,segment说明一个段的开始,ends说明一个段结束,一个段必须有一个名称来标识。

    一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。
    end是一个汇编结束标记,编译器在编译汇编源程序中,如果碰到了伪指令end,就结束对源程序的编译,注意end和ends,ends是和segment成对使用的,标记一个段的结束,ends的含义可理解为"end segment"。我们这里的end的作用是标记整个程序的结束。

    assume这条伪指令的含义是"假设"。它假设某一段寄存器和程序中的某一个用segment...ends定义的段相关联。

  2. 源程序中的“程序”:简单点,源程序文件中的所有内容为源程序。

  3. 标号:一个标号代表一个地址。 

  4. 程序返回:指令mov 4c00h  int 21h,这两条指令所实现的功能就是程序的返回

    目的相关指令指令性质指令执行者
    通知编译器一个段结束段名 ends伪指令编译时,由编译器执行
    通知编译器程序结束end伪指令编译时,由编译器执行
    程序返回mov ax,4c00h  int 21h汇编指令执行时,由CPU执行

(三)编译和连接

在编译时忽略列表文件(.LST)生成,交叉引用文件(.CRF)文件生成。

在连接时忽略映象文件(.MAP)生成,库文件(.LIB)文件生成,假如没链接到其他库的情况下

(四)程序执行过程的跟踪

DOS系统中.EXE文件的加载过程

  1. 找到一段起始地址为SA:0000(即起始地址的偏移地址为0)的容量足够的空闲内存区。

  2. 在这段内存区的前256个字节中,创建一个称为程序段前缀(PSP)的数据区,DOS要利用PSP来和被加载程序进行通讯。

  3. 从这段内存区的256个字节处开始(在PSP的后面),将程序装入,程序的地址被设为SA+10H:0

  4. 将该内存区的段地址存入ds中,初始化其它相关寄存器后,设置CS:IP指向程序的入口。

总结完毕。

 

本文出自 “凡凡不会玩” 博客,请务必保留此出处http://liaofan.blog.51cto.com/12295212/1917396

《汇编语言》总结01