登録 - 組み立てレビュー (2)

このセクションの内容を読むと、アセンブリの能力と機械語および高級言語の関係が明確に理解できます。この記事では 16 ビット CPU について説明しますが、最新の 64 以降の 128 についても理論は同じであり、類似で問題ありません。

汎用レジスターアセンブリレビュー(1)に続く  _luozhonghua2000のブログ-CSDNブログ  終了、内容:アセンブリ命令、物理アドレス、16ビット構造のCPU、8086CPU 物理アドレスの付与方法の本質的な意味

組立説明

アセンブリ命令を実行するように CPU を制御します。表内のいくつかの命令を確認してください。 

 

 高級言語の基礎を持つ読者が命令の意味をよりよく理解できるようにするために、アセンブリ命令の意味がテキスト記述と高級言語記述という 2 つの方法で記述される場合があることに注意してください。アセンブリ命令またはレジスタの名前を記述する場合、大文字と小文字は区別されませんたとえば、mov ax,18 と MOV AX,18 は同じ意味を持ち、bx と BX は同じ意味を持ちます。


次に、表にリストされているプログラム セグメント内の各命令を CPU が実行した後に、レジスタ内のデータに加えられた変更を確認します。

 

 

命令の実行後に AX に含まれるデータの量はどれくらいですか? それについて考えた後、分析を見てください。分析:
プログラム セグメントの最後の命令 add ax,bx、実行前は ax と bx のデータは両方とも 8226H、加算後に得られる値(コンバータ? ) は次のとおりです: 1 044CH、ただし ax は 16 ビット レジスタ、のみ4 桁の 16 進データを格納できるため(なぜですか。汎用レジスタを参照してください- アセンブリレビュー (1)_luozhonghua2000 のブログ - CSDN ブログ   8086CPU のレジスタはすべて 16 ビットです)、したがって最上位ビット 1 を ax に入れることはできません (なぜですか?削除された最上位ビット? スタックの先頭? )、ax のデータは: 044CHです。

命令が実行された後、AX にはどのくらいのデータがありますか? それについて考えた後、分析を見てください

プログラム セグメントの最後の命令は add al,93H です。実行前、al のデータは C5H で、加算後に得られる値は 158H ですが、al は 8 ビットのレジスタで、16 進数を 2 つしか格納できません。データが失われるため、最上位ビット 1 が失われ、ax のデータは 0058H になります。ここでの損失は、キャリー値を8ビットレジスタに保存できないことを意味しますが、CPUは実際にはキャリー値を破棄しません、フォローアップの回答)現時点ではalが独立した8ビットレジスタとして使用されていることに注意し
ください、a は重要ではないため、CPU はこの命令の実行時に a と al が無関係な 2 つのレジスタであると判断します。add al,93H などの命令で発生したキャリーが a に格納されると誤解しないでください。add al,93H は 8 ビットの演算を実行します。

add ax,93H を実行すると、下位 8 ビットのキャリーが ah に格納され、CPU はこの命令実行時に 16 ビット レジスタ ax が 1 つしかないと判断し、16 ビット演算が実行されます。これは、add ax,93H が実行された後の ax の値が 0158H であることを意味します。このとき使用するレジスタは 16 ビットレジスタ ax で、add ax,93H は ax の 16 ビットデータ 00c5H と別の 16 ビットデータ 0093H を加算することと等価で、結果は 16 ビット 0158H になります。

データ送信または演算を実行するときは、命令の 2 つのオペランドのビット数が一致している必要があることに注意してください。次に例を示します。

 などはすべて間違った命令であり、エラーの理由は命令の 2 つのオペランドの桁が一致していないことです。

練習:

実在住所

 CPU がメモリ ユニットにアクセスするとき、メモリ ユニットのアドレスを与える必要があることがわかっています。すべてのメモリ ユニットで構成される記憶空間は 1 次元の線形空間です。各メモリ ユニットはこの空間内で一意のアドレスを持ちます。この一意のアドレスを物理アドレスと呼びます。CPU はアドレス バスを介してメモリにそれを送信します。
be はメモリユニットの物理アドレスです。CPU がアドレス バス上で物理アドレスを発行する前に、物理アドレスを内部で形成する必要があります。CPU が異なれば、物理アドレスを形成する方法も異なります。次に、8086 CPU が内部でメモリ セルの物理アドレスをどのように形成するかについて説明します。

16ビットCPU

8086CPU の前世代 CPU (8080、8085) が 8 ビットマシンであるのに対し、8086 は 16 ビットマシンと言いますが、8086 は 16 ビット構成の CPU とも言えます。では、16 ビット構成の CPU とは何でしょうか?
16 ビット構成 (16 ビットマシン、語長 16 ビットなどの一般的な表現は 16 ビット構成と同じ意味です) を一言で説明すると、以下のような構造上の特徴を持つCPUです。

 8086 は 16 ビット構成の CPU です。つまり、8086 内で一度に処理、送信、一時保存できる情報の最大長は 16 ビットです。メモリ ユニットのアドレスは、アドレス バスに送信される前に、CPU で処理、送信、および一時保存される必要があります。16 ビット CPU の場合、16 ビット アドレスは一度に処理、送信、および一時保存できます。時間。

最新の 64 ビット CPU の類似点

8086CPUは物理アドレスの方式を提供します

8086CPU には 20 ビット アドレス バスがあり、20 ビット アドレスを送信して 1MB のアドレス指定機能を実現できます。8086CPU も 16 ビット構成であり、内部のワンタイム処理、送信、および一時記憶アドレスは 16 ビットです。8086CPU の内部構造から、単純に内部からアドレスを送信する場合、16 ビットのアドレスしか送信できず、表示されるアドレス指定能力はわずか 64KB です。
8086CPU は 2 つの 16 ビットアドレスを内部で合成して 20 ビットの物理アドレスを形成する方式を採用しており、8086CPU 関連コンポーネントの論理構造を図 1 に示します。

 図 1 に示すように、8086CPU がメモリの読み取りおよび書き込みを行う場合は、次のようになります。

1) CPU 内の関連コンポーネントは 2 つの 16 ビット アドレスを提供し、1 つはセグメント アドレスと呼ばれ、もう 1 つはオフセット アドレスと呼ばれます; 2) セグメント アドレスとオフセット アドレスは、
アドレス加算器と呼ばれるコンポーネントに送信されます。内部バス :
3) アドレス加算器は、2 つの 16 ビット アドレスを 20 ビットの物理アドレスに合成します。
4) アドレス加算器は、内部バスを介して 20 ビットの物理アドレスを入出力制御回路に送信します。
5) 入力出力制御回路は 20 ビットの物理アドレスを変換し、アドレス バスに送信されます;
6) 20 ビットの物理アドレスはアドレス バスによってメモリに送信されます。 

アドレス加算器は、物理アドレス=セグメントアドレス×16+オフセットアドレスの方式を採用し、物理アドレスとセグメントアドレスおよびオフセットアドレスを合成します。例えば、8086CPUがアドレス123C8Hのメモリユニットにアクセスしたい場合、このときのアドレス加算器の動作手順を図2に示します(図中のデータはすべて16進数で表しています)。

 

おすすめ

転載: blog.csdn.net/luozhonghua2014/article/details/130968789