我在本汇编编程教程中读到,8位用于数据,而1位用于奇偶校验,然后将其用于检测奇偶校验错误(由硬件故障或电气干扰引起)。
这是真的?
我在本汇编编程教程中读到,8位用于数据,而1位用于奇偶校验,然后将其用于检测奇偶校验错误(由硬件故障或电气干扰引起)。
这是真的?
Answers:
数据的一个字节为八位,每个字节的数据可能在操作系统甚至硬件级别使用更多位进行错误检查(奇偶校验位,或更高级的错误检测方案),但数据为八位位和任何奇偶校验位通常对于软件是不可见的。字节已标准化表示“数据的八位”。文本的正确性在于,存储一个字节的数据可能比八位数据的位数更多,但文本本身并不通常被认为是字节本身的一部分,这本身就是事实。
您可以在本教程的以下部分中看到此内容:
Doubleword: a 4-byte (32 bit) data item
4 * 8 = 32,它实际上可能在系统上占用36位,但出于您的意图和目的,它仅为32位。
char
在C中(链接所指的是)恰好是内存的最小可寻址单元。它仅称为char,但是C标准使其成为byte的同义词。
传统上,字节可以是任意大小,并且只是内存的最小可寻址单元。如今,软件的8位字节已基本标准化。正如JustAnotherSoul所说,硬件存储的位数可能比8位数据的位数还要多。
如果您在使用可编程逻辑器件(例如FPGA),则可能会看到它们的内部存储器通常可寻址为9位块,而作为HDL作者,您可以使用该第9位进行错误检查或仅存储更大的数量。每个“字节”的数据量。购买用于定制硬件的存储芯片时,通常可以选择8位或9位可寻址单元(或16 / 18、32 / 36等),然后由您决定是否具有9位“字节”以及什么内容如果选择使用第9位,就可以使用。
该文本措辞极差。他几乎可以肯定地说的是ECC (纠错码) RAM。
ECC ram通常使用9位存储8位的信息。额外的每字节位用于存储纠错码。
(在两种情况下,每个字节都分布在每个芯片上。图片由Puget Systems提供)
硬件用户完全看不见这一切。在这两种情况下,使用此RAM的软件每个字节都能看到8位。
顺便说一句:RAM中的纠错代码通常实际上不是每个字节1位;而是每字节1位。相反,它们是每8字节8位。这具有相同的空间开销,但具有一些其他优点。有关更多信息,请参见SECDED。
一般来说,简短的答案是一个字节为8位。这简化了问题(有时甚至到了不准确的程度),但是大多数人(包括大量程序员)都熟悉该定义,几乎每个人都默认使用该定义(无论他们使用多少个不同大小的字节)我必须与之合作)。
更具体地说,对于给定的体系结构,字节是最小的可寻址存储单元,并且通常足够大以容纳单个文本字符。在大多数现代体系结构中,一个字节定义为8位。ISO / IEC 80000-13还指定了一个字节为8位,这与流行的共识一样(这意味着如果您要谈论的是9位字节,除非您明确指出,否则您将遇到很多麻烦。说明您的意思不是普通字节)。
但是,此规则也有例外。例如:
sizeof(char)
,同时还间接指出a char
必须至少为8位,每个字节必须具有唯一的地址,并且连续字节之间不得有任何空格。在记忆中。 这是为了使这些语言比明确要求8位字节的语言具有更高的可移植性。[ CHAR_BIT
在C库标头“限制”(limits.h
在C,climits
在C ++中)中,字节的位数指定为。)
因此,在大多数情况下,一个字节通常为8位。如果不是,则可能为 9位,并且可能是36位字的一部分,也可能不是。
请注意,术语“ 字节”在没有上下文的情况下定义不明确。就计算机体系结构而言,至少对于现代体系结构,您可以假定一个字节为8位。这在很大程度上由诸如C之类的编程语言进行了标准化,该语言要求字节至少具有 8位,但不能为更大的字节提供任何保证,因此每字节8位是唯一安全的假设。
有些计算机的可寻址单元大于8位(通常为16或32),但是这些单元通常称为机器字,而不是字节。例如,具有32K 32位RAM字的DSP将被广告为具有128 KB或RAM,而不是32 KB。
当涉及到通信标准时,事情并没有那么明确。ASCII仍被广泛使用,它具有7位字节(在计算机上恰好适合8位字节)。UART收发器仍被生产为具有可配置的字节大小(通常,每个字节至少要选择6、7和8位之间的数据,但并非闻所未闻的是5和9)。
通常将字节定义为存储空间的最小可单独寻址单元。它可以是任何大小。已经有一些字节大小在6到9位之间甚至更大的体系结构。在有些架构中,唯一可寻址的单元是总线的大小,在这种架构上,我们可以说它们根本没有字节,或者字节与字大小相同(在一种特殊情况下,我知道是32位);无论哪种方式,绝对不是8位。同样,存在位可寻址的体系结构,在这些体系结构上,我们可以再次争论字节根本不存在,或者我们可以争论字节为1位。任一种方法都是明智的定义,但是8位肯定是错误的。
在许多主流通用体系结构上,一个字节包含8位。但是,不能保证。您与主流和/或通用CPU的距离越远,遇到非8位字节的可能性就越大。到目前为止,某些高度可移植的软件甚至使大小可配置。例如,较旧的GCC版本包含一个称为BITS_PER_BYTE
(或类似名称)的宏,该宏为特定体系结构配置了字节的大小。我相信可以使NetBSD的某些旧版本运行在非8位每字节的体系结构上。
如果您真的想强调的是要谈论的是8位的确切数量,而不是最小的可寻址内存量(无论可能多大),则可以使用术语octet,例如,在许多较新的RfC中都使用了它。
CHAR_BIT
(位于中limits.h
),我不知道BITS_PER_BYTE
一个字节是8位。
在遥远的过去,对于存储字和字节有不同的定义。这种歧义在当今生活中普遍存在或普遍存在的说法是错误的。
至少从1970年代末开始,一个字节为8位。家用计算机和PC的大众在其文档中都明确地将字节用作8位值,软盘驱动器,硬盘驱动器以及PROM / EPROM / EEPROM / Flash EPROM的所有数据表和文档也是如此我在该时间段内已读取的/ SRAM / SDRAM存储芯片。(在这段时间里,我亲自阅读了很多内容。)以太网和其他一些通信协议在谈论八位字节时对我来说很不寻常。
字节一词的含糊不清本身就是一种罕见且晦涩的事物。在过去的30年或以上的时间里,很少有程序员,设计工程师,测试工程师,销售人员,服务工程师或普通用户会认为,如果他们完全意识到8位值,则意味着除8位值以外的其他含义。 。
当字节由硬件处理时,例如存储在内存芯片中或通过导线进行通信时,硬件可以向该字节添加冗余数据。以后这可能有助于检测硬件错误,以便可以识别和丢弃不可靠的数据(例如,奇偶校验,校验和,CRC)。或者,它可能允许纠正数据中的错误并恢复数据(例如ECC)。无论哪种方式,当已检索或接收字节以进行进一步处理时,冗余数据都将被丢弃。该字节保留为中心8位值,冗余数据仍为冗余数据。
首先,您所参考的教程似乎已经过时,并且似乎针对的是x86处理器的过时版本,但没有说明它,因此您在此处阅读的许多内容将不会被其他人理解(例如,如果您声称(一个WORD是2个字节),人们要么不知道您在说什么,要么他们知道您是根据非常过时的x86处理器学习的,并且知道您会期望什么。
字节是任何人决定的位数。可以是8位,9位或16位。在2016年,大多数情况下一个字节为8位。为了安全起见,您可以使用术语八位位组-八位位组始终是八位。
真正的困惑是两个问题:1.字节中的位数是多少?2.如果我想将一个字节从一个地方转移到另一个地方,或者如果我想使用实际的物理方法存储一个字节,我该怎么做?除非您在制造调制解调器,硬盘驱动器或SSD驱动器的公司工作,否则第二个问题通常对您几乎没有兴趣。在实践中,您对第一个问题感兴趣,而对于第二个问题,您只是说“好吧,有人来照看”。
提到的奇偶校验位是一种原始机制,可帮助检测当将字节存储在内存中,随后再读取该字节时,由于某种偶然性,内存发生了变化。这样做不是很好,因为它不会发现两个位已被更改,因此很可能无法检测到更改,并且由于无法找出8个位中的哪个已更改,因此无法从问题中恢复。 ,或者即使奇偶校验位已更改。
奇偶校验位实际上不以该原始形式使用。永久存储的数据通常以更复杂的方式受到保护,例如,通过将32位或更长的校验和添加到1024字节的块中-占用的额外空间要少得多(本示例中为0.4%,而不是12.5%),并且不太可能发现什么时候出了问题。
WORD
s 时,我会假设为“ WinAPI” ,这...可以证明您的观点,因为许多WinAPI类型名称已过时,但为了向后兼容而保留。xP
在现代用法中,字节为8位周期(尽管历史上它有其他定义)。另一方面,数据字是所讨论的硬件作为原子单元处理的任何东西,可以是8位,9位,10位,12位,16位,20位,24位,32位等。各种计算机多年来,这些系统具有各种不同的字长。
为了实现存储系统或传输协议,增加涉及附加位的错误检测/纠正是有益的。它们不占用9位字节,因为如上所述,一个字节为8位。
各种方案以各种方式添加了错误检测和/或校正。
奇偶校验的典型用法是在传输字上添加一个额外的位,以便接收器可以检测到单个错误位。
可以提供单比特纠错的方案包括每个32位数据字增加4个ECC位。这恰好在算术上等效于每字节1位,但是不能/不能那样工作。一个36位数据字可以承载足够的信息,以从32位数据空间的单个位错误中恢复。
8位。在CPU和键盘内部,它是9位和11位。但是,用户数据以8位表示。键盘上的键发送唱歌,分为11位。1个开始位,1个结束位,1个奇偶校验位和8个代表按键的位。