2024 PubMed 408 - コンピュータ構成の原則 第 2 章 - データ表現の研究ノート

記事ディレクトリ

序文

現在、24大学院入試を準備中ですが、24コンピュータ408で学習・整理した知識をまとめました。

Blogger ブログ記事ディレクトリ インデックス:ブログ ディレクトリ インデックス (継続的に更新)


1. 番号体系とコーディング

画像-20230522101813180


1.1、キャリーカウンティングシステム

画像-20230522101911368


1.1.1. 計数法(最も古い計数法、10進法、r進法)

最も古い数え方: 先頭の基本文字で表される数字には、より大きな数字を表現したい場合、10000、100,000 などのより大きな文字を構築する必要があるという欠点があります。
画像-20230522102207208

  • このうち、MDCCCLXXXVIII: は 1 1000 + 1 500 + 3 100... を意味し、最終的には足し算の考え方でこの数値を求めます。

10進数表記

位权·: 対応する数字の位置に応じて表す重み。

画像-20230522102802128

  • 人間には指が 10 本あり、10 を 1 に足すことができます。これは人間の法則により一致します。

プロモーション: r 進数表記

16進数: 時間

コンピュータは通常、2 進数、8 進数、16 進数を使用します。異なる r システムでは、r ごとに 1 を加算する必要があります。

基数: 各デジタル ビットで使用される異なるシンボルの数。r システムの基本は r です。

画像-20230522104540603


1.1.2、塩基変換

①任意の基数を10進数に変換する

画像-20230522104915941


②2進数→8進数、16進数

画像-20230522105309211

③8進数、16進数から2進数へ

画像-20230522105336877


④ 10進数から任意の基数へ(整数、10進数、パッチワーク法含む)

画像-20230522105556403

10進整数部の処理の場合:除算により桁数を連続的に求める

画像-20230522105620546

小数処理の場合:

画像-20230522105826228

10進数から2進数へ(パッチワーク方式)

画像-20230522110124584

画像-20230522110136041

10 進数から 8 進数などに変換する場合は、まず 2 進数に変換し、次に 2 進数を対応する r 進数に変換します。上記の例を利用して以下のように続行すると、最終的に得られる 8 進数は 1025.1 になります。

画像-20230522110203584


1.1.3. 各種ベースの共通記述方法

画像-20230522105508243


1.1.4、真理値とマシン番号

画像-20230522110326735

知識の復習と重要な試験ポイント

画像-20230522110509138


1.2、BCDコード

1.2.1. BCD コードを理解する

画像-20230522165517068

4 ビットは 10 進数に対応します

画像-20230522113720746


1.2.2. BCDのエンコード方式:8421コード(認可コード)を知る

最初の BCD コードのエンコード方式は 8421、つまり 4 桁ごとに数値を表します。

画像-20230522114114005

8421の加算計算はどのように行うのですか

①手計算方法:最初に10進数を使用して結果を加算し、次に8421表現に変換します。

画像-20230522113905432

②コンピュータによる方法:

画像-20230522114344464

手順: ① まず直接二値計算を行います。② 0~9の範囲にあり、1010~1111に定義されているか、直接表現であるか、+6にないかを判断します。③ 得られた結果は 8421 モードでは 4 ビットで表現され、1 ビットに相当します。

例 9+9 の場合18 の 2 進数は 10010 実際には全体が 1010-1111 を超えているので +6 も必要 このときの補正は 18 の 11000 となります。

画像-20230522114903941

注:加算結果が法定範囲内の場合は修正の必要はありません。


1.2.3、残り3ヤード(不正コード)

画像-20230522170019801

残りの 3 ヤードは、8421 ヤードの +3 を参照して、新しいマッピング スキームを取得します。

8421 コードでは、各ビットに固定の重みがあり、表される 4 つのビットはそれぞれ 8、4、2、1 です。残りの 3 つのコードでは、各ビットに固定の重みがありません。

  • 8421を右コード、残り3ヤードを非右コードと呼びます。

1.2.4、2421ヤード

これも 4 ビットで表され、重みは左から右に 2 4 2 1 になります。

画像-20230522170520007

曖昧さを避けるため、例えば5は0101や1011でも表すことができます。この際、2421コードについては規定が設けられています。

規則: 0 ~ 4 の最初の桁は 0、5 ~ 9 の最初の桁は 1 です


知識の復習と重要な試験ポイント

画像-20230522173222824


1.3、符号なし整数

コンピュータにおける符号なし整数の応用:

画像-20230522173550904

画像-20230522173600765


1.3.1. 符号なし整数はコンピュータ内で表現される

語長8ビットで説明していますが、現在一般的なシステムの機械語長は64ビットまたは32ビットです。

画像-20230522174131495

Unsigned にはバイナリの符号付きビットが含まれておらず、8 ビットが足りない場合は 0 を追加できます。

画像-20230522174621405

真の値のサイズが 2 進数で 8 ビットを超える場合、下位 8 ビットのみがレジスタに保持され、余分なビットは省略されます。


1.3.2. 符号なし整数の加算

下位ビットから上位ビットに直接加算します。

画像-20230522174859973


1.3.3. 符号なし整数の減算

減算: 減算を加算演算に変換します。

手順: ① 減数はそのままで、すべての減数を反転+1します。② 次に、加算演算に従って 2 進数を計算します。

举例:A=99,B=9,A-B=90

A = 01100011
B = 00001001

①被减数不变 A = 01100011,减数全部取反+1 => 11110111
②加法运算
  01100011
+ 11110111
-----------
 101011010  => 90

画像-20230522175744629


ナレッジポイントの復習

