今天内容较为简单,不做PPT,主要理顺一些比较乱的概念性问题

此外,这些寄存器的英文名建议都背下来,否则到时候遇到不认识就完蛋了

CPU至少有5个专用寄存器。它们是:程序计数器(PC),指令寄存器(IR),存储器地址寄存器(MAR),储存器数据寄存器(MDR),状态标志寄存器(PSWR)。

1>程序计数器:又称指令计数器,用来存放正在执行的指令地址或接着要执行的下条指令地址。

2>指令寄存器:用来存放从存储器中取出的指令。

3>存储器数据寄存器:用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存写入一条指令或一个数据字时,也暂时将它们存放在存储器数据寄存器中。

4>存储器地址寄存器:用来保存当前CPU所访问的主存单元的地址。

5>状态标志寄存器:用来存放程序状态字。程序状态字的各位表示程序和机器运行的状态,是参与控制程序执行的重要依据之一,它包括状态标志和控制标志。

其余均是通用寄存器

取寄存器内内容一般没有特别声明是否需要加内容符号,因为有时候也会有误解

但一般自己写的时候注意要加符号,题目里面暂时还没有出现这类破事情,除了偏移时候

留了个大坑

然后就是几个特例吧,其实主要还是透明不透明的事情

程序计数器是唯一一个控制器中的可以编程的寄存器,即可视,不透明的

暂存寄存器是唯一一个运算器里面不能编程的寄存器,即不可视,透明的

书上的概念性问题想考自然可以考得非常细,非常杂乱无章,实在是得一句句啃下去

首先明确一点,可见=不透明,不可见=透明

这是和我们生活中透明=可见相反的,为什么会这样?

是因为名词都是老外那里引入的,我们翻译过来就很别扭了

在英文中,透明就有点“屏蔽”的意思,那你说屏蔽了还能可见吗?

以下是王道书里的结论:
所有用户/程序员可见(不透明):PC、PSW、ACC、通用寄存器。
所有用户/程序员不可见(透明):MAR、MDR、IR、暂存器、Cache、uMAR、uMDR、uIR。

汇编程序员可见,所有用户可见基础上外加:中断字寄存器、基址寄存器、变址寄存器。
系统程序员可见,所有用户可见基础上外加:虚拟存储器。

绝对是能把人绕晕

注意,程序状态字寄存器=标志寄存器=条件码寄存器=PSW。都是同一个东西,不同教材表述不一样。

关于可见与能否修改的问题:

一般能修改内容的那么一定可见即不透明能编程,可见不透明能编程的不一定能修改内容

关于存储字长、按XX编址、PC位数的问题:

如果题目没说存储字长,那么按什么编址,就以这个为存储字长

比如按字节编址,那么就认为一个存储字长=8位

如果按字编址,那么一个存储字长=机器字长

但是如果题目明确给出存储字长,那么就按照给的来

有了存储字长,就能把主存容量写成容量=存储字数×存储字长=2^(MAR位数)×MDR位数。

这样就能得出MAR位数和MDR位数

至于PC和MAR的关系,如果题目没说,默认PC位数=MAR位数

如果题目明确说了PC至少是多少位,那么PC最少就是要能够区分不同的指令,也就是PC位数>=log2(指令条数)

关于糟糕的11题和24、26题:

按字节编址,4GB=2^32×B,因此MAR位数是32位。

一般情况下,可以认为,PC的位数等于MAR位数。但是本题,有个条件,指令按字边界对齐存放,问PC的位数至少是多少位。

PC的作用是识别不同指令地址,指令字长=32位=4B,因此4GB=2^30×4B,因此有2^30条指令,每条指令都是按字边界对齐,意味着每条指令的地址都是一个字的开始的位置。比如这里,字节地址是0 1 2 3……,由于字长4B,因此这里每个字的开始的位置是0 4 8 12……二进制为

0000 0000 0000 0000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0000 0000 0100

0000 0000 0000 0000 0000 0000 0000 1000

0000 0000 0000 0000 0000 0000 0000 1100

可以发现这里末2位永远是0,因此末2位可以省略。因此PC的位数至少是30位

这边对齐的意思,大致上就是首位对齐,所以就会导致有一些位数实际上是不需要的

所以PC也自然就只需要存储有效位

这个稍微注意下,就这样吧