あるレジスタから別のレジスタに値がコピーされると、ソース レジスタの値はどうなりますか? デスティネーション レジスタの値はどうなりますか。
1 に答える
CPU アーキテクチャの研究に使用される DLX や RISC などの単純なプロセッサで、それがどのように機能するかを示します。
When (AT&T 構文、または $R1 を $R2 にコピー)
mov $R1, $R2
または(RISCスタイルのアーキテクチャの場合)
add $R1, 0, $R2
命令が機能すると、CPU はソース オペランドを読み取ります。レジスタ ファイルからの R1と ... からのゼロは、即値オペランドまたはゼロ ジェネレータです。両方の入力を算術論理演算ユニット (ALU)に渡します。ALU は、最初のソース オペランドを宛先に渡すだけの操作を行い (A+0 = A であるため)、ALU の後、宛先はレジスタ ファイルに書き戻されます (ただし、R2 スロットに)。
したがって、ソースレジスタのデータは読み取られるだけで、この操作では変更されません。デスティネーション レジスタのデータは、ソース レジスタ データのコピーで上書きされます。(宛先レジスタの古い状態は発熱により失われます。)
物理レベルでは、レジスタ ファイル内の任意のレジスタはSRAM セルのセットであり、それぞれが 2 つのインバータ (M1、M2、M3、M4 に基づく双安定フリップフロップ) と、書き込みおよび読み取り用の追加のゲートです。

SRAM セルに保存されている値を上書きする場合は、データに従って BL と -BL を設定します (ビット 0 を保存するには - BL を設定し、-BL を設定解除します。ビット 1 を保存するには - BL を設定し、BL を設定解除します)。次に、セルの現在のセット (ライン) に対して書き込みが有効になります (WL がオンになり、M5 と M6 が開きます)。M5 と M6 を開いた後、BL と -BL は双安定フリップフロップの状態を変更します ( SR ラッチのように)。そのため、新しい値が書き込まれ、古い値は破棄されます (BL と -BL に電荷が漏れることにより)。