单词和字节之间有什么区别?

88 memory hardware assembly terminology cpu-architecture

我做了一些研究.一个字节是8位,一个字是可以在内存中寻址的最小单元.单词的确切长度会有所不同.我不明白的是有一个字节是什么意思?为什么不说8位?

我问过这个问题的教授,他说这些天大多数机器都是字节可寻址的,但这会产生什么结果呢?

Dar*_*ust 152

字节:今天,一个字节几乎总是8位.然而,情况并非总是如此,并且没有"标准"或任何指示这一点的东西.由于8位是一个方便的数字,它成为事实上的标准.

:处理器处理数据自然大小(寄存器大小).今天遇到的最常见的字大小是8,16,32和64位,但是其他大小也是可能的.例如,有几台36位机器,甚至12位机器.

字节是CPU的最小可寻址单元.如果要设置/清除单个位,首先需要从存储器中获取相应的字节,弄乱这些位,然后将字节写回存储器.

相反,这个是处理器一次可以进行处理(如加法和减法)的最大块位.该定义有点模糊,因为某些处理器可能针对不同的任务具有不同的字大小(例如,整数与浮点处理).字大小是大多数操作的用法.

还有一些处理器具有不同的指针大小:例如,8086是16位处理器,这意味着它的寄存器是16位宽.但它的指针(地址)是20位宽,并通过以某种方式组合两个16位寄存器来计算.

  • 对于额外的功劳,"半字节"是半个字节的常用术语.它出现在早期的微型计算机CPU时代(*例如*,Intel 8080),并且总是被理解为4位,因为那时字节已经稳定到8位. (10认同)
  • 很好的答案.我只是狡辩说"相反,这个词是处理器可以处理的最大块数......一次*".它实际上是**最常见的**块*等等.*随着时间的推移而发展的许多架构的字大小并不是它们最宽的,但它们通常限制在它们可以用它们做什么最广泛的价值观. (8认同)
  • 今天,8位字节是标准; 见IEC 80000-13:2008. (6认同)
  • x86(通常)使事情变得复杂:在Intel术语中,“字”为16位,即使在现代x86 CPU上,其默认操作数大小为32位(dword),整数寄存器宽度为64位(qword)。xmm寄存器的宽度为128位(“ movdqa”移动双四进制)。存储器总线至少为64位宽(并且以64字节的突发传输=缓存行),并且执行单元到缓存路径的宽度至少为128位,或者至少为256甚至512位。不管现代x86的本机字长是多少,它都不是16位,但是现代x86仍然使用8086术语。 (2认同)
  • @Crystina:是的,更具体地说:它通常是_通用寄存器_的大小(例如,浮点寄存器可能具有不同的大小)。 (2认同)

Ste*_*n C 15

我不明白的是有一个字节是什么意思?为什么不说8位?

除了技术点,一个字节不一定是8位,有一个术语的原因是简单的人性:

  • 努力的经济(又称懒惰) - 说"字节"而不是"八位" 更容易

  • 部落主义 - 一群人喜欢使用行话/私人语言来区别于其他人.

只是顺其自然.您不会通过抱怨来改变50多年积累的IT术语和文化包袱.


FWIW - 当你的意思是"8位独立于硬件架构"时使用的正确术语是"八位字节".


Vai*_*tle 7

字节

我试图从C++的角度回答这个问题.

C++标准将"byte"定义为"可寻址的数据单元,其大小足以容纳执行环境的基本字符集的任何成员".

这意味着该字节至少包含足够的相邻位以容纳实现的基本字符集.也就是说,可能值的数量必须等于或大于不同字符的数量.在美国,基本字符集通常是ASCII和EBCDIC集合,每个集合可以容纳8位.因此,保证一个字节至少有8位.

换句话说,一个字节是存储单个字符所需的内存量.

如果要验证C++实现中的"位数",请检查文件'limits.h'.它应该有一个如下所示的条目.

#define CHAR_BIT      8         /* number of bits in a char */
Run Code Online (Sandbox Code Playgroud)

Word被定义为可由机器/系统一起处理(即,在一次尝试中)的特定比特数.或者,我们可以说Word定义了在单个操作中可以在CPU和RAM之间传输的数据量.

计算机中的硬件寄存器是字大小的.字大小还定义了最大可能的内存地址(每个内存地址指向一个字节大小的内存).

注 - 在C++程序中,内存地址指向一个字节的内存而不是一个字.


cni*_*tar 6

为什么不说8位?

因为并非所有机器都有8位字节.既然你这个标记C,查找CHAR_BITlimits.h.


Voi*_*tar 5

一个字是处理器中寄存器的大小.这意味着处理器指令,如add,mul等在字大小的输入上.

但是大多数现代架构都具有可以在8位块中寻址的存储器,因此使用"字节"这个词很方便.


npc*_*diu 5

在这种情况下,单词是机器在处理内存时使用的单位.例如,在32位机器上,字长32位,64位长64位.字大小决定了地址空间.

在编程(C/C++)中,单词通常由int_ptr类型表示,其长度与指针相同,这样就可以抽象出这些细节.

但是有些API可能会让您感到困惑,例如Win32 API,因为它有类型(如WORD16位)和DWORD(32位).原因是API最初的目标是16位机器,然后移植到32位机器,然后移植到64位机器.要存储指针,您可以使用INT_PTR.更多细节在这里这里.


joh*_*und 5

似乎所有答案都假设高级语言,主要是 C/C++。

但是这个问题被标记为“汇编”,并且在我知道的所有汇编程序中(对于 8 位、16 位、32 位和 64 位 CPU),定义更加清晰:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")
Run Code Online (Sandbox Code Playgroud)

  • 不,这些大小仅在 16 位机器上有效。您可能已经习惯了仍然使用这些宏的 Windows 编程,因为它是 16 位时代的遗产,而且 MS 没有费心去纠正这个问题。 (4认同)
  • 顺便说一句,因为一个字(甚至一个字节)的大小可能会有所不同,所以 ISO-C 有 `int<X>_t` 和 `uint<X>_t` 类型(加上更多),如果你想的话应该使用它们特定位大小的变量/参数。 (2认同)

归档时间:

查看次数:

149634 次

最近记录:

6 年,11 月 前