画像-20230522175920240


1.4. 符号による表現と操作(正字・逆字・補字含む)

画像-20230522180325077

同じ数値に対して、コンピューターでは異なる元の逆補数表現を使用できます。

画像-20230522180450863


知識補足(オリジナル、逆変換、補完変換、オリジナルコードを補完するクイックメソッド)

正の数: 元の否定は変更されません。

負の数: 逆コードは正の数の逆数であり、補数コードは逆コード +1 です。

画像-20230522181937297

  • 上記の負の数の変換は機械変換のプロセスです。

負の数の元のコードを補数コードに変換する簡単な方法: 手計算を強くお勧めします

画像-20230522182245089


1.4.1. 符号付き整数の表現(オリジナルコード)

画像-20230522180550406

デモンストレーションには 8 ビットのマシンワード長も使用してください。

元のコードの符号ビットは次のことを示します

機械語長が指定されていない場合、x=-19 の場合、[x] original =1,10011と表現できます。

  • 記号ビットにはカンマを使用してください。

画像-20230522181252488


1.4.2、元のコードの加算と減算

元のコードの加算と減算: 元のビット単位の加算と減算を使用すると、最終結果は間違ったものになり、それを処理するには複雑なハードウェア回路を設計する必要があります。

画像-20230522181507058

実際、補数コード方式を使用して操作を実行できます。


1.4.3. 相補加算演算

2 の補数での加算: 加算のルールは以前と同じです

例 1: 正の数 + 負の数。結果の値を取得するには、最初に最後の補数を元のコードに変換する必要があります。

画像-20230523203610514

例 2: ネガティブ + ネガティブ

画像-20230523203921275


1.4.4. 相補減算演算

補数コードの減算演算の実装方法: 一文で表すと、 [A]補数- [B]補数= [A]補数+ [-B]補数

画像-20230523204618005

例 1:

画像-20230523205524984


知識ポイントの復習と要約

画像-20230523205553469


1.5. 元コード・逆コード・補コードの特性比較

画像-20230523205848438

ここにちょっとしたトリックがあります。オーバーフローかどうかを判断するには、最初にそれらの結合値を手動で計算します。対応するコードの範囲を超えた場合、それはオーバーフローを意味します。

画像-20230523210111184


1.6、フレームシフト

1.6.1. フレームシフトについて

フレームシフトを取得するにはどうすればよいですか? コードシフトは補数コードに基づいて符号ビットを反転することで得られます。

画像-20230523210524217

フレーム シフトは整数のみを表現できますが、小数は表現できません。真の値 0 の表現は 1 つだけであり、その表現範囲は補数と一致します。

符号なし整数として解釈される場合、現時点でのコード シフトは 0 ~ 255 だけです。

コードシフト アプリケーション: 通常、浮動小数点数の指数に使用されます。

画像-20230523211214101


1.6.2. 複数のコードを使用して整数を表現する (新しいコードシフト部分)

画像-20230523211441996


1.6.3. 各種コードの基本特性のまとめ(フレームシフト含む)

さまざまなコードの比較にはフレーム シフトが含まれます。

画像-20230523211331826


1.7、固定小数点整数 (符号付き整数)、10 進数

1.7.1. 固定小数点小数点の表現 (原数、逆数、補数を含む)

符号付き整数はデフォルトでは固定小数点整数と呼ばれ、デフォルトは最後の位置に固定されます。

固定小数点整数: 小数点が末尾にあります。

  • 符号化には、元のコード、反転コード、相補コード、およびシフトコードが含まれます。

固定小数点 10 進数: 小数点は符号ビットの後の 1 桁です。

  • エンコーディングには、オリジナル、リバース、補完が含まれます。

画像-20230523212255177

固定小数点の元のコード表現: 小数点の位置に従ってビットの重みを決定します。

画像-20230523212503466

固定小数点小数点の補数と補数について:固定小数点整数と全く同じ

画像-20230523212547276


1.7.2. 固定小数点の加算と減算

固定小数点小数点の加算と減算: 固定小数点整数とまったく同じ

画像-20230523212636787


1.7.3. 固定小数点整数と固定小数点小数点の比較(有効範囲、桁拡張位置)

法的範囲:

画像-20230524094954096

桁拡張の位置が異なります。小数点は末尾まで直接拡張され、整数は符号ビットまで拡張されます。

画像-20230524095150374


1.7.4. 小数の補数の加算と減算

添加

画像-20230524095518336

画像-20230524095553723

引き算

小数補数での減算: 前の整数と一致

画像-20230524095648386


2. 操作方法と操作回路

2.1. 基本的なコンピューティングコンポーネント

画像-20230524110653474

ハードウェアを使用して加算を実装する方法は、議論すべき重要な問題です。


2.1.1. ALU 算術論理演算ユニット (コンポーネントおよび ALU インスタンスを含む) について理解する

アル

画像-20230524111131855

ALU制御信号成分

画像-20230524111738549

  • このうち、Ai と Bi は入力信号を表し、対応する Fi は出力信号を表します。
  • 制御ユニットは命令の意味を解析する役割を担っており、命令が加算、減算、その他の論理演算命令であっても、CU は命令を解析した後、ハイレベルまたはローレベルの制御信号を送信します。

以下は ALU の例です。 74181 の 4 ビット ALU

画像-20230524112929075

①M=1は論理演算(0なら算術演算)、その他のs0~s3は対応する命令演算、4で16種類を表現できます。

  • このチップは 16 種類の論理演算と 16 種類の算術演算をサポートできます。

