バイトには8ビット、または9ビットが含まれていますか?


56

このアセンブリプログラミングチュートリアルでは、データには8ビットが使用され、パリティには1ビットが使用され、パリティエラー(ハードウェア障害または電気的妨害による)の検出に使用されることを読みました。

これは本当ですか?


5
バイトの可能性については、cs.stackexchange.com / a / 19851/584を参照してください。
AProgrammer 16

63
その記事はナンセンスに満ちているので、無視してください。
デビッドシュワルツ

12
あなたがped慢になりたいなら、単にそれらを「オクテット」と呼んでください。その記事は、非常に特殊なプロセッサ(何らかの理由でROMにパリティビットを保持する必要があるプロセッサ)を念頭に置いて書かれているか、または単なるワックです。たとえば、Microchip PICは14ビットの語長を使用します。プログラムメモリ全体は、N x 14ビットの配列で構成されています。
ニックT

13
@NickT:しかし、それらは同じものではありません。オクテットは常に8ビットで、バイトは何でもかまいません。
ヨルグWミットタグ

4
この記事では、初期のIBM PCで使用されていたメモリ修正メカニズムについて言及している場合がありますが、「バイトは8ビットデータ+ 1ビットパリティ」と言うのはまったく無意味です。例として、CD-ROMは通常、貪欲なエラー修正メカニズムを使用します。一般的なオーディオCDは、オーディオデータ24バイトごとに8バイトを使用します。しかし、最も重要な部分はあなたが気にしないということです。まったく。これは、実際のメモリストレージメカニズム専用です。CPUは気にしませんし、コードも気にしません。
ルアーン

回答:


78

データのバイトは8ビットです。OSまたはハードウェアレベルで使用されるデータのバイトごとに、エラーチェック用のビット(パリティビット、またはより高度なエラー検出スキーム)がありますが、データは8ビットです。ビットとパリティビットは通常、ソフトウェアからは見えません。バイトは「8ビットのデータ」を意味するように標準化されています。テキストは、8ビットのデータよりも多くのデータのバイトを格納するための専用のビットがあるかもしれないと言うのは間違っていませんが、これらは通常、バイト自体の一部とは見なされません。テキスト自体はこの事実を示しています。

これは、チュートリアルの次のセクションで確認できます。

Doubleword: a 4-byte (32 bit) data item

4 * 8 = 32の場合、実際にはシステム上で36ビットを占有する可能性がありますが、意図と目的のためには32ビットのみです。


5
ハードウェアがエラー検出を実装している場合、おそらく512バイトセクターなどのように、1バイトよりも大きなメモリチャンクで実行します。このようにして、必要な追加メモリのオーバーヘッドを削減できます。明確にするために、エラー修正を行っても、ハードウェアは1バイトあたり8ビットに加えて、データの「チャンク」ごとにいくつかのビットを使用します。
バクリウ16

11
ソフトウェアで表示可能な非8ビットバイトを備えたシステムがあることに注意してください。どのプラットフォームに8ビット文字以外のものがあるかをご覧くださいStackOverflowでの質問。
ルスラン

3
はい、確かに存在します。その特定のリンクは非8ビット文字について話しているものの、つまり、バイトは、特定のシステムが「char」を保存するのに必要なビット数を単に参照するために使用され、これは6ビットという低さでした。しかし、IIRCでは、バイトが8ビットであることがIEC-80000仕様で標準化されています。主流のシステムから離れると、当然のことながら奇妙なことに気づきます。標準は法律ではありません。
JustAnotherSoul

3
@JustAnotherSoul:また、バイトを「少なくとも8ビット」または他の方法で定義する競合する標準があります。数十年後、バイトの定義が人々の心の中でどのように変化するかを見るのは興味深いです。はるかに多くのアーキテクチャの不均一性の時代には、バイトは単にアーキテクチャのアドレス可能な最小単位でした(例については、さまざまなPDPを参照してください)。これは、インターネットの出現で、バイトが8ビットデータのチャンクの普遍的な単語ではなかったため、ワイヤ上のデータを表すためにオクテットという用語が使用された理由でもあります。
PlasmaHH 16

