この記事は、コンピュータ構成の原理を学習する過程で理解して覚えておく必要があると感じた問題について説明しています。学習過程で生成した質問と回答もいくつかあります。この記事は組版が不十分で、エネルギーが限られている可能性があります。ご容赦ください。
第一章:
(1) MAR のビット数はストレージ ユニットの数に対応しますが、これはなぜですか?
なぜなら:
メモリバンクは複数の記憶ユニットで構成され、記憶ユニットは複数の記憶素子(「+1」は(プログラムカウンタpcの+1)など、アドレスアドレッシング時の+の記憶ユニット)、MARはアドレスレジスタで構成されます。
MARが10ビットの場合、ストレージユニットがあります
(2) アドレス バスの数はメモリ ユニットの数に関係しており、これは MAR ビットの数と同じです。
(3) データ バスはストレージ ワードと同じ長さ、MDR と同じビット数を持ちます。
(4) MDR はデータレジスタであり、記憶部にデータを格納するため、ビット数は記憶部の記憶素子(ビット)数と同じになります。
(5) PCのビット数はメインメモリの容量に関係する
主記憶容量 = 記憶装置の数 * 記憶語長であるため
(6) 保管時、k、m、g は 2 のべき乗
速度と周波数では、10 の累乗になります (このシナリオでは k (小さい k) になります)。
第2章:
(1) マシンに格納されているマシンの数
整数の元のコード:
純粋な 10 進数の元のコード:
(2) 0 の元のコードには 2 つの表現 (+0、-0) があります。
(3) 機械語長がnビットのとき、補数符号で表現できる最小の負の整数
なぜなら:
n ビットの 2 の補数表記では、最上位ビットは符号ビットであり、正の数の場合は 0、負の数の場合は 1 になります。したがって、n ビット表記では、符号付き整数の最小の負の数は、符号ビットを 1 に設定し、他のビットを 0 に設定することです。つまり、100...00100...00 になります。
(個人的には、正の数の最大値は-1 であり、負の数の範囲は正の数より 1 大きいと理解しています。つまり、複素数の最小値は であり、補数は その絶対値の元のコードと同じです。補数 0 は表現が 1 つしかないためです)
(4) なぜ -8 1000 の補数になるのでしょうか?
コンピューターでは通常、負の数は補数を使用して表現されるため、-8 の補数は 1000 です。
まず、2 の補数の定義を理解する必要があります。正の整数の補数コードは元の 2 進コードと同じであり、負の整数の補数コードは対応する正の整数の補数コードを反転して 1 を加算したものです。
負の整数 -8 の場合、その絶対値の 2 進数の元のコードは です1000
。ここで、最上位ビット 1 は符号を表します (0 は正の数を表し、1 は負の数を表します)。-8 の補数が必要になったので、最初にその絶対値の元のバイナリ コードを反転し、次に 1 を加算して、-8 の補数を0111
取得する必要があります。1000
したがって、-8 の補数は です1000
。
(5) フレームシフトは真値に対する演算であり、真値にオフセットを加えたものが 機械語長(n+1)となります。
シフト操作:
加算と減算のための 4 つのフラグ:
OF : 最上位ビットのキャリー XOR と 2 番目に上位ビットのキャリーがオーバーフローを示すのはなぜですか?
オーバーフローが発生するケースは 2 つだけです (符号付き数値にのみ有効)
(1) 正の数 + 正の数 = 符号ビットが 1 の数
(2) 負の数 + 負の数 = 符号ビットが 0 の数
ケース(1): 正の数に正の数を加算する場合、両数値の最上位ビットは0、最上位ビットの桁上げは0、2番目の上位ビットの桁上げが1の場合、結果は1(負の数)となり、オーバーフローが発生します。このときのXOR結果は1になります。
ケース (2): 2 つの負の数値を加算する場合、両方の数値の最上位ビットは 1 であり、最上位ビットのキャリーは 1 でなければなりません。2 番目の上位ビットのキャリーが 0 の場合、最終結果は 0 (正の数値) となり、オーバーフローが発生し、XOR 結果は 1 になります]
SF : 符号付き数の符号判定、符号なし数には意味なし
SF: 0 正の数
SF: 1 ネガティブ
ZF : 結果が0かどうかを示します
ZF: 1 の結果は 0
ZF: 0 の結果は 0 ではありません
CF :符号なし数値の加算と減算時にキャリーまたはボローが発生するかどうかを示します (加算はキャリー、減算はボロー) 。
CF=最上位ビットXORサブ(加減算コントローラ)により生成されるキャリー
CF: 1 はキャリーまたはボローを意味します
CF: 0 はキャリーまたはボローが発生しないことを意味します
元のコードの最後の残りの処理は、加算と減算の代替方法で行われます。
オリジナルのコードを学び始めたとき、足し算と引き算の方法を学び、最終的に疑問を抱きました。
それが最後の残りで起こることです。そのシンボルはそれと正確に何の関係があるのでしょうか?
その後、元のコードの加算と減算は値ビットと符号ビットで別々に処理され、数値計算の過程で商と余りの符号ビットは 0 でなければならず、最終的には除数と被除数の符号に従って商と余りの符号を決定することが判明しました。(最後の剰余が負の場合、商は0である必要があり、最後のシフトには[|y|]の補数は必要ありません(なぜiの最後の桁をシフトする必要がないと言われているのでしょうか?剰余を復元しない方法の考え方は、2*a+bで次の演算を直接実行することであり、最終結果をシフトする必要がないためです)
最終結果では、剰余は被除数と同じ符号になります。
n桁の値、n+1回またはn+2回の加減算、n回のシフトが可能
補数の加算と減算の代替方法の概要:
補数符号の加減算交互方式は符号付きビットで演算され、最終的な商と剰余も補数符号となります。
加算または減算の実行は、除数と被除数の符号によって判断され、
同じ符号の場合は減算演算が行われ、異なる符号の場合は加算演算が行われます。
商が 1 であるか 0 であるかを、剰余と除数の符号によって判断します。
同じ符号: 商 1、左にシフトして除数を減算します。
異なる符号: 商 0、左シフト + 除数
商の終わりは修正なしで商 1 でなければなりません
原符号加減算方式と補符号加減算方式の比較:
値がオーバーフローするかどうかを判断するときに二重符号ビットを導入します
01: 正のオーバーフローを示します。2 つの正の数値を加算すると、結果が正の最大範囲を超えます。
10: 負のオーバーフローを示します。2 つの負の数値を加算すると、結果が負の最小範囲を超えます。
浮動小数点数の表現と計算:
浮動小数点数の正規化:
左の正規化: 仮数の最高値ビットが有効なビットではない場合、左のルールを使用して 0 が削除され (対応する順序コードが 1 減算されます)、左のルールは複数回実行できます。
右正規化:仮数部の有効桁が小数点より前に入る場合、仮数部を1回だけ右正規化(1ビット右にシフト)します。
正規化処理ではIEEE754規格がよく使われます。
IEEE754規格ではフレームシフトが採用されていますが、フレームシフトにおけるオフセット値について質問はありますか?
オフセット値は、フレーム シフトの正のゼロ点の位置を定義します。オフセット値は、フレーム シフトのゼロ点を表すために使用される固定整数です。一般的に使用されるオフセット値は次のとおりです。
例:
1 バイト (5 ビット) のフレーム シフト表現では、オフセット値は 127 です。これは、値 0 を表すフレームシフトは 01111111 (つまり 2^7 - 1) となり、正の整数を表すフレームシフトは 10000000 から 11111111 になり、負の整数は 00000000 から 01111111 になることを意味します。
マシンワード長: CPU が整数演算で処理できるバイナリデータのビット数 (通常は ALU に直接関係します)
ストレージワード長: ストレージユニット内のバイナリコードのビット数 (通常は MDR ビット数と同じ)
つまり、ストレージワード長のビット数は、ストレージユニットが表現できるデータの上限と下限を表します。
10000 - -
MとMBの違い
100 万語は 1,000,000 語を表します
1mb は B の 2 の 20 乗を意味します
ストレージシステム:
キャッシュヒット率の問題:
キャッシュ (キャッシュ メモリ) 内のデータはメイン メモリのサブセットです。CPU がメモリにアクセスすると、まずキャッシュにアクセスします。キャッシュで必要なデータが見つからない場合は、メイン メモリに移動してデータを見つけます。そのため、キャッシュ ヒット率は、キャッシュ内で完了したアクセスの割合を表すために導入されています。すべてのデータがキャッシュ内で直接見つかることを期待しているため、ヒット率は 1 に近いほど良いことになります。
Nc: ヒット処理中のキャッシュヒット数
Nm: ヒット処理中に完了したメインメモリアクセス数
h:ヒット率を示します。
ta: 平均アクセス時間を示す
tc: ヒットに要した時間を示します。
tm: メインメモリアクセスにかかった時間を示します。
アドレス行とデータ行の数を計算します。
記憶容量:記憶容量は、 メイン メモリにバイナリコードを記憶できる合計ビット数です。つまり、記憶容量 = 記憶ユニットの数 × 記憶ワード長 (各記憶ユニットのビット数) であり、総バイト数でも表すことができます: 記憶容量 =記憶ユニットの数* 記憶ワード長 / 8
アドレス ライン: ストレージ ユニットの数 = 2^ アドレス ラインの数 (アドレス ラインはアドレス情報を送信するために使用されます)
データ ライン: データ ラインはストレージのワード長を決定します。データ ラインの数 = ワード長の桁数です。( 1回の計算で転送できる最大ビット数(コンピュータのビット数)に相当)
例えば:
コンピュータの語長は32ビット、記憶容量は16M×32ビットですが、アドレス線とデータ線の合計は何本になりますか?
まず単位をバイトに変換します
16m=16*1 024(2の10乗)=16777216(B)
32ビット=4バイト
データ容量=16777216*4=67108864 (64M B=2の26乗)
したがって: 32 のデータ ラインと 26 のアドレス ライン (アドレス ラインに接続するのに 26 ビットが必要になることと同等であるため)
DRAM の完全なリフレッシュ プロセスには数回のストレージ サイクルがかかります
DRAM の完全なリフレッシュ プロセスには、通常 1 メモリサイクルがかかります。具体的には、DRAM はメモリ セル間でリフレッシュを繰り返し、各メモリ セルの充電状態をチェックして、電気が漏れていないかどうかを確認する必要があります。このリフレッシュ サイクルは通常、ミリ秒単位で測定されますが、通常は多くの小さな操作に分割されており、それぞれが完了するまでにストア サイクルを必要とします。したがって、DRAM の完全なリフレッシュ プロセスには 1 ストレージ サイクルが必要であると言えます。
408 試験では、クロス アドレス方式はロー クロスです。
コンピュータの命令のアドレスは物理アドレス(メモリアドレス)ではなく論理アドレス(外部メモリアドレス)であり、命令を実行する際、命令内の論理アドレスはハードウェアによって主記憶の物理アドレスに変換されます。
コマンドシステム:
アセンブリ条件分岐:
テンポラリレジスタに格納されたデータを汎用レジスタに格納すると、なぜ破壊されてしまうのでしょうか?
スクラッチ レジスタに保存されたデータは、後続の操作のための一時的な保存用です。汎用レジスタは、命令の実行中に使用または変更する必要があるデータを保存する CPU 内の記憶装置です。汎用レジスタのスペースには限りがあるため、複数のデータを同時に格納することはできないため、レジスタ内のデータは異なる操作の間にクリアする必要があります。元のデータを保存せずに、汎用レジスタに格納されたデータを直接変更すると、元のデータが破壊されます。
また、スクラッチレジスタと汎用レジスタでは設計目的も異なります。スクラッチ レジスタは通常、入出力データのバッファリング、CPU によるデータ処理の支援などに使用されます。その容量は汎用レジスタよりも大きくなりますが、速度は遅くなります。汎用レジスタは、CPUが命令を実行する際のデータ格納に特化したレジスタであり、一般にスクラッチレジスタに比べて容量は小さいですが、速度は高速です。したがって、CPU 命令の正確さと効率を確保するために、スクラッチ レジスタと汎用レジスタは異なる役割を果たし、異なるシナリオで役割を果たします。
マシンサイクルは通常、アクセスサイクルによって決まります。
命令ワード長は通常、ストレージワード長の整数倍です。