Make your own free website on Tripod.com


アセンブラ(8086系)

その3 8086系の基本命令

今回は8086系のもっている基本的な命令について解説していきます。

これらの命令は現行のPentiumIIIでも問題なく使用できますし、実際に使用されています。

CやC++などの高級言語で書かれたプログラムも最終的には今回説明するような、

基本的な命令に変換されてPC上で動いているわけです。


1.8086系CPUの説明

基本命令を説明する前に簡単に8086系CPUの説明をしておきます。

8086系CPUはその名前のとおり8086から発展してきたCPUの総称です。

これらには8086から始まって486、Pentiumなどをへて現行のPentiumIIIに至っています。

AMDやCyrixなどの互換CPUもこれにあたります。

これらのCPUは8086互換の部分を見ると、レジスタは以下のものを必ず持っています。

ここではこんなレジスタがあるんだということがわかればOKです詳細は順次説明していく予定です。


セグメントレジスタ・・・・・・・・・CS,DS,ES,SS

セグメントレジスタはコードやデータのあるメモリのセグメント値を決定するのに使用します。


ポインタ/インデックスレジスタ・・・IP,SP,BP,SI,DI

ポインタ/インデックスレジスタはコードやデータのあるメモリのオフセット値を決定するのに使用します。


汎用レジスタ・・・・・・・・・・・・AX,BX,CX,DX

汎用レジスタは計算をはじめとするさまざまな目的に使用されます。


フラグレジスタ・・・・・・・・・・・F

フラグレジスタは条件分岐などに使用されます。



補足説明

・上記のレジスタはすべて16bitの大きさを持っています。

・汎用レジスタは8bitレジスタ×2としても使用できできます。この場合AXレジスタだとAHとALレジスタになります。

・8086以降さまざまなレジスタが追加されてきましたが、基本的によく使うのは上記のレジスタ群です。



2.よく使う命令

8086系でなくてはならない命令です(無いとどうにもならない命令)


MOV(転送命令)

値の移動を行う。どんなプログラムにも絶対あると思われる命令。基本中の基本。

例)MOV AX,10・・・AXに10を入れる。


INT(割込み)

割込みを使用する。DOSやBIOSの機能を使用するのに使う。これが無いとプログラムの終了もできない。

例)INT 3・・・割込み3を発生させる。


CMP(比較)

二つの値を比較する。条件分岐の前に使う場合が多い。比較結果によってフラグレジスタが変化する。

例)CMP AX,12・・・AXレジスタと12を比較してフラグレジスタに結果を反映する。


Jxx(条件分岐)

フラグレジスタの値を見て条件分岐する。xxには条件が入る(JNE,JA,JLE等)。

例)JC 100・・・キャリーフラグがたっている場合100に分岐する。


JMP(無条件分岐)

所定のアドレスまで分岐(移動)する。

例)JMP 100・・・100まで移動する。


ADD,ADC(足し算)

二つの値を足してみる。数値演算の基本。ADCはキャリーフラグを含めて計算する。

例)ADD BX,50・・・BXレジスタに50を足す。


SUB,SBB(引き算)

引き算をしてみる。数値演算の基本。SBBはキャリーフラグを含めて計算する。

例)SUB CX,40・・・CXから40を引く。


AND(論理積)

二つの値のbit単位の論理積をとる。

例)AND DX,3・・・DXと3の論理積をとる。


OR(論理和)

二つの値のbit単位の論理和をとる。

例)OR AX,4・・・AXと4の論理和をとる。


SHL,SHR(bitシフト)

bitの移動をおこなう(SHLは上位方向、SHRは下位方向)。

例)SHR AX,1・・・AXレジスタの値を下位に1bit移動する。


これぐらい使いこなせればちょっとしたプログラムなら作成できると思います。

各命令の実際の使いかたは必要になり次第説明していきます。




今回は以上でおしまいです。

次回も引き続きアセンブラの基本について解説する予定です。


そふと工房入口へ戻る