深入浅出计算机组成原理 指令跳转(自我提升第十八天)

上节学这个徐文浩的深入浅出计算机组成原理,就吃了大亏,渐渐的就发现了,其实他讲的并不单纯是计算机组成原理,而是讲的汇编语言和单片机,(lll¬ω¬)汗!

菜鸟倒是还好,因为学过单片机的,汇编语言多少了解一点,可各位读者就不一样了,所以我尽力最简化,不涉及这些单片机的知识,实在不行,菜鸟会放弃更新这个内容,毕竟,这不是我要的计算机组成原理(> 口 <)!!!

文章目录

    • CPU 是如何执行指令的
      • 三种寄存器:
      • 执行过程
    • 读者动手环节

CPU 是如何执行指令的

拿我们用的 Intel CPU 来说,里面差不多有几百亿个晶体管。实际上,一条条计算机指令执行起来非常复杂。

我们先不管几百亿的晶体管的背后是怎么通过电路运转起来的。逻辑上,我们可以认为,CPU 其实就是由一堆寄存器组成的。而寄存器就是 CPU 内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路
(这里触发器和锁存器,各位感兴趣的读者可以自己去百度,极客时间里面没讲,不过学过数字逻辑的应该知道,菜鸟学过了,不过现在忘了,只能说是自己学得不牢靠)

N 个触发器或者锁存器,就可以组成一个 N 位(Bit)的寄存器,能够保存 N 位的数据。

三种寄存器:

  1. PC 寄存器(Program Counter Register),我们也叫指令地址寄存器(Instruction Address Register)。顾名思义,它就是用来存放下一条需要执行的计算机指令的内存地址
  2. 指令寄存器(Instruction Register),用来存放当前正在执行的指令
  3. 条件码寄存器(Status Register),用里面的一个一个标记位(Flag),存放CPU 进行算术或者逻辑计算的结果。(零标志条件码(对应的条件码是ZF,Zero Flag)。除了零标志之外,Intel 的 CPU 下还有进位标志(CF,Carry Flag)、符号标志(SF,Sign Flag)以及溢出标志(OF,Overflow Flag),用在不同的判断条件下。)

一个 CPU 里面会有很多种不同功能的寄存器。上面三种只是比较特别而且重要的,其实就是执行代码时必须使用到的寄存器。除了这些特殊的寄存器,CPU 里面还有更多用来存储数据和内存地址的寄存器,这样的寄存器通常一类里面不止一个。我们通常根据存放的数据内容来给它们取名字,比如整数寄存器、浮点数寄存器、向量寄存器和地址寄存器等等。有些寄存器既可以存放数据,又能存放地址,我们就叫它通用寄存器
深入浅出计算机组成原理 指令跳转(自我提升第十八天)_第1张图片

执行过程

实际上,一个程序执行的时候,CPU 会根据 PC 寄存器里的地址,从内存里面把需要执行的指令读取到指令寄存器里面执行,然后根据指令长度自增,开始顺序读取下一条指令。当遇到比较特别的代码,eg:if、for、while,首先会将判断结果放入条件码寄存器,PC 寄存器会自动自增,根据结果去执行跳转指令(对应上一节中的J指令,读者只要知道是跳转指令就好),PC寄存器就不再是顺序读取下一条指令,而是直接设置为该指令地址,然后把其中的指令加载到指令寄存器,按照上面的过程继续执行。

读者动手环节

突然感觉自己总结,比极客简单多了,其实极客时间就是通过对照c语言代码和汇编代码,然后跟你解释汇编代码的字母代表什么( 这就是单片机老师做的事,不接受反驳 ),这里如果各位读者意犹未尽,其实可以自己敲循环、判断代码,然后自己比较,这里留下对照方法(其实上一节里有,菜鸟水字数(¬v¬) )

$ gcc -g -c test.c
$ objdump -d -M intel -S test.o

菜鸟得赶紧去复习java、c语言、JS,不然有两个课程完全无法更新,让读者无法一起学习!!!(ง •_•)ง加油

你可能感兴趣的:(极客)