24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

DEC—Decrement by 1 ( 続き ) #AC(0) 現行特権レベルが 3 のときに、 アライメント ・チェックが イネーブルにされていて、 アライメントが合わないメモリ 参照が行われた場合。 実アドレス・モード例外 #GP メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、 または GS セグ メ ン ト の範囲外の場合。 #SS メモリ ・ オペランドの実効アドレスが SS セグメン ト の範 囲外の場合。 仮想 8086 モード例外 #GP(0) メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、 または GS セグ メ ン ト の範囲外の場合。 #SS(0) メモリ ・ オペランドの実効アドレスが SS セグメン ト の範 囲外の場合。 #PF ( フォルト ・コード ) ペー ジ ・ フ ォ ル ト が発生した場合。 #AC(0) アライメン ト ・ チェ ッ クがイネーブルにされていて、 アラ イ メン ト が合わないメモ リ 参照が行われた場合。 3:450 第 3 巻 : IA-32 基本命令リファレンス

DIV—Unsigned Divide オペコード 命令 説明 F6 /6 DIV r/m8 AX を r/m8 で符号なし除算する。 AL ← 商、AH ← 剰余 F7 /6 DIV r/m16 DX:AX を r/m16 で符号なし除算する。 AX ← 商、DX ← 剰余 F7 /6 DIV r/m32 EDX:EAX を r/m32 ダブルワードで符号なし除算する。EAX ← 商、 EDX ← 剰余 説明 AL レジスタ、 AX レジスタ、 または EAX レジスタ内の値( 被除数 ) をソース ・ オペラン ド ( 除数 ) で ( 符号なしで ) 割り、 結果をそれぞれAX、 DX:AX、 または EDX:EAX レジ スタにストアする。 ソース ・ オペランドには、 汎用レジスタまたはメモリ ・ ロケーショ ンを使用で き る。 こ の命令の処理は、 以下の表に示す よ う に、 オペラ ン ド ・ サイ ズに依 存する。 オペランド・サイズ 被除数 除数 商 剰余 商の最大値 ワード / バイト AX r/m8 AL AH 255 ダブルワード / ワード DX:AX r/m16 AX DX 65,535 クワッドワード / ダブルワード EDX:EAX r/m32 EAX EDX 232 − 1 非整数の結果は 0 に向か っ て切 り 捨て ら れる。 剰余の絶対値は常に除数のそれ よ り 小 さ い。 オ ーバフ ロ ー は、 CF フラグではなく、 #DE ( 除算エラ ー ) 例外で示される。 操作 IF SRC = 0 THEN #DE; (* divide error *) FI; IF OpernadSize = 8 (* word/byte operation *) THEN temp ← AX / SRC; IF temp > FFH THEN #DE; (* divide error *) ; ELSE AL ← temp; AH ← AX MOD SRC; FI; ELSE IF OpernadSize = 16 (* doubleword/word operation *) THEN temp ← DX:AX / SRC; IF temp > FFFFH THEN #DE; (* divide error *) ; ELSE AX ← temp; DX ← DX:AX MOD SRC; FI; ELSE (* quadword/doubleword operation *) temp ← EDX:EAX / SRC; 第 3 巻 : IA-32 基本命令リファレンス 3:451

DIV—Unsigned Divide<br />

オペコード 命令 説明<br />

F6 /6 DIV r/m8 AX を r/m8 で符号なし除算する。<br />

AL ← 商、AH ← 剰余<br />

F7 /6 DIV r/m16 DX:AX を r/m16 で符号なし除算する。<br />

AX ← 商、DX ← 剰余<br />

F7 /6 DIV r/m32 EDX:EAX を r/m32 ダブルワードで符号なし除算する。EAX ← 商、<br />

EDX ← 剰余<br />

説明<br />

AL レジスタ、 AX レジスタ、 または EAX レジスタ内の値( 被除数 ) をソース ・ オペラン<br />

ド ( 除数 ) で ( 符号なしで ) 割り、 結果をそれぞれAX、 DX:AX、 または EDX:EAX レジ<br />

スタにストアする。 ソース ・ オペランドには、 汎用レジスタまたはメモリ ・ ロケーショ<br />

ンを使用で き る。 こ の命令の処理は、 以下の表に示す よ う に、 オペラ ン ド ・ サイ ズに依<br />

存する。<br />

オペランド・サイズ 被除数 除数 商 剰余 商の最大値<br />

ワード / バイト AX r/m8 AL AH 255<br />

ダブルワード / ワード DX:AX r/m16 AX DX 65,535<br />

クワッドワード / ダブルワード EDX:EAX r/m32 EAX EDX 232 − 1<br />

非整数の結果は 0 に向か っ て切 り 捨て ら れる。 剰余の絶対値は常に除数のそれ よ り 小 さ<br />

い。 オ ーバフ ロ ー は、 CF フラグではなく、 #DE ( 除算エラ ー ) 例外で示される。<br />

操作<br />

IF SRC = 0<br />

THEN #DE; (* divide error *)<br />

FI;<br />

IF OpernadSize = 8 (* word/byte operation *)<br />

THEN<br />

temp ← AX / SRC;<br />

IF temp > FFH<br />

THEN #DE; (* divide error *) ;<br />

ELSE<br />

AL ← temp;<br />

AH ← AX MOD SRC;<br />

FI;<br />

ELSE<br />

IF OpernadSize = 16 (* doubleword/word operation *)<br />

THEN<br />

temp ← DX:AX / SRC;<br />

IF temp > FFFFH<br />

THEN #DE; (* divide error *) ;<br />

ELSE<br />

AX ← temp;<br />

DX ← DX:AX MOD SRC;<br />

FI;<br />

ELSE (* quadword/doubleword operation *)<br />

temp ← EDX:EAX / SRC;<br />

第 3 巻 : IA-32 基本命令リファレンス 3:451

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!