2
@JustAnotherSoulはchar、Cで(これがリンクの目的である)メモリの最小のアドレス可能な単位であることに注意してください。これは単にcharと呼ばれますが、C標準ではbyteと同義になっています
ルスラン

48

従来、バイトは任意のサイズであり、アドレス可能な最小単位のメモリです。最近、ソフトウェアでは8ビットバイトがほぼ標準化されています。JustAnotherSoulが言ったように、ハードウェアは8ビットのデータよりも多くのビットを保存する場合があります。

FPGAなどのプログラマブルロジックデバイスで作業している場合、その内部メモリは多くの場合9ビットチャンクとしてアドレス可能であり、HDLの作成者として、エラーチェックや大量の格納に9ビットを使用できます。 「バイト」あたりのデータ数。カスタムハードウェア用のメモリチップを購入する場合、通常、8ビットまたは9ビットのアドレス指定可能なユニット(または16 / 18、32 / 36など)を選択できます。その後、9ビットの「バイト」とあなたがそれを持っていることを選択した場合、あなたはその9番目のビットで行います。


10
一般に、論理的には1つのユニットであるが8ビットより多い/少ないデータのグループがある場合、「ワード」と呼ばれます。たとえば、一部のプロセッサは40ビットの命令ワードを使用します。
デブスマン16

3
+1。ちなみに、「ビットポインター」と「バイトポインター」の両方を持つアーキテクチャがありました。そのようなアーキテクチャでは、バイトは技術的には「メモリの最小アドレス単位」ではありません(各ビットを個別にアドレス指定できるため)、それ何であるかを簡潔に言うのは困難です。私はそれが「私がそれを見たときそれを知っている」種類のものだと思います。:-P
ruakh 16

18
「オクテット」は、バイトサイズが異なる可能性のあるシステム間のさまざまな通信プロトコルに対して、「バイトと呼びますが、実際には正確に8ビットを意味します」という意味で伝統的に使用される単語でした。しかし、最近では、8ビット以外を意味するバイトを使用するのは時代錯誤です。
wnoise 16

@Devsman必ずしもではありません。たとえば、x86チップには32ビットワードと8ビットバイトがあります。バイトは、アドレス可能な最小サイズです。この単語はもう少し曖昧に定義されていますが、作業するのに最も便利なサイズになる傾向があります。すなわち、ほとんどの命令の予想オペランド長。
レイ

これは正解としてマークする必要があり、より正確です。
awiebe

32

そのテキストは非常に貧弱な言葉です。彼はほぼ間違いなくECC (エラー訂正コード) RAM について話している。

ECCラムは通常、9ビットを使用して8ビットの情報を保存します。余分なバイト/ビットは、エラー修正コードを保存するために使用されます。

