[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しか書き込まないということでは
ないでしょうか。