汇编语言--知识整理

版权声明:本文为博主原创文章,转载请注明来源 https://blog.csdn.net/C1664510416/article/details/82966172

一.基础知识

     首先,我们学习汇编语言不是为了编程的,而是为了理解计算机的底层逻辑(CPU的逻辑),以此来获得底层编程的体验,从而达到对操作系统,编程,以及技术的更深层次的理解。

     对于电脑来讲,它完全是电路构成的,而逻辑的实现主要依赖于数字电路。由于计算机硬件的特殊性,电脑只认识高低电平,也就是0和1。所以一开始的程序(逻辑)都是用0和1来表达的。可想而知,这对于人类来说是非常痛苦的。后来,人们发明了助记符,来更方便的编写程序,而不是书写一串一串的01序列,然后将助记符通过软件,再翻译成机器码。这个助记符就是汇编指令。可见,助记符是与真正的机器指令一一对应的,所以我们看懂的汇编语言,就知道CPU是如何执行指令的了,这样就达到了底层的理解要求。

    在汇编语言这个层次。我们所接触到的硬件就是CPU和内存,汇编语言就是为这两个硬件而生的,理解了汇编语言,我们就能对CPU和内存有较深入的理解了。

    内存是存放指令和数据的地方,CPU是执行指令和处理指令的地方,两者相互加持,我们就看到了程序的运行。

    CPU既然要运行指令,一定要从内存中拿指令和数据,怎么拿,从哪里拿,什么时候拿。同样,CPU执行指令处理数据的结果还要返回给内存,这就牵扯到了总线:数据总线,控制总线,地址总线。

二.寄存器和内存访问

     CPU从内存把东西拿过来之后,就要开始处理,CPU以此只能执行一条指令,我们知道一个程序包含很多条指令,这些指令是有集成关系或者先后次序的,前一条指令处理的结构可能后一条指令就要用到了,为了方便,CPU中就准备了很多小口袋,来暂时存放这些数据,这些小口袋就是寄存器。某些小口袋可能存放上次指令执行的结果,可能是下一条指令要用到的数据,也可能是指令执行到哪里了记一下,再拿指令就不会拿错了(CS:IP,SS:SP)。

     CPU中的寄存器都是存储信息用的,但是存储的信息不同,对于CPU来说它的功能就不一样了。这些信息主要就是数据和地址。对于单纯存储数据的寄存器,他们就是一个放东西的地方(在某些情况下,也有标识的作用)。但是对于存放地址的寄存器,他们就不仅仅是放东西的地方了,他们的另外一层作用就是标识,标识出哪里是代码,哪里是数据,哪里是栈。特别是栈,CPU本身就有一种栈的机制,这种机制是附着在CPU本身属性上的,而战只要提供两个东西就好了,一个栈顶一个栈低。代码只要标识出执行到哪了就好了,数据你告诉我到哪里拿,拿多大就好了。

三.汇编程序

     学过C语言的都能说出程序有什么:定义变量(数据结构),选择结构,判断结构,循环结构,函数调用。汇编语言也是用来写程序的,当然也有这些机制。只不过实现的方式和写法不一样吧。

      从我们写的代码,到可以在系统上运行的程序,代码还要走好几步。汇编代码先编译成01序列,然后与相应的系统代码连接,最终才能生成可执行文件。这个可执行文件最终被系统加载器加载,还原到内存,才能被CPU执行。

      程序有数据和代码两个部分,在汇编语言的实现中就要有准确的内存定位方式来分辨代码和数据,并且准确的定位数据,CPU才能进行运算处理,准确定位不光要知道数据在哪里,还要知道数据有多大是多少字节的数据。

      循环结构,汇编提供了一种LOOP机制来实现循环代码。但是汇编语言实现选择结构没有那么直接,它是通过一种跳转机制来实现的。

      汇编语言自身提供一种函数调用机制CALL。而判断结构用标志位寄存器来实现。

四.中断机制

--------------------------------------------------------未完-----------------------------------------------------------------------

    

猜你喜欢

转载自blog.csdn.net/C1664510416/article/details/82966172