字节寻址和位寻址的主要区别是什么?

What is the main difference between byte addressable and bit addressable?

我正在学习8051,发现很难理解byte addressable and bit addressable

一种支持对单个数据字节进行唯一访问的硬件架构。

例如,让我们假设一个数字 0x1234 (0001001000110100)。当将数字存储在可字节寻址的系统上时,数据的第一个字节 (00010010) 获得到第二个字节 (00110100) 的唯一地址,即内存中对齐的每个字节将是唯一可寻址的。您只能以 8 位块的形式操作内容。

然而,在微控制器寄存器存储数据的情况下,如果您可以一点一点地操纵其内容,则称为位可寻址。

他们用的术语真的不对,byte addressable 就是我们习惯用一个地址表示一个内存或内存中唯一的字节space。位可寻址意味着内存中的每个位 space 都有一个唯一的地址,但事实并非如此。他们只是向您展示如何制作一些可以访问单个位的 macros/variables,这不是 8051 的东西,而是通用编程的东西,并且使用变量类型或关键字(或只是宏)在 C 中专门为他们的编译器实现。

他们告诉你的是他们有这个 sbit 声明,除非它只是一个宏,否则显然不是 C 标准声明。但是你可以在没有的情况下做同样的事情。他们为你做的只是位操作。通常要设置第 5 位,你会做类似

的事情
variable |= (1<<5);  

清除位 5

variable&=~(1<<5);

您当然可以从中创建宏以使其更通用。他们为这个编译器所做的是允许你声明一个变量,它是其他变量中的一个位,然后你可以将该位大小的变量设置为一或零。