記事ディレクトリ
はじめに
この章は、これまでのすべての内容の要約です。コンピュータはデータ処理と計算を実行するマシンであることを知っているので、2つの基本的な問題があります。
(1)処理されたデータはどこにありますか?
(2)処理するデータの長さは?
説明を簡単にするために、2つの記述記号regおよびsregを今後のコースで使用します。regはレジスタを意味し、sregはセグメントレジスタを意味します。
reg包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di
sreg包括:ds,ss,cs,es
8.1 bx、はい、の、bp
(1)8086 CPUでは、これら4つのレジスタのみを[...]でメモリユニットのアドレス指定に使用できます。たとえば、[bx]は使用できますが、[ax]は使用できません
(2)「[...]」では、これらの4つのレジスタは個別に、または次の4つの組み合わせのいずれかで表示できます:
1.bxとsi
2.bxとdi
3.bpとsi
4.bpとdi
(3)レジスタbpが[...]で使用されており、セグメントアドレスが命令で明示的に指定されていない限り、セグメントアドレスはデフォルトでssになります。
8.2機械語命令によって処理されるデータの場所
機械語命令の大部分はデータ処理の命令です。処理は、読み取り、書き込み、および操作の3つのカテゴリに大別できます。
命令を実行する前に、処理対象のデータは、内部CPU、メモリ、ポートの3つの場所にあります。
8.3アセンブリ言語でのデータの場所の表現
アセンブリ言語では、データの場所を表すために3つの概念が使用されています。
- 即時データ(idata)
- 登録する
- セグメントアドレス(SA)とオフセットアドレス(EA)
即時データ(idata)
機械語命令(実行前のCPUの命令バッファー内)に直接含まれているデータは、アセンブリ言語で呼び出されます。これは、アセンブリー命令で直接与えられる即時データ(idata)です。
登録する
命令によって処理されるデータはレジスタにあり、対応するレジスタ名はアセンブリ命令に指定されています。
セグメントアドレス(SA)とオフセットアドレス(EA)
命令で処理されるデータはメモリにあり、EAはアセンブリ命令で[X]の形式で指定でき、SAは特定のセグメントレジスタにあります。
- セグメントアドレスを保持するレジスタをデフォルトにすることができます
- セグメントアドレスを保持するレジスターを明示的に指定することもできます。
デフォルトのセグメントアドレスレジスタ
セグメントアドレスを保持するレジスタを明示的に指定する
8.4アドレス指定モード
データがメモリに格納されている場合、このメモリユニットのオフセットアドレスを指定するために複数の方法を使用できます。このメモリユニットの配置方法は、一般にアドレッシングモードと呼ばれます。
8.5命令で処理されるデータの長さは?
8086CPUの命令は、バイト(バイト演算、8ビット)とワード(ワード演算、16ビット)の2つのサイズのデータを処理できます。したがって、命令がワード演算を実行するのか、バイト演算を実行するのかは、機械語命令で示す必要があります。
(1)処理するデータのサイズをレジスタ名で指定します
(2)レジスタ名がない場合は、演算子X ptrを使用してメモリユニットの長さを示します。Xは、アセンブリ命令でワードまたはバイトにすることができます。
(3)その他の方法
一部の命令は、デフォルトでワード単位またはバイト単位にアクセスします。たとえば、プッシュ命令はワード演算のみを実行するため、プッシュ[1000H]はデフォルトでワード単位になります。また、spの各変更は2の単位であるため、Popはワード演算専用です。