探索代码世界的两大利器--条件分支和循环机制

程序的流程有三种:顺序执行、条件分支和循环。顺序执行很简单,每执行一个指令,程序计数器加1。但若程序中存在条件分支和循环,程序计数器的值就会设定为任意地址,不再是+1。这样程序就可以重复执行同一个指令,或者跳转到任意地址。下面以条件分支为例,说明程序计数器在循环中的设定机制也是相同的。

 图中表示把内存中存储的数值(示例中是123)的绝对值输出到显示器的程序的内存状态。程序运行的开始位置是0100地址。随着程序计数器数值的增加,当到达0102地址时,如果累加寄存器的值是正数,则执行跳转指令(jump指令)跳转到0104地址。此时,由于累加寄存器的值是123,为正数,因此0103地址的指令被跳过,程序的流程直接跳转到了0104地址。也就是说,“跳转到0104地址”这个指令间接执行了“将程序计数器设定成0104地址”这个操作。

跳转指令在条件分支和循环中使用,根据当前的运算结果来判断是否进行跳转。在列出的寄存器中,我们提到了标志寄存器。这个寄存器会记录当前累加器的运算结果,无论是负数、零还是正数。

在CPU进行运算时,标志寄存器的值会根据运算结果自动设置。条件分支会在跳转指令之前进行比较运算,决定是否进行跳转。CPU会根据标志寄存器的值来判断是否执行跳转指令。标志寄存器的三个位表示运算结果的正、零、负三种状态。下图展示了32位CPU(寄存器长度为32位)的标志寄存器示例。当标志寄存器的第一字节位、第二字节位和第三字节位的值分别为1时,表示运算结果为正数、零和负数。

CPU执行比较运算的机制非常有意思,因此大家务必要记住。假设需要比较累加寄存器中的XXX值和通用寄存器中的YYY值,在执行比较指令后,CPU内部的运算单元会暗中执行XXX-YYY的减法运算。无论减法运算的结果是正数、零还是负数,它们都会被保存到标志寄存器中。结果为正表示XXX大于YYY,零表示XXX等于YYY,负表示XXX小于YYY。事实上,程序中的比较指令本质上是在CPU内部执行减法运算。这个机制确实非常有趣,不是吗? 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值