![程序是怎样跑起来的(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/19/47046019/b_47046019.jpg)
上QQ阅读APP看书,第一时间看更新
1.3 决定程序流程的程序计数器
只有一行的程序几乎完成不了什么任务,机器语言程序也是如此。对CPU有了大致印象之后,下面来看一下程序是如何按照指定的顺序(程序流程)来运行的。
图1-4展示了程序启动时内存中的内容。在Windows等操作系统中,当用户发起启动某个程序的指示后,操作系统会将存储在硬盘中的程序复制到内存中。示例中的程序将123和456两个数值相加,并将结果输出到屏幕上。我们之前讲过,内存中会用地址来表示存放指令和数据的位置。如果将各个地址中存储的内容用机器语言表示的话,大家会看不懂,因此我们用文字来表示各个地址中存放的内容。实际上,一条指令或一个数据一般会存放在多个地址中,但为了方便起见,在图1-4中,我们假设一条指令或一个数据只对应一个地址。
![](https://epubservercos.yuewen.com/4D974A/26378324801238906/epubprivate/OEBPS/Images/image00146.jpg?sign=1738809026-vx9x2InbjdrDdW98KbSKbc48Cx2LKROs-0-af08308e6a887e57bd430d530feb7f9b)
图1-4 存放在内存中的程序实例(显示加法运算结果)
地址0100是程序运行的起始位置。Windows等操作系统在将程序从硬盘复制到内存后,就会将程序计数器这个寄存器的值设置为0100。然后,程序开始运行。CPU每执行一条指令,程序计数器的值就会自动加1。例如,CPU执行地址0100中的指令之后,程序计数器的值就变成了0101(如果执行的指令占用多个内存地址,那么程序计数器的值也会根据指令的长度增加相应的值)。CPU的控制器会根据程序计数器的值从内存中读取指令并执行。也就是说,程序计数器决定了程序的流程。