反復命令


ループ処理

ある一定のプログラムを何度も繰り返すという処理は
ある程度のプログラムになれば頻繁に出てくる処理です

条件ジャンプと無条件ジャンプを駆使すれば
これらの反復処理は簡単に実現することができますが
8086CPUは、ループ処理専用の命令LOOPを用意しています

この処理に用いるのがCXレジスタです
LOOP命令はCX レジスタが0ではないときにshortジャンプします
LOOPが実行されると、まずCXレジスタの値をデクリメントします
その後、CXレジスタの値を検証し0でなければ指定位置にジャンプするのです
-A 100
15F2:0100 MOV AL , 41
15F2:0102 MOV BX , 0200
15F2:0105 MOV CX , 1A
15F2:0108 MOV BYTE PTR [BX] , AL
15F2:010A INC AL
15F2:010C INC BX
15F2:010D LOOP 108
15F2:010F

-G =100 10F

AX=005A  BX=0219  CX=0000  DX=000A  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=15F2  ES=15F2  SS=15F2  CS=15F2  IP=010F   NV UP EI PL NZ NA PO NC

-D 200 219
15F2:0200  41 42 43 44 45 46 47 48-49 4A 4B 4C 4D 4E 4F 50   ABCDEFGHIJKLMNOP
15F2:0210  51 52 53 54 55 56 57 58-59 5A                     QRSTUVWXYZ
このプログラムは、CXレジスタに16進数19をロードします
つまり、LOOP命令では25回デクリメントを繰り返します

LOOPはCXレジスタが0でなければ、指定されているオフセットアドレスへジャンプします
ループ内では、AXレジスタの値をBXレジスタのオフセットアドレスへストアし
AXレジスタの値とBXレジスタをインクリメントします

この結果は、ダンプリストを見るとよくわかりますね



前のページへ戻る次のページへ