ECC対非ECC (どちらの場合も、すべてのバイトがすべてのチップに分散されています。画像はPuget Systems提供

これはすべて、ハードウェアのユーザーにはまったく見えません。どちらの場合も、このRAMを使用するソフトウェアは1バイトあたり8ビットを認識します。


余談ですが、RAMのエラー修正コードは通常、実際には1バイトあたり1ビットではありません。代わりに、8バイトあたり8ビットです。これには同じスペースオーバーヘッドがありますが、いくつかの追加の利点があります。詳細については、SECEDDを参照してください。


12
パリティRAMとECC RAMは別のものです。パリティRAMは、エラードメインごとに1つの追加ビットを保存し、すべてのシングルビットエラーを検出でき、ダブルビットエラーは検出できず、何も修正できません。ECCは、エラードメインごとに複数の追加ビットを保存し、すべてのシングルビットエラーを検出および修正できます。すべてのダブルビットエラーを検出できますが、修正はできません。パリティRAMは最近ではほとんどなく、ECC RAMにほぼ完全に置き換えられています。
マーク

1
@Mark:私は最後の段落でそのことをほのめかしました。リンクには詳細があります。(72,64)エラー訂正コードのオーバーヘッドは(9,8)パリティコードと同じであるため、最近ではパリティRAMは基本的に存在しません。
BlueRaja-ダニーPflughoeft

7
あなたがそれをほのめかす間、あなたはそれを不正確/混乱させるものも述べます。ECC RAMは「9ビットを使用して8ビットの情報を保存」しません。これは、9ビットを使用して8ビットのECCを実行できることを意味しますが、これは不可能です。8ビットの離散情報の場合、1ビットのエラーがあれば、1ビットのエラーを検出できますが、修正はできません。ECCでは、データのグループのエラーを修正するのに十分なデータ(通常は1バイトよりも大きい)を格納するために、より多くのビットまたはバイトを使用します。これは平均で 8ビットごとに余分なビットになる場合がありますが、8ビットごとに1ビットのみを関連付けることに分解することはできません。
Makyen 16

36ビットスキーム(32ビットワード+ 4ビットECC)があり、シングルビットエラー修正と2ビットエラー検出が可能です。算術的に8データビット+ 1 ECCビットに分割できますが、そのように動作することはできません。32ビットのデータをカバーする4ビットのECCが必要です。
Zenilogix

@Zenilogixと同じことを繰り返した他の人たち:ECCがどのように機能するかを私は非常によく理解しており、私が言ったことは間違っていませんでした。8ビットECCを9ビットで実行できると主張したことはありません。ECCRAMは1バイトあたり9ビットのストレージを使用すると言いました。ECCがどのように機能するかは、この質問では完全に範囲外です。そのため、詳細をリンクとは別に残しました。すべてのつまらないコメントを停止してください。
BlueRaja-ダニーPflughoeft

16

一般的に言えば、短い答えはバイトが8ビットであるということです。これは問題を単純化します(不正確になる場合もあります)が、ほとんどの人(多数のプログラマーを含む)が精通している定義であり、定義はほぼ全員がデフォルトにしています(サイズの異なるバイト数に関係なく) veで作業する必要がありました)。

より具体的には、バイトは、指定されたアーキテクチャの最小のアドレス可能なメモリユニットであり、一般に単一のテキスト文字を保持するのに十分な大きさです。最新のアーキテクチャでは、1バイトは8ビットとして定義されています。ISO / IEC 80000-13は、一般的なコンセンサスと同様に、バイトが8ビットであることも指定しています(たとえば、9ビットバイトについて話している場合、明示的に指定しない限り、多くの問題に直面することを意味します)通常のバイトを意味しないと述べてください)。

ただし、この規則には例外があります。例えば:

そのため、ほとんどの場合、バイトは通常8ビットになります。そうでない場合は、おそらく 9ビットであり、36ビットワードの一部である場合とそうでない場合があります。


8

バイトという用語は、コンテキストがないと明確に定義されないことに注意してください。コンピュータアーキテクチャに関する限り、少なくとも最新のアーキテクチャでは、1バイトは8ビットであると想定できます。これは、Cなどのプログラミング言語によって大幅に標準化されました。Cでは、少なくとも 8ビットのバイトが必要でしたがより大きなバイトの保証はありませんでした。

8ビット(通常は16または32)より大きいアドレス可能なユニットを持つコンピューターがありますが、これらのユニットは通常、バイトではなくマシンワードと呼ばれます。たとえば、32K 32ビットRAMワードのDSPは、32 KBではなく128 KBまたはRAMとしてアドバタイズされます。

通信規格に関しては、物事はそれほど明確に定義されていません。ASCIIは今でも広く使用されており、7ビットバイト(コンピューターの8ビットバイトにうまく収まります)を持っています。UARTトランシーバーは、構成可能なバイトサイズを持つように製造されます(通常、少なくとも6、7〜8ビット/バイトを選択できますが、5と9は前代未聞ではありません)。


6

