[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 2905] Re: About NASM



光成です。

川合さん
>  僕の予想では32bit扱いで上位ワードがクリアされるんじゃないかと
>思っているのですが、仕様ではどうなっているのか教えてください。

マニュアルから引用します。
--------------------------------
オペコード
8C/r	MOV r/m16, Sreg		セグメント・レジスタをr/m16に転送する。
8E/r	MOV Sreg, r/m16		r/m16をセグメント・レジスタに転送する。

32 ビット・モードで動作しているときにセグメント・レジスタと汎用レジスタとの間
でデータを転送すると、インテル・アーキテクチャの32 ビット・プロセッサでは、こ
の命令で16 ビット・オペランド・サイズ・プリフィックス( 値66H をもつバイト) を
使用する必要はないが、ほとんどのアセンブラでは、命令の標準形式( 例えば、MOV DS,
AX) が使用されているとそのプリフィックスを挿入する。プロセッサは、この命令を正
しく実行するが、通常は余分なクロックを必要とする。ほとんどのアセンブラでは、命
令形式MOV DS,EAX を使用すると、この不必要な66H プリフィックスを避けられる。プ
ロセッサは、32 ビット汎用レジスタを使用する命令を実行するときは、汎用レジスタ
の下位16 ビットがデスティネーション・オペランドまたはソース・オペランドである
と想定する。レジスタがデスティネーション・オペランドである場合は、レジスタの上
位2 バイトにある結果の値は、プロセッサに依存する。PentiumPro プロセッサでは、
上位2 バイトにはゼロが入る。それより以前の32 ビットのインテル・アーキテクチャ・
プロセッサでは、上位2 バイトは未定義である。
--------------------------------

だそうです。
0x66がつこうがつこまいが mov [mem], Sregは16bitしか書き込まないということでは
ないでしょうか。