8つの汎用レジスタを汎用レジスタとして扱ったアセンブリ言語プログラム

ahレジスタ、alレジスタ、bhレジスタ、blレジスタ、chレジスタ、clレジスタ、dhレジスタ、dlレジスタの8つの汎用レジスタがある。

それらは、"int 21h"という命令やloop命令の材料として用いられるため汎用レジスタでないと思われがち。

そんな8つの汎用レジスタを汎用レジスタとして用いたアセンブリ言語プログラムがこれ。

 

bits 16
org 0x100

;7つの変数(汎用レジスタ)にデータを格納
mov ah,'q'   ;変数ahに格納
mov al,'u'   ;変数alに格納
mov bh,'i'   ;変数bhに格納
mov bl,'c'   ;変数blに格納
mov ch,'k'   ;変数chに格納
mov cl,'l'   ;変数clに格納
mov dh,'y'   ;変数dhに格納
pusha   ;変数の値を全て保存

;iという文字を出力
mov dl,bh
mov dh,0
mov al,0
mov ah,02
int 21h

popa   ;変数の値を復元
mov dl,ch   ;dlに退避
pusha   ;変数の値を全て保存

;kという文字を出力
mov dh,0
mov al,0
mov ah,02
int 21h

popa   ;変数の値を復元
mov dl,ah   ;dlに退避
pusha   ;変数の値を全て保存

;qという文字を出力
mov dh,0
mov al,0
mov ah,02
int 21h

;プログラム終了シーケンス
mov ah,4Ch
int 21h

 

8つの汎用レジスタのうち、dlレジスタは退避用。

pusha命令とpopa命令が用いられている。