②A と B は 4 ビットのデータを入力できることを示し、ALU は加算、減算、乗算、除算後に 4 ビットの出力 Fi を出力します。

③マシンの語長とは、実はALUに同時に何ビット入力できるかの情報(本質)を指します。

④ 対応する演算器の X レジスタの桁数は、通常、ALU のレジスタの桁数と一致します。

⑤この部分の入出力信号は実際には他のチップと直列に接続されるように設計されており、具体的な機能については当面検討しません。


2.1.2. 回路の基礎知識

2.1.2.1、論理演算

最も基本的な論理演算:複雑な四則演算・論理演算を問わず、最も基本的な論理演算(1ビット)で実現

画像-20230524113825818

  • ゲート回路を使用して実装される論理演算(基本的にハイレベルとローレベル)

さまざまな結合法則を通じて、さまざまな数の回路コンポーネントを使用して次のことを実現できます

画像-20230524114421747

  • ロジックやロジックと同時に出現した場合は、優先順位に従ってどちらが先に実行するかが決まります。
  • 左側の A(C+D) には 2 つのコンポーネントのみを使用する必要があるのに対し、右側の AC+AD には 3 つのコンポーネントが必要であることがわかります。この例を通して、簡略化された論理式は Reduce できることが明確にわかります。電気部品を使用することでコスト削減を実現します。

2.1.2.2、複合論理演算

画像-20230524115104454

このうち、XOR 自然論理は加算とパリティチェックを実現できます。


2.1.3. XORゲート回路の実用化

2.1.3.1. 偶数パリティを実現するゲート回路例

偶数テスト: 1 が偶数個あります

  • 偶数個の 1 を XOR 演算すると、結果は 0 になります。奇数個の 1 に対して XOR を実行し、最終的な XOR 結果は 1 になります。

[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-tzIYRMi3-1685321272458) (C:\Users\93997\AppData\Roaming\Typora) \typora-user-images\ image-20230524115445312.png)]

それを回路でどう実現するか偶数パリティビットを見つけるためのゲート回路の例。

画像-20230524115655222


2.1.3.2、加算演算を実現するXORゲート(1ビット全加算器)

XOR ゲートは加算演算をどのように実装するのでしょうか? 全加算器。

入力 Ai、Bi、および下位ビットから出力 Si および Ci へのキャリー Ci-1 を通じて、XOR を使用してこのプロセスを実現できます。

画像-20230524120729749


2.1.3.3. 全加算器(直列加算器、並列加算器)により多ビット加算を実現

最初のタイプ: シリアル加算器

実装プロセス: Ai と Bi を入力し、最後のキャリー値を読み取り、1 ビット加算器演算を実行します。取得された Ci キャリー値はキャリー フリップフロップに保存され、1 ビットの桁上げ時に読み出すことができます。 adder が再度実行されます。 計算を実行します。

画像-20230524121051957

2 番目のタイプ: 並列加算器

低次のものを計算した場合にのみ、高次のものを計算できます。

画像-20230524121535068

動作速度は前のキャリーの速度に依存します。


知識ポイントの復習と要約

画像-20230524121752790


2.2. 並列加算器の最適化を深く理解する(並列化実現のブレークスルーポイント)

前の 1 ビット加算器に基づいて、現時点で議論すべき問題は、キャリーをより速く生成するにはどうすればよいかということです。

Ci を計算するための元の式の拡張は、以下の図で見ることができます。各 Ci は前の Ci-1 に依存するため、前の Ci を使用せずに各 Ci を計算するいくつかの方法を使用できますか?

  • これには並列加算器の最適化が含まれます。Gi = AiBi、Pi = Ai XOR Bi とします。

画像-20230524144557231

次に、それを Ci の式に戻します。たとえば、C 1 =G 1 +P 1 C 0をC 2に代入すると、C 2の式がわかります。画像-20230524145103633

現時点ではC2 が最もオリジナルな C 0のみに依存していることに驚くかもしれません。では、このようにして他の C iにどのように取り込むことができるのでしょうか? また、すべての新しい Ci は最もオリジナルの C 0にのみ依存しますが、これは何の役に立つのでしょうか?

  • Ci の計算では、以前のシリアル順序に依存できなくなり、すべての Ci の最終計算が完了するまで並列処理によって複数の Ci を同時に計算でき、その後、それらは均一に処理されると考えられます。この時。

画像-20230524144700001

最終的な構成は上図の 4 ビット CLA 加算器で、その大部分は FA といくつかの新しい回路と演算ロジックで構成されています。

したがって、並列加算器の最適化を要約できます: 元々、数式が完全に表示されていない最初の時点では、Ci は前のもの (Ci-1) に依存しているように見えます。実際、展開後、各 C i は実際はがC 0のみに依存する場合、C iの計算は直列順序に従う必要がなく、C iのすべての計算が完了し、計算プロセスが均一に実行されるまで、並列技術を計算に使用できます。


2.3. 補数コード加算・減算演算子

2.3.1. 加算器の原理

加算器には主に加数 A と被加数 B の下位 2 つの入力端が含まれており、右側は下位ビットのキャリー、左側は最上位ビットのキャリー、上側は加算の結果です。

画像-20230524150811161


2.3.2、補数加算・減算のハードウェア回路実現

①補数加算・減算の手動計算方法

以下の例 1: XY の計算結果は -15 ですが、実際には最小値より小さく、オーバーフローします。

画像-20230524151238582


②相補コード加減算のハードウェア実装(オーバーフロー問題はフラグビットにより判断する必要がある)

ハードウェア実装のアイデア (フラグ ビットなし)

以下の加算器は、補数の加算と減算だけでなく、符号なしの加算と減算にも役立ちます。

