反復命令
ループ処理
ある一定のプログラムを何度も繰り返すという処理は
ある程度のプログラムになれば頻繁に出てくる処理です
条件ジャンプと無条件ジャンプを駆使すれば
これらの反復処理は簡単に実現することができますが
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レジスタをインクリメントします
この結果は、ダンプリストを見るとよくわかりますね