我做了一些研究。一个字节是8位,而一个字是可以在存储器中寻址的最小单元。单词的确切长度会有所不同。我不明白的是拥有一个字节有什么意义?为什么不说8位呢?
我问一个教授这个问题,他说现在大多数机器都是字节寻址的,那会产生什么呢?
我做了一些研究。一个字节是8位,而一个字是可以在存储器中寻址的最小单元。单词的确切长度会有所不同。我不明白的是拥有一个字节有什么意义?为什么不说8位呢?
我问一个教授这个问题,他说现在大多数机器都是字节寻址的,那会产生什么呢?
Answers:
字节:今天,一个字节几乎总是8位。但是,情况并非总是如此,也没有“标准”或规定这一点的东西。由于8位是一个方便使用的数字,因此它已成为事实上的标准。
字:处理器处理数据的自然大小(寄存器大小)。今天遇到的最常见的字长是8、16、32和64位,但其他大小也是可能的。例如,有一些36位机器,甚至12位机器。
该字节是CPU的最小可寻址单元。如果要设置/清除单个位,则首先需要从内存中获取相应的字节,将这些位弄乱,然后将该字节写回到内存中。
相比之下,该字是处理器一次可进行处理(例如加法和减法)的最大比特位。这个定义有点模糊,因为某些处理器可能针对不同任务具有不同的字长(例如,整数与浮点处理)。字大小是大多数操作所使用的词。
还有一些处理器具有不同的指针大小:例如8086是16位处理器,这意味着其寄存器为16位宽。但是它的指针(地址)是20位宽,是通过以某种方式组合两个16位寄存器来计算的。
word
即使在默认操作数大小为32位(dword)且整数寄存器宽度为64位(qword)的现代x86 CPU上,a也为16位。xmm寄存器的宽度为128位(movdqa
移动双四进制)。存储器总线至少为64位宽(并且以64字节的突发传输=缓存行),并且执行单元到缓存路径的宽度至少为128位,或者为256甚至512位。不管现代x86的本机字长是多少,它都不是16位,但是现代x86仍然使用8086术语。
我不明白的是拥有一个字节有什么意义?为什么不说8位呢?
除了一个字节不一定是8位的技术观点外,使用术语的原因还很简单:
省力(又名懒惰)- 说“字节”比说“八位” 更容易
部落主义-一群人喜欢用行话/一种私人语言将他们与其他人区分开。
只是顺其自然。您不会因为抱怨而改变50多年的IT术语和文化包accumulated。
FWIW-当您表示“独立于硬件体系结构的8位”是“八位字节”时使用的正确术语。
字节
我试图从C ++的角度回答这个问题。
C ++标准将“字节”定义为“可寻址数据单元,其大小足以容纳执行环境的基本字符集的任何成员。”
这意味着该字节至少包含足够的相邻位,以容纳用于实现的基本字符集。即,可能值的数量必须等于或超过不同字符的数量。在美国,基本字符集通常是ASCII和EBCDIC集,每个字符集可以容纳8位。因此,可以保证一个字节至少有8位。
换句话说,字节是存储单个字符所需的内存量。
如果要验证C ++实现中的“位数”,请检查文件“ limits.h”。它应该具有如下所示的条目。
#define CHAR_BIT 8 /* number of bits in a char */
字
字被定义为机器/系统可以一起处理(即一次尝试)的特定位数。或者,我们可以说Word定义了一次操作即可在CPU和RAM之间传输的数据量。
计算机计算机中的硬件寄存器为字大小。字长还定义了最大可能的内存地址(每个内存地址都指向一个字节大小的内存)。
注–在C ++程序中,内存地址指向内存的一个字节,而不是一个字。
一个字就是处理器中寄存器的大小。这意味着处理器指令(如add,mul等)位于字大小的输入上。
但是大多数现代体系结构都具有可按8位块寻址的内存,因此使用“字节”一词很方便。
似乎所有答案都使用高级语言,主要是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")
int<X>_t
和uint<X>_t
类型(以及更多)。
单词的确切长度会有所不同。我不明白的是拥有一个字节有什么意义?为什么不说8位呢?
即使一个字的长度有所不同,但在所有现代机器上,甚至在我熟悉的所有较旧的体系结构上,字的大小仍然是字节大小的倍数。因此,相对于可变字长,在“ 8位”上使用“字节”没有特别的缺点。
除此之外,还有一些在“ 8位” 上使用字节(或八位字节1)的原因:
1尽管我将这个答案的字节视为8位,但这并不是普遍适用的:在较旧的计算机上,字节的大小可能有所不同(例如6位。无论机器是什么,八位字节始终表示8位(因此在现代用法中,字节被压倒性地用作8位的同义词。
无论数据表和编译器中使用什么术语,“字节”都是八位。让我们不要试图将询问者和一般性与更晦涩的例外相混淆,尤其是当“字节”一词来自“八分之一”这一表达时。我在半导体/电子行业工作了三十多年,从来没有人知道“字节”用来表示超过八位的内容。
计算机存储的基本单位是位。一个位可以包含两个值之一(0和1)。计算机中的所有其他存储都基于位的集合。给定足够的位数,令人惊讶的是,计算机可以代表多少种东西:数字,字母,图像,电影,声音,文档和程序,仅举几例。一个字节是8位,在大多数计算机上,它是最小的方便存储块。例如,大多数计算机没有指令来移动一位,但是有一条指令来移动字节。不太常见的术语是单词,它是给定计算机体系结构的本机数据单位。一个字由一个或多个字节组成。例如,具有64位寄存器和64位存储器寻址的计算机通常具有64位(8字节)字。计算机以其本机字大小而不是一次执行一个字节来执行许多操作。电脑存储 连同大多数计算机吞吐量一样,通常以字节和字节集合为单位进行测量和操作。千字节(KB)是兆字节1,024字节,兆字节(MB)是1,024 2字节千兆字节(GB)是1,024 3字节(TB),即TB,是1,024 4字节(PB),即PB,是1,024 5字节。制造商经常将这些数字四舍五入,并说兆字节为100万字节,千兆字节为10亿字节。网络测量是该一般规则的例外;它们以位为单位给出(因为网络一次只移动数据一点)024 5字节计算机制造商经常将这些数字四舍五入,说兆字节是100万字节,千兆字节是10亿字节。网络测量是该一般规则的例外;它们以位为单位给出(因为网络一次只移动数据一点)024 5字节计算机制造商经常将这些数字四舍五入,说兆字节是100万字节,千兆字节是10亿字节。网络测量是该一般规则的例外;它们以位为单位给出(因为网络一次只移动数据一点)
对于某些体系结构,一组8位称为一个字节(但不是:)
甲字是由处理器的指令集和/或硬件作为一个单元来处理的比特的固定大小的组。这意味着通用寄存器的大小(通常大于一个字节)是一个字
在C语言中,一个单词通常被称为整数=>int
octet
被定义为明确表示8位序列。但我喜欢byte
更好的声音:)
byte
更好的声音”:我强烈怀疑您并不孤单,对于某些利基系统来说并不安全,一个字节的“混乱”可能不是8位大小这些天不再相关。
实际上,在通常的用法中,单词已成为16位的同义词,就像字节具有8位的含义一样。由于32位CPU上的“字长”为32位,因此可能会引起一些混乱,但是当谈论一个数据字时,它的意思是16位。具有32位字长的微控制器已将其指令称为“ longs”(据说是为了避免字/双字混淆)。
ldrh
加载16位并将其零扩展到32位寄存器中。或ldrsh
加载并符号扩展16位。