通常、バイトは、個別にアドレス指定可能な最小のメモリ空間単位として定義されます。任意のサイズにすることができます。6〜9ビットのバイトサイズのアーキテクチャがありますが、さらに大きい場合もあります。また、アドレス指定可能なユニットがバスのサイズのみであるアーキテクチャもあります。そのようなアーキテクチャでは、単にバイトがないか、バイトがワードと同じサイズであると言えます(特定のケースでは、 32ビット); どちらにしても、間違いなく8ビットではありません。同様に、ビットアドレス指定可能なアーキテクチャがあります。これらのアーキテクチャでは、バイトが単に存在しないと主張することも、バイトが1ビットであると主張することもできます。どちらの方法も賢明な定義ですが、8ビットは間違いです。

多くの主流の汎用アーキテクチャでは、1バイトに8ビットが含まれています。ただし、それは保証されません。メインストリームや汎用CPUから遠く離れるほど、8ビット以外のバイトに遭遇する可能性が高くなります。これは、非常に移植性の高いソフトウェアでさえ、サイズを構成可能にするほどです。たとえば、GCCの古いバージョンにはBITS_PER_BYTE、特定のアーキテクチャのバイトサイズを構成する(またはそのようなもの)というマクロが含まれていました。NetBSDのいくつかの古いバージョンは、非8ビット/バイトアーキテクチャーで実行することができると信じています。

本当にアドレス指定可能な最小メモリ量ではなく、8ビットの正確な量について話していることを強調したい場合、たとえ多くの新しいRfCで使用されているoctetという用語を使用できます。


2
事前に定義されたマクロ持っ++標準CおよびC CHAR_BIT(で見つかったがlimits.h)、私は認識していないよBITS_PER_BYTE
njuffa

3

1960年にプログラミングを始めたとき、6ビットバイトの48ビットワードがありました。その名前ではなく、文字と呼ばれていました。その後、75ビットワードと15ビットバイトのGolemコンピューターで作業しました。後に、IBMが360を発表するまで、6ビットバイトが標準でしたが、今日では1バイトは一般にオクテット、つまり8ビットのデータに相当します。一部のハードウェアには、エラー検出および場合によってはエラー修正のための追加ビットがありましたが、これらはソフトウェアからアクセスできませんでした。


3

1バイトは8ビットです。

遠い過去には、メモリワードとバイトの異なる定義がありました。このあいまいさが広まっている、または今日の生活で一般的であるという示唆は誤りです。

少なくとも1970年代後半以降、1バイトは8ビットでした。フロッピーディスクドライブ、ハードディスクドライブ、PROM / EPROM / EEPROM / Flash EPROMのすべてのデータシートとドキュメントと同様に、ホームコンピューターとPCの大衆は、ドキュメントで8ビット値として1バイトを明確に使用しています。その期間に読んだ/ SRAM / SDRAMメモリチップ。(そして、私は個人的にその期間にわたってそれらの多くを読んでいます。)イーサネットと他のいくつかの通信プロトコルは、オクテットについて話す際に異常であると私には際立っています。

バイトという用語のあいまいさ自体は、まれであいまいなものです。過去30年以上のプログラマ、デザインエンジニア、テストエンジニア、営業担当者、サービスエンジニア、または平均的なパンターの人口は、その言葉をまったく認識していなければ、8ビット値以外のものを意味すると考えている人はほとんどいません。

バイトがメモリチップに格納されている場合や、有線で通信されている場合など、ハードウェアによってバイトが処理される場合、ハードウェアはバイトに冗長データを追加する場合があります。これは、後でハードウェアエラーの検出に役立ち、信頼性の低いデータ(パリティ、チェックサム、CRCなど)を認識して破棄できるようになります。または、データのエラーを修正し、データを復元できる場合があります(ECCなど)。どちらの方法でも、バイトが取得または受信されてさらに処理されると、冗長データは破棄されます。バイトは中央の8ビット値のままであり、冗長データは冗長データのままです。


2

まず、あなたが参照しているチュートリアルは非常に時代遅れであるようであり、それを述べることなく、x86プロセッサの時代遅れのバージョンに向けられているようですので、そこで読んだ多くのことは他の人に理解されませんWORDが2バイトであると、人々はあなたが何について話しているのか分からないか、非常に古いx86プロセッサに基づいて教えられたことを知り、何を期待すべきかを知るでしょう)。

