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

时间:2011-10-13 06:17:43

标签: assembly memory hardware terminology cpu-architecture

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

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

14 个答案:

答案 0 :(得分:141)

字节:今天,一个字节几乎总是8位。但是,那wasn't always the case并没有“标准”或者说明这一点的东西。由于8位是一个方便的数字,因此它成为事实上的标准。

Word natural size with which a processor is handling data(寄存器大小)。今天遇到的最常见的字大小是8,16,32和64位,但是其他大小也是可能的。例如,有一些36 bit machines,甚至12 bit machines

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

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

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

答案 1 :(得分:15)

  

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

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

  • 努力的经济(又名懒惰) - 说“字”而不是“八位”更容易

  • 部落主义 - 一群人喜欢用行话/私人语言将他们与其他人分开。

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


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

答案 2 :(得分:7)

<强> BYTE

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

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

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

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

如果要验证C ++实现中的“位数”,请检查文件'limits.h'。它应该有如下的条目。

#define CHAR_BIT      8         /* number of bits in a char */

字符

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

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

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

答案 3 :(得分:6)

  

为什么不说8位?

因为并非所有机器都有8位字节。自您标记此C后,请在CHAR_BIT中查找limits.h

答案 4 :(得分:5)

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

但是大多数现代架构都有可以在8位块中寻址的内存,所以使用“byte”这个词很方便。

答案 5 :(得分:5)

在此上下文中,单词是机器在处理内存时使用的单位。例如,在32位机器上,字长32位,64位长64位。字大小决定了地址空间。

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

有些API可能会让您感到困惑,例如Win32 API,因为它有WORD(16位)和DWORD(32位)等类型。原因是API最初的目标是16位机器,然后移植到32位机器,然后移植到64位机器。要存储指针,可以使用INT_PTR。更多详情herehere

答案 6 :(得分:4)

似乎所有的答案都假设高级语言,主要是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")

答案 7 :(得分:2)

无论数据表和编译器中的术语是什么,“字节”都是8位。让我们不要试图将查询者和一般性与更加模糊的例外混淆,特别是因为“Byte”这个词来自“By Eight”这个词。我在半导体/电子行业工作了三十多年,而且一度不知道'Byte'用来表达超过8位的东西。

答案 8 :(得分:2)

  

单词的确切长度会有所不同。我不明白的是有一个字节是什么意思?为什么不说8位?

即使单词的长度不同,在所有现代机器甚至是我熟悉的所有旧架构上,字大小仍然是字节大小的倍数。因此,相对于可变字大小,使用“字节”而不是“8位”没有特别的缺点。

除此之外,以下是使用字节(或八位字节 1 )而不是“8位”的一些原因:

  1. 更大的单位只是方便避免非常大或非常小的数字:你可能会问“为什么说3纳秒,当你可以说0.000000003秒”或“为什么说1公斤,当你可以说1000克”等。
  2. 除了方便之外,字节的单位在某种程度上与1 基本相同,因为许多操作通常不在字节级别,而是在字节级别:寻址内存,分配动态存储,从文件或套接字读取等。
  3. 即使您采用“8位”作为一种单位,所以你可以说“两个8位”而不是“两个字节”,让你的新单位开始时往往会很困惑一个号码。例如,如果有人说“一百八位”,它很容易被解释为108位,而不是100位。
  4. 1 虽然我会认为这个答案的字节为8位,但这并非普遍适用:在较旧的机器上,字节可能有不同的大小(例如6 bits Octet 总是意味着8位,无论机器如何(因此这个术语通常用于定义网络协议)。在现代用法中,字节绝大多数用作同义词8位。

答案 9 :(得分:1)

参考:https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

计算机存储的基本单位是位。一点可以包含两个之一 值0和1。计算机中的所有其他存储都基于位的集合。 给定足够的位数,令人惊讶的是一台计算机可以代表多少东西: 数字,字母,图像,电影,声音,文档和程序 一些。一个字节是8位,在大多数计算机上,这是最小的方便 大块存储。例如,大多数计算机没有说明 移动一点,但确实要移动一个字节。不太常见的词是单词 这是给定计算机体系结构的本机数据单位。一个词组成 一个或多个字节。例如,一台具有64位寄存器和64位 位存储器寻址通常具有64位(8字节)字。一台计算机执行 许多操作都以其本机字大小而不是一次为一个字节进行。 通常测量计算机存储以及大多数计算机的吞吐量 并以字节和字节集合进行操作。 一千字节(KB)为1,024字节 一个兆字节(MB)是1,024 2字节 1 GB或1,024 3个字节 TB或TB为1,024 4字节 PB(PB)为1,024 5字节 计算机制造商通常会四舍五入这些数字,并说 兆字节是100万字节,千兆字节是10亿字节。联网 测量是该一般规则的例外;它们以位为单位 (因为网络一次只能移动数据)

答案 10 :(得分:-1)

如果一台机器是字节可寻址的,并且一个字是可以在存储器上寻址的最小单元,那么我猜一个字就是一个字节!

答案 11 :(得分:-1)

一组8位被称为字节(对于某些体系结构,它不是:)例外

是固定大小的位组,由处理器的指令集和/或硬件作为一个单元处理。这意味着通用寄存器的大小(通常大于一个字节)是一个单词

在C中,一个词最常被称为整数=&gt; int

答案 12 :(得分:-1)

BYTE和WORD的术语与所引用的处理器的大小有关。最常见的处理器是8位,16位,32位或64位。这些是处理器的WORD长度。实际上,无论数字长度如何,WORD的一半都是BYTE。准备好了,BYTE的一半是NIBBLE。

答案 13 :(得分:-3)

事实上,在常见的用法中,word已成为16位的同义词,就像字节有8位一样。由于32位CPU上的“字大小”是32位,所以可能会有点混乱,但在谈论一个数据字时,一个意思是16位。具有32位字长的微控制器已经将其指令称为“长”(据说可以尝试避免单词/双字混淆)。