←練習問題へ :  INDEX


11-1.レジスタの型変換(キャスト)とは

  高級言語では1バイトの変数を2バイト(short)や4バイト(long)などに拡張することができる。これを型変換(キャスト)という。アセンブラの世界でも、レジスタに限って型変換(キャスト)を行うことができる。変数は実メモリーに容量を確保するために拡張できない。アセンブラででは、例えばALレジスタをAXレジスタに拡張する場合、符号なし整数ではレジスタの上位AHを0にして、以降の計算をALではなく、AXレジスタを使うだけでできる。

	mov	al,0F0h
	add	al, 50h
;	この場合、桁が足りなくなってしまう。そこで次のようにする

mov al,0F0h mov ah,0 add ax,50h ; この例では ah=0 にし、以降の計算(ADD命令)をAXで行うことで、型変換している

   しかし、符号付き整数の場合同じようなことをやると、負数の場合値がおかしくなる。

	mov	al,-1
	add	ah, 0
;	AX = +FFhになってしまい、AX=-1ではない

   そこで、符号付き整数の場合は次の命令を使用する。

CBW ( Convert Byte to Word ) :バイトをワードに変換

CWD ( Convert Word to DoubIe ) :ワードをダブルワードに変換

CWDE ( Convert Word to Extended Double ) :ワードを拡張ダブルワードに変換

CDQ ( Convert Double to Quad ) :ダブルワードをクォートワード(4ワード)に変換

CBW
   動作:ALレジスタを符号付き整数としてAXに型変換する(8bit→16bit)
     8086以上のCPUで使用可

CWD
   動作:AXレジスタを符号付き整数としてDX:AXに型変換する(16bit→32bit)
     8086以上のCPUで使用可

CWDE
   動作:AXレジスタを符号付き整数としてEAXに型変換する(16bit→32bit)
     80386以上のCPUで使用可

CDQ
   動作:EAXレジスタを符号付き整数としてEDX:EAXに型変換する(32bit→64bit)
     80386以上のCPUで使用可

使用例

	mov	al,-5
	cbw
;	この状態で、AX=-5となる。

←練習問題へ :  INDEX