所以我刚开始参加我的组织和架构课程,现在我们正在研究MIPS中的内存寻址。我刚刚读到了如何以字节为单位来寻址内存,这很好,因此当我们将一个字加载到寄存器时,我们必须使用4的倍数来访问内存,这也很好。
但是,令我困惑的是,为什么我们甚至懒得让自己在单个单词中访问字节,如果我们最终加载到寄存器中的话必须是一个完整的单词。为什么我们不做单词寻址并省去乘以4的麻烦?我们可能想要获得单个字节的原因吗?答案 0 :(得分:5)
直到70年代,以字面为单位的机器一直很受欢迎。那时候,你有一个字节(其中一个字节有5到10位,取决于机器)用于商业数据处理的机器(想想银行和保险公司),而科学机器则是单词(其中一个字在12到60位之间)。
为什么这会改变?如果您所能做的就是处理内存的话,那么处理文本就相当困难了。为了不浪费内存,字机通常会在每个单词中存储一堆字符。要处理字符串,你不能只使用指针,因为字符串可以在单词的中间开始或结束。这需要一些相当复杂的编程来进行文本处理。
当计算机用于进行算术时,只需很少的文本处理来读取输入和打印输出,这是可以的,但随着交互式计算机的出现,文本处理逐渐变得更加重要,完全将字机推出市场。
Word机器在DSP(数字信号处理器)等特殊应用中仍然很常见,但它们的缺点是无法使用普通语言进行编程,而且编写程序的方式不会发生重大变化。
至于为什么CPU需要专用字节加载和存储的问题:它并不直接需要它们。例如,早期的Alpha教授并没有这些指示。如果要加载一个字节,可以加载一个字并使用位移和屏蔽操作来获取所需的字节。类似地,要存储一个字节,您将获取一个字,屏蔽掉您想要的字节,或者您要存储的字节,然后将该字写回内存。这可行,即使它比专用字节加载/存储指令慢一点。
但是,当您需要对内存执行原子操作时会出现问题。因为您需要加载然后存储以将单个字节写入内存,所以写入字节不是原子操作。你可以通过提供加载链接/存储专用指令来解决这个问题,但是提供(原子)字节加载和存储更容易,因为这些都是经常需要的。