CPU におけるプログラムカウンタの説明はどれか。
平成24年度 春期 ITパスポート試験 問61
这道题的解析和你的作答记录。
問 61
- ア
正解 正确答案是ア。程序计数器 (program counter,也称指令地址寄存器、顺序控制计数器) 是位于 CPU 控制装置内部的寄存器,保存下一条要执行的指令所在主存储器的地址。CPU 反复执行「取出 (取指) → 解读 (译码) → 执行」这一周期,而在它的第一步,就是从程序计数器所指向的地址去主存储器中读取指令。取出的指令被送入指令寄存器,与此同时程序计数器的值会自动更新为指向下一条指令 (按指令长度递增)。正是有了这种自动更新,程序才能按照编写的顺序自上而下依次执行下去。遇到分支指令 (跳转) 或子程序调用时,则不做这种自动更新,而是把分支目标地址设置进程序计数器,并从那里继续执行。也就是说,程序计数器是「指示 CPU 接下来要执行哪里的箭头」,其内容既不是指令本身也不是数量,而始终是主存储器上的地址 (单元地址)。因此ア是正确的说明。
错误イ
保存程序执行所需的主存储器区域大小的并不是程序计数器。为运行程序需要预留多大的内存区域,是操作系统的存储管理 (内存管理) 功能在程序装入时管理的信息,而不是 CPU 内的寄存器时刻保存着的东西。而且程序计数器保存的是地址 (位置) 而不是大小 (尺寸),两者所指向的东西种类不同。
错误ウ
CPU 中并不存在保存构成程序的指令数量的寄存器。程序计数器的名字里带有「计数器」,所以容易被误以为在数指令的条数,但它实际累加的并不是已执行指令的条数,而是下一条应读取的单元地址的位置。它的值是以地址的形式更新的,一旦发生分支还可能退回到靠前的地址,所以不会成为表示指令数量的数值。
错误エ
保存指令执行所需的数据 (操作数) 所在主存储器地址的,是地址寄存器、变址寄存器 (索引寄存器)、基址寄存器等参与地址计算的寄存器的职责。它们依据从指令字的地址部分求得的有效地址来读写数据。程序计数器所指向的不是数据,而是放置指令本身的单元地址;就对象究竟是「数据」还是「指令」这一点而言,本选项是错误的。这是很容易混淆的经典陷阱,务必把两者区分清楚。
- 程序计数器 (指令地址寄存器) 是保存下一条要执行的指令所在主存储器地址的寄存器。每取出一条指令,它就自动更新为指向下一条指令;遇到分支指令时则被设置为分支目标地址。要点在于:它保存的既不是指令的数量,也不是区域的大小,而是地址。
- CPU 内主要寄存器的分工 —— 程序计数器 (下一条指令的地址)、指令寄存器 (取出的指令本身)、地址寄存器和变址寄存器 (数据的主存储器地址、有效地址计算)、累加器和通用寄存器 (运算对象与运算结果的数据)。不把「指令的地址」和「数据的地址」搞混,就是能否得分的分水岭。