汇编程序执行过程

第一二章 前言-汇编的概念:http://fynote.com/s/3251
第三章 寄存器:http://fynote.com/s/3269
第四章 汇编程序:http://fynote.com/s/3315
第五章 汇编指令:http://fynote.com/s/3354

若是c源文件开始,则需要ccl编译器通过语法,词法译成源代码的中间表示1.c变成1.s,1.s就是汇编代码

第一步:编写汇编源程序

使用文本编辑器(记事本、Notepad++等等),用汇编语言编写汇编源程序。这一步的工作是产生了一个存储

源程序的文本文件

第二步:对源程序进行编译连接

使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件(如1.obj)即可重定向文件;再用连接程序对目标文件进行连接,

生成可在操作系统直接运行的可执行文件(如1.exe)。

可执行的文件包含两部分内容:

  • 程序和数据:程序中的汇编指令翻译过来的机器码和源程序中定义的数据
  • 相关的描述信息:程序多大,要占用多少内存空间等

第三步:执行可执行文件中的程序

在操作系统中,执行可执行文件中的程序。此时,操作系统依照可执行文件中的描述信息,将可执行文件中的

机器码和数据加载入内存,并进行相关的初始化(比如CS:IP指向第一条要执行的指令),然后由CPU执行程序。

 

第三步正式执行程序很重要,下面以提问的形式解释第三步的过程原理:

1。内存里可以放的不只有指令还可以是其他普通的数据,cpu怎么知道它操作的内存里的数据其实是指令(接下来要执行的)呢???

    答:所以必须要有初始化这一步,由CS:IP指向第一条要执行的指令(cs是code segment指代码段寄存器,顾名思义它就是来存放代码的地址数据的),前面步骤都只是为了把指令的机器码存到内存中去,而这一步就是在(内存中有指令数据的前提下)实实在在的去读取内存(通过CS:IP生成的地址去访问内存),通过不断访问内存的方式来操作指令再由cpu去执行。

 

2。为啥要通过不断读取内存的方式来操作指令数据,也就是说可执行文件里的指令由解释器解释成机器码后为啥不直接就给cpu去执行呢?而是选择更复杂的流程:得到的机器码先存入内存,然后cpu通过cs:ip生成地址去访问得到内存中的机器码再接着给cpu去执行。

     答:

(1).因为操作内存速度更快处理数据量更多,所以通过访问内存来读取文件的内容。若直接去不断操作来操作指令数据速度慢的多,而且读取也不方便(内存结构化强十分方便操作呀)

   扩充一下:原本编写指令的文件是在磁盘里,是提前映射到内存中去的(使应用程序可以通过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问,因此内存文件映射非常适合于用来管理大文件)

(2).前面说了,通过cs:ip操作能让cpu知道此时操作的内存中的数据是指令,所以它就是走这种流程(规定必须这么走的)才能最后执行到这些指令,反正一般都这样的呀。这个原因就是本是这么个设计,学会用就好了!

 

 

可以去了解cpu访问内存前的地址是怎么生成的,然后寄存器是干嘛的(结构类型以及工作流程)等       http://fynote.com/s/3269

 

底层过程原理
在执行汇编指令的过程中,先把汇编指令翻译成机器代码,存储在内存中,这是在内存中存储的数据不能分清是数据地址还是指令,都仅仅是二进制代码。只用通过CPU的调用实现他们的价值,CPU和内存之间的通信只要是通过总线。先是CPU通过CS代码段寄存器,IP指令寄存器。CPU先通过CS和IP寄存器通过地址总线给内存送去地址,地址的计算方法是物理地址=段地址*16+偏移地址,然后送到内存找到相应的地址,取出地址中的内容,通过数据总线送到CPU,然后对这个数据进行处理。

posted @ 2023-10-26 01:20  hacker-dreamer  阅读(331)  评论(0编辑  收藏  举报