程序是怎样跑起来的1.4 条件分支和循环机制_程序是怎样跑起来的1.4 条件分支和循环机制试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 程序是怎样跑起来的 > 1.4 条件分支和循环机制

程序是怎样跑起来的——1.4 条件分支和循环机制

程序的流程分为顺序执行、条件分支和循环三种。 顺序执行 是指按照地址内容的顺序执行指令。 条件分支_是指根据条件执行任意地址的指令。 循环_是指重复执行同一地址的指令。顺序执行的情况比较简单,每执行一个指令程序计数器的值就自动加1。但若程序中存在条件分支和循环,机器语言的指令就可以将程序计数器的值设定为任意地址(不是+1)。这样一来,程序便可以返回到上一个地址来重复执行同一个指令,或者跳转到任意地址。接下来,我们就以条件分支为例,来具体说明循环时程序计数器的数值设定机制也是一样的。 图1-5表示把内存中存储的数值(示例中是123)的绝对值输出到显示器的程序的内存状态。程序运行的开始位置是0100地址。随着程序计数器数值的增加,当到达0102地址时,如果累加寄存器的值是正数,则执行跳转指令(jump指令)跳转到0104地址。此时,由于累加寄存器的值是123,为正数,因此0103地址的指令被跳过,程序的流程直接跳转到了0104地址。也就是说,“跳转到0104地址”这个指令间接执行了“将程序计数器设定成0104地址”这个操作。 图1-5 执行条件分支的程序示例 (显示绝对值) 条件分支和循环中使用的 跳转指令 ,会参照当前执行的运算结果来判断是否跳转。表1-1所列出的寄存器中,我们提到了标志寄存器。无论当前累加寄存器的运算结果是负数、零还是正数, 标志寄存器_都会将其保存(也负责存放溢出①和奇偶校验②的结果)。 ① 溢出(overflow)是指运算的结果超出了寄存器的长度范围。 ② 奇偶校验 (parity check)是指检查运算结果的值是偶数还是奇数。 CPU在进行运算时,标志寄存器的数值会根据运算结果自动设定。条件分支在跳转指令前会进行比较运算。至于是否执行跳转指令,则由CPU在参考标志寄存器的数值后进行判断。运算结果的正、零、负三种状态由标志寄存器的三个位①表示。图1-6是32位CPU(寄存器的长度是32位)的标志寄存器的示例。标志寄存器的第一个字节位、第二个字节位和第三个字节位的值为1时,表示运算结果分别为正数、零和负数。 图1-6 比较运算的结果存储在标志寄存器的三个位中 CPU执行比较的机制很有意思,因此请大家务必牢记。例如,假设要比较累加寄存器中存储的XXX值和通用寄存器中存储的YYY值,执行比较的指令后,CPU的运算装置就会在内部(暗中)进行XXX-YYY的减法运算。而无论减法运算的结果是正数、零还是负数,都会保存到标志寄存器中。结果为正表示XXX比YYY大,零表示XXX和YYY相等,负表示XXX比YYY小。程序中的比较指令,就是在CPU内部做减法运算。怎么样,是不是挺有意思的? ① 1位(bit =binary digit)就是一个位数的二进制数,表示0或1的数值。32位CPU指的就是用32位的二进制数来表示数据及地址的数值。关于二进制数的详细内容,请读者参阅第2章。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《程序是怎样跑起来的》其他试读目录

• 1.1 CPU的内部结构解析
• 1.2 CPU是寄存器的集合体
• 1.3 决定程序流程的程序计数器
• 1.4 条件分支和循环机制 [当前]
• 1.5 函数的调用机制
• 1.6 通过地址和索引实现数组
• 1.7 CPU的处理其实很简单