マシン内での補数の加算および減算演算の実装では、以前に紹介した加算器で次の点も改善されています。

加算演算は次のようになります。これが + であるため、右側の減算は 0 になります。このとき、制御信号が 0 であるため、Y 入力の減数は加算器に直接送信されて演算に参加します。加算器の右側に Cin=0、最後に A、B、Cin が加算されます。

画像-20230524154706007

減算を行う場合、B+1の全ビットを反転するというのが手計算の考え方ですが、このとき加算器でどのように実現するのでしょうか?

減算なので、この時点ではサブ制御信号は 1 ですが、Y 入力が入力されると 1 のパスを通り、全ビットが反転されて加算器に渡されます。入力値は 1 です。したがって、この 1 が Cin によって渡される点を除いて、手計算のアイデアと一致しています。

画像-20230524155034575

上記の論理ルールは次のとおりです

画像-20230526105932746

しかし、この時点ではまだ問題があり、加算と減算の過程でオーバーフローの状況をどのように判断するか? 符号なしの数値と符号付きの数値の例をそれぞれ示します。

符号付き数値の例:

画像-20230524160318182

符号なし数値の例:

画像-20230524160351064

オーバーフロー状況の例:

无符号数 X=3,Y=4
用4bit表示,X=0011B,Y=0100B
X-Y=0011 + (1011+1) = 1111B=15D ×
解释:实际最终求得的值为-1,而通过目前加法器流程可直接得到15是有问题的

有符号数举例:
4bit补码,X=-8,Y=7
X补 = 1000,Y补=0111
X-Y=1000 + (1000 + 1) = 10001 = 1D
解释:实际最终求得的值为-15,表示数的只有3位,直接溢出了

上記のようなオーバーフローの状況に対して、ハードウェアとしてのマシンはどのように判断するのでしょうか?今回ご紹介するのは以下の国旗です。


③フラグビットの生成(意味と具体例解説)

4 つのフラグは次のように丸で囲まれています。

画像-20230526113206945

画像-20230526113114899