バイトは、だれかが決定するビット数です。8ビット、9ビット、または16ビットのいずれでも構いません。2016年、ほとんどの場合、1バイトは8ビットになります。安全のために、オクテットという用語を使用できます-オクテットは常に、常に8ビットです。

ここでの本当の混乱は、2つの質問を混乱させることです。1バイトのビット数は?2. 1つのバイトをある場所から別の場所に転送したい場合、または実際の物理的手段を使用してバイトを保存したい場合、どうすればよいですか?2番目の質問は、モデム、ハードドライブ、またはSSDドライブを製造している会社で働いている場合を除き、通常はほとんど関心がありません。実際には、最初の質問に興味があり、2番目の質問には「まあ、誰かがその世話をします」と言うだけです。

言及されたパリティビットは、バイトがメモリに格納され、後でバイトが読み取られたときに、メモリが偶然に変更されたことを検出するのに役立つプリミティブメカニズムです。2ビットが変更されたことが検出されないため、変更が検出されない可能性が高く、変更された8ビットのいずれかを検出する方法がないため、問題から回復できないため、それはあまり得意ではありません、またはパリティビットが変更された場合でも。

パリティビットは、そのプリミティブ形式では実際には使用されません。永続的に保存されるデータは、通常、より複雑な方法で保護されます。たとえば、1024バイトのブロックに32ビット以上のチェックサムを追加することにより、余分なスペースが大幅に少なくなり(この例では12.5%ではなく0.4%)何かが間違っているときに見つけられない可能性が低くなります。


本当に時代遅れ:16バイトの「段落」は、リアルモードとセグメントアドレッシングからの切り替え以来、メモリの意味のある単位ではありませんでした。
マーク

個人的には、誰かが2バイトWORDs について話すとき、「WinAPI」と仮定します。これは、WinAPIの型名の多くが時代遅れですが、下位互換性のために保持されているため、ちょっとあなたの主張を証明します。xP
ジャスティンタイム

1

ここで示した本当に優れた答えにもかかわらず、パリティビットまたはエラー訂正ビットが定義により「メタデータ」であり、バイト自体の一部ではないことを誰も指摘していないことに驚いています。

バイトには8ビットがあります


0

現代の使用法では、バイトは8ビットのピリオドです(ただし、これまでは他の定義がありました)。一方、データワードは、問題のハードウェアがアトミックユニットとして扱うもので、8ビット、9ビット、10ビット、12ビット、16ビット、20ビット、24ビット、32ビットなどです。長年にわたるシステムには、あらゆる種類の異なるワードサイズがありました。

メモリシステムまたは伝送プロトコルを実装するには、追加ビットを含むエラー検出/訂正を追加することが有益です。前述のように、バイトは8ビットであるため、9ビットのバイトを作成しません。

さまざまなスキームにより、さまざまな方法でエラー検出および/または修正が追加されます。

パリティの一般的な用途は、受信機がエラーの単一ビットを検出できるように、送信ワードに余分なビットを追加することです。

シングルビットのエラー訂正を提供できる方式には、32ビットのデータワードごとに4 ECCビットの追加が含まれます。これはたまたま1バイトあたり1ビットと算術的に等価ですが、そのように動作することはできません。1つの36ビットデータワードは、32ビットデータ空間のシングルビットエラーから回復するのに十分な情報を運ぶことができます。


0

8ビット。CPUとキーボードの内部では、9ビットと11ビットです。ただし、ユーザーデータは8ビットで表されます。キーボードのキーは、11ビットに分割された歌を送信します。1つの開始ビット、1つの終了ビット、1つのパリティビット、および押されたキーを表す8ビット。


2
これは質問に答えますか?CPUのバイトとキーボードのバイトの長さが異なるということですか?「歌う」は「弦」または「ストリーム」である必要がありますか?
Apass.Jack

実際のデータそのものではなく、フレーミングデータを含むワイヤープロトコルについて話しているように聞こえます。
ピーターコーデス

私は、「歌う」は「シグナル」、私自身、@ Apass.Jackと仮定します。
ジャスティンタイム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.