为什么我们使用字节寻址而不是字寻址?

Edg*_*rie 3 memory assembly mips

所以我刚开始在我的组织和架构课程中,现在我们正在研究MIPS中的内存寻址.我刚刚读到了如何以字节为单位来寻址内存,这很好,因此当我们将一个字加载到寄存器时,我们必须使用4的倍数来访问内存,这也很好.

令我感到困惑的是,为什么我们甚至懒得让自己在单个单词中访问字节,如果我们最终加载到寄存器中的话必须是一个完整的单词.为什么我们不做单词寻址并省去乘以4的麻烦?我们可能想要获得单个字节的原因吗?

fuz*_*fuz 5

直到70年代,以字面为单位的机器一直很受欢迎.那时候,你有一个字节(其中一个字节有5到10位,取决于机器)用于商业数据处理的机器(想想银行和保险公司),而科学机器则是单词(其中一个字在12到60位之间).

为什么这会改变呢?如果您所能做的就是处理内存的话,那么处理文本就相当困难了.为了不浪费内存,字机通常会在每个单词中存储一堆字符.要处理字符串,你不能只使用指针,因为字符串可以在单词的中间开始或结束.这需要一些相当复杂的编程来进行文本处理.

当计算机用于进行算术时,只需很少的文本处理来读取输入和打印输出就可以了,但随着交互式计算机的出现,文本处理变得越来越重要,完全将文字机推出市场.

字机在DSP(数字信号处理器)等特殊应用中仍然很常见,但它们的缺点是无法用正常语言编程,而编写程序的方式没有一些重大变化.

至于为什么CPU需要专用字节加载和存储的问题:它不直接需要它们.例如,早期的Alpha教授没有这些说明.如果要加载一个字节,可以加载一个字并使用位移和屏蔽操作来获取所需的字节.类似地,要存储一个字节,您将获取一个字,屏蔽掉您想要的字节,或者在您要存储的字节中,然后将该字写回内存.这可行,即使它比专用字节加载/存储指令慢一点.

但是,当您需要对内存执行原子操作时会出现问题.因为您需要加载然后存储以将单个字节写入内存,所以写入字节不是原子操作.您可以通过提供加载链接/存储专用指令来解决此问题,但是更容易提供(原子)字节加载和存储,因为这些都是经常需要的.