4 つのフラグ:

  • OFフラグ(Overflow Flagオーバーフローフラグ):最上位ビットと次位ビットのXOR結果の値です。OF が 1 の場合はオーバーフローを意味し、0 の場合はオーバーフローなしを意味します。符号なしビットとは関係ありません。
  • SF フラグ (サイン フラグ): 結果が負の場合は 1 に設定され、それ以外の場合は 0 に設定されます。符号なしビットとは関係ありません。
  • ZF フラグ (Zero Flag ゼロフラグ): 演算結果は 0 に設定され、それ以外の場合は 0 に設定されます。
  • CF フラグ (キャリー フラグ キャリー/ボロー フラグ): キャリー/ボローが発生すると 1 に設定され、それ以外の場合は 0 に設定されます [CF= C out ^ Sub 、ここで C outの値は最高のキャリー値、Sub は加算または[減算、加算は 0、減算は 1]、最後の CF が 1 の場合、オーバーフローを意味します。符号付きの数字には意味がありません。

上記のフラグに従って 1 つずつ説明します

①例: 符号付き数値の場合、下の黄色のボックスが最上位ビットと 2 番目に上位ビットです

オーバーフロー状態なし:

画像-20230526111120497

オーバーフロー状態が発生しています。

画像-20230526111318394

②例:符号付き数字の場合

以下の紫色の丸で囲まれた SF フラグを取得できます。1 の場合は負の数を意味し、SF は 1 に設定されます。0 の場合は正の数を意味し、SF は 0 に設定されます。

画像-20230526111604387

③例:最終結果のn個の数値がすべて0の場合は1、それ以外の場合は0を設定します。

④例:符号なし数値の場合

最上位ビットの桁上がりをとった値と、現在の加算または減算演算を行った結果(加算が 0、減算が 1)XOR してオーバーフローかどうかを判定します。1 であればオーバーフロー、そうでなければオーバーフローです。それは 0 で、オーバーフローがないことを意味します。

画像-20230526113004779


2.4. 固定小数点数のシフト演算

2.4.1、算術シフト

2.4.1.1. 算術シフトの理解

乗算と除算の演算は算術シフトによって実装できます。

画像-20230526140217701


2.4.1.2. 固定小数点整数と小数点の算術右シフトと左シフト(オリジナルコード)

定点整数

算術右シフト (除算の実装): ① 2 ビットをシフトアウトする場合、シフトアウトする 1 ビットを省略できます; ② 3 ビットをシフトアウトする場合、範囲が限られているため、シフトアウトする 1 ビットを省略する必要があります。この時点で精度は失われます。

画像-20230526140757788

算術左シフト(乗算の実装): ① 2ビット左シフトの場合、2の乗算は160となり、本来の範囲の最大値である127を超えるため、この時点で計算エラーが発生します。最初の 1 は実際に保存されます。②左に 3 ビットシフトすると再びプレフィックス 1 が省略されますが、このときは -32 になります。

画像-20230526141123398

定点小数

固定小数点小数点: 算術シフトは固定小数点整数と一致します。

画像-20230526142527996


2.4.1.3、算術シフト(補数コード)

画像-20230526143100428


2.4.1.4. 算術シフトの簡略化した概要 (オリジナル、インバース、補数)

画像-20230526143227853


2.4.1.5、算術シフトの適用

左シフト演算を実行すると、次のように乗算を実現できます。 乗数 7 を 2 の乗算形式に分割できます。分割後、実際には複数の左シフト演算として認識し、最終的にそれらを加算して次の結果を得ることができます。最終的な製品価値を取得する

画像-20230526143401744


2.4.2、論理シフト

2.4.2.1. 論理シフトの理解

画像-20230526143555105


2.4.2.2、論理シフトの適用

3 ビット バイトを使用して RGB 値を保存するには、論理左シフトを実行して上位 8 ビット、中央の 8 ビット、および下位 8 ビットを移動し、最後にそれらを加算して完全な RGB を取得します。

画像-20230526143903285


2.4.3. サイクリックシフト(導入・応用含む)

循環シフト: 左シフトと右シフトによってシフトアウトされた数値が元の数値の最後に追加され、循環の効果が得られます。

画像-20230526144558460

実際の応用: 回転シフトは、グリフの状態遷移をビッグエンディアンからリトルエンディアンにエンコードすることで使用できます。


知識ポイントの総復習

画像-20230526144533158


2.5. 乗算演算

2.5.1. 手動による 10 進数と 2 進数の乗算

画像-20230526145438057

10 進数の乗算を手動で実行します

画像-20230526145540767

手動での 2 進乗算:

画像-20230526145913456


2.5.2. 元のコードでの 1 ビット乗算

2.5.2.1、ハードウェアマシンはオリジナルコードの1ビット乗算を実現します(詳細)

ハードウェア マシンは、元のコードの 1 ビット乗算を実現します。

画像-20230526150224781

最初に ACC レジスタがクリアされます。

画像-20230526151258730

クリア後​​、MQ の最後のビットが演算に参加し始めます。最後のビットは 1, 1 * 0.1101 で、この時点で加算が実行されます。

00000 + 01101 = 01101

画像-20230526151404689

この時点で、論理右シフトが開始されます。このステップでは、MQ に参加した最後のビットを実際に削除します。このビットはすでに使用されているため、直接省略でき、ACC の最初のビットが埋められます。 0 を使用すると、後で新しいデータを追加するのに便利です

画像-20230526151656708

この時点で、完了した演算は次の図に示すことができます。つまり、得られた積に 0 が追加されます。これは、後続の算術シフト乗算と加算に便利です。

画像-20230526151801962

この時点では MQ の最後のビットは 1 のままなので、乗算演算が実行され、再度加算演算が実行され、加算演算が完了した後、論理右シフトが実行されます。

加算演算:

画像-20230526151943055

論理右シフト:

画像-20230526152035136

以降の処理は上記と同様で、残りの数値の積を実行します...

最後に、MQ の 01011 が乗算され、ACC に累積されて、最終的な積の値が完成します。

画像-20230526152202260


2.5.2.2、手計算シミュレーションオリジナルコード乗算

手計算シミュレーション: 実際、私たちの手計算は機械ハードウェアの計算をシミュレートするもので、詳細なプロセスは次のとおりです。

1. xとyの絶対値を求め、初期ACCは0から始まります。

2. MQ の最後のビットを使用して被乗数を乗算し、ACC を加算し、最後に論理右シフト演算を実行して乗算のラウンドを完了します。

3. 最後に、MQ の各数の乗算と累積が完了した後、乗数と被乗数のシンボル値を使用して XOR を実行し、乗算のフラグ ビットを決定します。

以下は 10 進数の乗算の例であり、整数の乗算でも同様です。

画像-20230526152337140


2.5.3、1の補数の乗算

元のコードと比較すると、1 ビット乗算が計算されます。

画像-20230526155010016


2.5.3.1、ハードウェアマシンは1の補数1ビット乗算を実現します

ハードウェア実装の動作: MQ の場合、補助ビットを格納するためにさらに 1 ビットが追加され、実際の MQ は合計 n+2 ビットになります。

画像-20230526155717342

この場合、MQ はさらに 1 ビットを追加するため、この時点で ACC と X に 1 ビットが追加され、このときの追加ビットは二重符号ビットを使用して計算されます。

画像-20230526155731011

このプロセスでは、各加算は +[x]補数、 +[-x]補数になる可能性があり、この [-x]補数には高速変換を行うための補助回路があり、次の処理後に ALU に送信されます。補助回路!


2.5.3.2、手計算アナログ補数乗算

手計算シミュレーションの実装プロセス:

1. 初期 ACC は 0 から始まり、符号ビットが演算に直接関与し、ACC にさらに 1 ビットが追加されます。

2. Y i - Y i-1を比較して+[x]の補数、0、+[-x]の補数を決定して ACC を加算し、最後に算術右シフトを実行して乗算のラウンドを完了します (合計 n+1)。車輪。

3. 最終的に得られる値が、最終的な補数乗算結果の値となります。

画像-20230526160458535


ナレッジポイントの復習

画像-20230526160826148


画像-20230526161614585

毎回取得される 1 ビットの乗算と除数は、現在の被除数に最も近い値になります。

画像-20230526162046803

手動で計算された 2 進除算: 各ビットは 0 または 1 であり、常に結合されます。

画像-20230526162602569

画像-20230526162758531

2.6、除算演算

2.6.1、独自の符号分割計算(剰余法と加減算交互法を復元)

2.6.1.1、本来の符号分割を実現するマシンハードウェアシミュレーション(剰余法と加減算交互法を復元)

マシンのハードウェア実装:

画像-20230526164502450

まず商工会議所が初期化されます。

画像-20230526165523006

次に、回復剰余メソッドの場合、コンピュータはデフォルトで商を直接 1 に導き、得られた末尾が負の場合は商を 0 に変更します。

画像-20230526164651177

商 1 が負であることが判明した後、結果は 0 に変更され、結果は次のようになります。

画像-20230526170012864

このとき、ACC と MQ は統合された論理左シフトを実行します。

画像-20230526170141498

後続のステップにも同じことが当てはまり、最終的に最終結果が得られます。

画像-20230526170412264

符号ビットは、被除数と剰余の符号ビットの XOR によって取得されます。

画像-20230526180558542


2.6.1.2、元のコードの手動除算(剰余メソッドの復元)

手動計算シミュレーションでは剰余法が復元されます。最初は直接の商は 1 ですが、結果が負の場合は、商が間違っていて 0 に変更されたことを意味し、その後のステップは最初の結果の値に基づいて実行されます + [y] 補数、+ [-y]で構成されます

初めて直接の商が 1 であることがわかります。負の数が得られた後、それを商 0 に修正します。このとき、次のように再計算する必要があります。

画像-20230526170541294

  • 実は、上図の最後の 2 つの左シフトは、直接の商 1 が負の数になるため、元に戻す必要がないためです。この点には注意が必要です。

2.6.1.3. 復元剰余法の最適化には、交互加算減算法(非回復剰余法とも呼ばれます)を採用しています。

**回復剰余法に最適化ポイントはありますか? **例: 剰余が負の場合、直接 0 を商し、剰余を 1 ビット左にシフトして |divisor| を加算できます。

  • この際、剰余を復元せずにそのまま次のステップに進む、この考え方に基づく独自の符号分割を加減算交互方式(剰余を復元しない方式)といいます。

画像-20230526172626913

追加特典:

画像-20230526173616691

: 加算と減算の代替方法を使用する場合は、n+1 回加算および減算し、n 回左にシフトする必要があります。最後の剰余が負の場合は、商が 0 である必要があり、+[|y |] 補数を使用して正しい剰余を取得します。


固定小数点 10 進数の問題の詳細な説明 (被除数は除数未満である必要があります)

固定小数点の除算演算では、最終的に得られる商は固定小数点のみであり、整数ではありません。したがって、固定小数点数の除算では、被除数は除数よりも小さくなければならず、被除数が除数より大きい場合、最終的な商の結果は 1 より大きく、固定小数点の小数点以下の値が得られるようにする必要があります。 1 より大きくすることはできません。ハードウェアの被除数と除数の関係を確認するにはどうすればよいですか?

  • これは主に最初のステップの商によって決まります。最初の +[-|y|] の補数で得られた値が正の数であれば、被除数 > 除数であることを意味します。このとき、ハードウェア回路はこの種の除算は、固定小数点 10 進数を使用して表現することはできません。
  • 負の数であれば正常であることを意味し、このときは0で実行を継続することを意味します。

画像-20230526174011169


2.6.2 補除算(加減算交互方式)

補数除算の詳細については、補数除算の詳細と、プロセス内の最初の加算と減算および商 0/1 の状況を含む、以下の右側を参照してください

画像-20230526195355324

注意点

1. 補数コード除算の加算と減算の交互方法は、元のコードとは多少異なります。最初の加算と減算は、被除数と除数が同じ符号であるかどうかに基づいて行われます。商 1 または商 0 の場合は剰余と除数に基づいています(ここでの除数は元のタイトルを指します。手順内の除数ではなく、 の除数を指します)。

画像-20230526195832813

2.最後の、最後の統一商は常に 1 に設定されます。これを行う目的はトラブルを避けることであり、精度誤差は 2 -nを超えません。


オリジナルコード加減算代替方式と加減算代替方式の違い

画像-20230526200155321


2.7、C言語の型変換

int、short、long の場合、補数形式で格納されます。unsigned を使用すると、それが符号なしの数値であることを意味します。

画像-20230526202628843

①short to unsigned short(unsignedからsigned数値も同じタイプ):つまり、先頭の1ビットは符号ビットとみなされますが、unsignedに変換すると最初のビットは符号ビットとみなされなくなります。

画像-20230526201358030

②int to short : つまり、4バイトから2バイト、上位ビットは切り捨てられ、下位ビットは予約されます。

画像-20230526201719108

③short to int : 2バイト~4バイト

注: 固定小数点整数の補数の場合、それが負の数の場合、すべての上位ビットは 1 で埋められ、整数の場合、すべての上位ビットは 0 で埋められます。

画像-20230526202124005

④unsigned short ~ unsigned int : 2バイト~4バイト

注: ここで③との比較がありますが、正の数で符号ビットが 0 の場合、上位ビットも 0 で埋められます。

画像-20230526202533392


2.8. データの保存と整理

2.8.1、ビッグエンディアンモードとスモールエンディアンモード

ビッグ エンディアン モードとスモール エンディアン モードでは、いくつかのワード コンテンツを格納する順序が実際には異なります。

画像-20230527083210646

  • ビッグエンディアン モード: 4 バイトが指定された順序でメモリ アドレスに前から後ろに格納されます。
  • リトルエンディアン モード: 4 バイトが指定された順序でメモリ アドレスに後ろから前に格納されます。

リトルエンディアンストレージが機械処理に適しているのはなぜですか?

  • 例えば、加算演算を行う場合、通常は下位ビットから演算を行いますが、リトルエンディアンモードの記憶方法は下位ビットから上位ビットまで記憶され、メモリの増加順に読み出しが行われます。 、つまり、コンピュータのストレージと一致しています。

2.8.2. コンピュータのアドレス指定について

画像-20230527084837620

ストレージのワード長が 32 ビットであると仮定すると、1 ワードは 32 ビット、ハーフ ワードは 16 ビットです。各メモリ アクセスで 1 ワードの読み取り/書き込みが可能で、これは以下の丸で囲まれた 32 ビットの大部分です。コンピュータは 1 つのワードを使用します。アドレスへのバイト:

画像-20230527085012925

アドレス指定がバイトに基づいている場合は、指定されたワードに従ってアドレス指定するように指示します。ワードをバイトに変換してから、特定の位置を決定できます。たとえば、格納されているワードの長さは 32 ビットで、ワードは現時点では 32 ビットであり、バイトは 8 ビットです。ワード番号 2 を見つけてください。まず 2 をバイナリ ビット 10 に変換し、次に論理的に 2 ビット左にシフトして 1000 を取得します。これは *4 に相当します。このとき、正確なアドレス位置を決定するためです。

画像-20230527084710922


2.8.3. 境界合わせと境界ずれ 境界合わせ

ここでシナリオがあります: 3 バイトを順番に書き込み、その後 3 つのハーフワードを書き込みます。この場合、境界の位置合わせまたは位置ずれの使用は、実際の記憶方法に影響します

境界調整を以下の表に示します。

  • ワードの長さは 32 ビットなので、この時点で 1 行に 4 バイトを格納できます。上記のシナリオによると、3 バイトを連続して書き込んだ後、ハーフワードを書き込む必要があります。このとき、1 つのワードしかありません。残りの line. バイトに残っている場合、境界アライメントを使用しているため、このハーフワードは次の行に書き込まれます。

画像-20230527085835860

境界のずれを次の表に示します。

  • ワードの長さは 32 ビットなので、この時点で 1 行に 4 バイトを格納できます。上記のシナリオによると、3 バイトを連続して書き込んだ後、ハーフワードを書き込む必要があります。このとき、1 つのワードしかありません。残りのラインに残ります。バイト、境界不整列法を使用しているため、このラインがいっぱいになるまでこのラインに格納され続けます。この時点で、このラインの最後の 8 ビットには 1/2 ワードが格納されます。

画像-20230527085923121

なぜ保存方法が 2 つあるのですか? 違い

  • 境界アラインメントが採用されており、スペースと時間を交換し、上の最初のワードが読み取られた場合は 1 回アクセスするだけで済み、2 行目は直接読み取られます。
  • 境界ずれを利用すると、記憶領域を無駄なく有効に利用できますが、指定した単語を読み出したい場合、単語が2つに分かれているため、一方が先頭行に、もう一方が下位行に格納されてしまいます。 2行目 の場合、1ワードずつ読み書きするため、この時点で2回のメモリアクセスが必要となり、時間のオーバーヘッドが大きくなります。

3. 浮動小数点数の表現と演算

浮動小数点数の制限は次のとおりです

画像-20230527145125675

10 進科学表記法を認識します

画像-20230527145432216


3.1、浮動小数点数の表現

3.1.1. 浮動小数点数の表現を理解する

2 進浮動小数点数の原理:

画像-20230527154004684

指数コードと仮数の意味については、次のとおりです。

画像-20230527154111780

実際のケース: 指定された指数コードの仮数に従って、a と b の真理値を求めます。

例1:

画像-20230527154741381

aの真の値を最後に1Bで格納すると、順序コードが001、仮数部が11001となり、ちょうど8ビットの組み合わせで表現できます。


3.1.2. 正規化と浮動小数点数の例

例 2: 浮動小数点数の仮数の正規化を導く

[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-FYGoQiAf-1685321272499)(https://pictured-bed.oss-cn- beijing.aliyuncs.com/img /2023/1/image-20230527155226344.png)]

10 進科学表記法の正規化を導入します

画像-20230527155430033

  • 10 進数を表現するには 2 つの方法があり、最終的な表現は +3.026 になります。他の 0.003 も表現できますが、精度は失われます。
  • 科学的記数法では最上位ビットが有効な値であり、0になることはできないと規定されています。仮数部が同じ長さの場合、仮数部の最上位ビットは極力0にならないと規定されています。

次に、例 2 に戻ります。仮数を 1 ビット左にシフトできます。このとき、指数から 1 ビットを減算する必要があります。この目的は、可能な限り精度を維持することです

画像-20230527160141573

浮動小数点数の仮数の正規化: 左右の規則を理解する

画像-20230527160242745

  • 左ゲージと右ゲージをどのタイミングで使用するかを決める必要があり、非正規化する場合は算術左シフトが必要で、オーバーフローが発生した場合は算術右シフトが行われます。

企画例

画像-20230527160642414

仮数部の符号ビットは 01 です。このとき、適切なルールを使用することでオーバーフローの状況を救うことができます。


3.1.3. 正規化浮動小数点数の特徴

正規化浮動小数点数の特徴:元コード、補数コード

画像-20230527161446983

注: 相補コードが付いた負の数値は、仮数が 1.01xxxx の形式で正規化される必要があることを示します。

例: 以下の図に示されている 1.1110100 は、負の補数であり、1.01xxxx の形式である必要があるため、正規化の要件ではありません。そのため、この時点では算術左シフトが必要です。

画像-20230527161933103


3.1.4、浮動小数点数の範囲

下図のように、0.00001より小さい場合はその時点で正のアンダーフローとして表現でき、負のアンダーフローの場合は絶対値が最小範囲を超えている場合に表現できます。

画像-20230527162642815

画像-20230527162448279


ナレッジポイントの復習

画像-20230527162708514


3.2、IEEE 754 (浮動小数点規格)

3.2.1. IEEE 754 におけるフレームシフトの表現と定義

IEEE 754 中間コードはシフト コードで表現されます。

画像-20230527182637986

  • フレーム シフトは整数を表すためにのみ使用できることに注意してください。これが、順序コードがフレーム シフトで表される理由の 1 つです。

3.2.2. フレームシフトの定義(例:オフセット値が128と127の場合)

フレーム シフトの最も独創的な定義: フレーム シフト = 真の値 + オフセット (ここでの真の値は元のコード値を指します)

次の例の仮数は 2 の補数表記で表されます

①オフセット値が128Dの場合

ここで、真理値、補数コード、およびフレーム シフトのセットを与えます. テーブル内のフレーム シフトは、上記の式で取得できます。

画像-20230527183110631

画像-20230527200332709

②オフセット値が127Dの場合

オフセット値が 127D の場合、左の表の一番右が真の値に対応するフレーム シフトです。まず最初の -128 フレーム シフトを計算してみます。減算計算であることがわかります。 <subtrahend 、この時点でもう 1 ビットを追加できます

画像-20230527201514306

  • この場合、フレーム シフト値は、最初の数値が 255 で、次の数値が 1 ~ 254 であることを除いて、上記のコースウェアに示されているとおりです。

画像-20230527201352518


3.2.3、IEEE 754 標準浮動小数点表現

ここで、指数コードはコードシフトを採用し、仮数は補数コードで表されます

画像-20230527202444221

  • float の仮数の値は 23 ビットであるため、実際には 1.M の M を参照し、この 1 がデフォルトで存在します。

画像-20230527205115575

例として float を取り上げます

①オーダーコードの真の値の範囲はオフセット値に応じて決まる-126~127で、足りない2つはオール1の場合は-128、オール0の場合は-127となり、この2つの状態を特殊処理として使用します。

画像-20230527202915788

  • 前の図の最後の列の 1 行目と 2 行目 (すべて 1 またはすべて 0) を確認できます。

画像-20230527202745050

  • 浮動小数点10進数のオフセット値を計算するにはどうすればよいですか? 2 8 - 1 - 1 = 127。

浮動小数点数を正規化して真理値を見つけるケースを見てみましょう。

画像-20230527204429241

②ダブルタイプ:

画像-20230527205042322


3.2.4. 実際の計算例(真値と単精度浮動小数点数の相互変換例)

1. 真の値が与えられた場合、単精度浮動小数点数形式の表現を求めます。

画像-20230527210157889

  • IEEE 754 では仮数部の整数部分に 1. が含まれるため、ここでは 1.xxxx に変換する必要があります。

2. 単精度浮動小数点数形式を指定して、真の値を見つけます

画像-20230527210234372


3.2.5、順序コードと仮数が異なるIEEE 754単精度浮動小数点型(最大値、最小値)

IEEE 754 単精度浮動小数点型が表現できる最小絶対値と最大絶対値はどれくらいですか?

以下は、さまざまな指数コードと仮数のさまざまなケースで得られる値です。

画像-20230527211811376


ナレッジポイントレビューの概要

画像-20230527212204697


3.3 浮動小数点数の計算

画像-20230528114457763

3.3.1. 浮動小数点数の加算と減算

10 進法を例として、手順は次のとおりです

① ステップを合わせる:小さなステップと大きなステップを揃えます。

  • 大きな次数と一致していない場合、仮数の値は非常に大きくなり、各大きなビットはさらに 1 つの位置を占めます (たとえば、元の 0.9854 x 10 5 )。次数が小さくなると、次のようになります。 985.4 x 10 2、この時点で、仮数部にさらに 3 桁あることがわかりますが、それが順序内にあるだけの場合はどうなるのでしょうか?
    • 元のコードは次のとおりです。元の 5 は 101 ですが、現在は 2 であり、10 だけです。このとき、1 桁減って 3 桁多く交換されますが、これは明らかに良くありません。これも上記が大きなステップと合わない理由の一つです。
    • コンピュータが仮数部を処理するのにも便利です。

②仮数加算・減算

③正規化:仮数部の最初の数値が有効な桁であることを確認します。

④ 四捨五入:仮数部のビット数が限られており、仮数部の加算、減算、切り捨てが長すぎる可能性があるため、四捨五入が必要です。丸めにはさまざまな戦略があります。

⑤ オーバーフロー判定:ステップコードが規定範囲を超えるとオーバーフローとなります。

画像-20230528115902885

注:手順⑤でオーバーフローと判定された場合は、手順③④で保存することができます。


3.3.2. 浮動小数点数の加算と減算の実際の例

浮動小数点数の加算と減算の実際のケース:

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-oII0VATH-1685321272510)(https://pictured-bed.oss-cn-beijing) .aliyuncs.com/img /2023/1/%E6%97%A0%E6%A0%87%E9%A2%98.png)]


3.3.3、丸めの状況

2 つの入力方法:

① 0 四捨五入の方法

画像-20230528142127775

例は次のとおりです。 次の例の場合、末尾が +1 ですが、元々は 01 で、+1 の後は 10 になります。

画像-20230528142259683

②定数設定1の方法

画像-20230528142144977

画像-20230528142727448

次の点に注意してください

画像-20230528142752128


3.3.4. 必須の型変換の問題

ほとんどの試験は 32 ビットであり、現在の主流は 64 ビットです。

画像-20230528143806837

ロスレス変換、データ精度が失われません

画像-20230528143530373

int を float に変換すると精度が失われます。 int は 1+31、float は 1+8+23 で、23 は実際には 1 ビットを意味します (1+23=24 ビットを表すことができます)。

画像-20230528143518674


このセクションのレビュー

画像-20230528143548917


主催者:ロングロード時間:2023.5.22-5.2

おすすめ

転載: blog.csdn.net/cl939974883/article/details/130921037