06 、指令跳转:原来if...else就是goto

写好的代码编译成指令之后,一般正常流程是一条一条的顺序执行的。但是在程序中总会用到if...else这样的条件判断语句、while和for循环语句,还有函数或者过程调用,所以遇到这些程序编译的指令时是不会平铺下去的。这是就是跳转执行,这就是指令跳转的功能。

下面看一下CPU的构成以及这些组成部分在程序执行过程中所起的作用,结构如图

一个CPU里面有很多种不同功能的寄存器,这里介绍三种比较特殊的。

第一个是PC寄存器(Program Counter Register),也叫指令地址寄存器(Instruction Address Register),就是用来存放下一条需要执行的计算机指令的内存地址。

第二个是指令寄存器(Instruction Register),用来存放当前正在执行的指令。

第三个是条件码寄存器(Status Register),用里面的一个一个标记位(Flag),存放 CPU 进行算术或者逻辑计算的结果。

除了这些特殊的寄存器,CPU 里面还有更多用来存储数据和内存地址的寄存器。这样的寄存器通常一类里面不止一个。我们通常根据存放的数据内容来给它们取名字,比如整数寄存器、浮点数寄存器、向量寄存器和地址寄存器等等。有些寄存器既可以存放数据,又能存放地址,我们就叫它通用寄存器

 实际上,一个程序执行的时候,CPU 会根据 PC 寄存器里的地址,从内存里面把需要执行的指令读取到指令寄存器里面执行,然后根据指令长度自增,开始顺序读取下一条指令。可以看到,一个程序的一条条指令,在内存里面是连续保存的,也会一条条顺序加载。

而有些特殊指令,比如上一讲我们讲到 J 类指令,也就是跳转指令,会修改 PC 寄存器里面的地址值。这样,下一条要执行的指令就不是从内存里面顺序加载的了。事实上,这些跳转指令的存在,也是我们可以在写程序的时候,使用 if…else 条件语句和 while/for 循环语句的原因。

扫描二维码关注公众号,回复: 6628224 查看本文章

猜你喜欢

转载自www.cnblogs.com/gopark/p/11089870.html
06
今日推荐