0から作るソフトウェア開発

日々勉強中。。。

0から作るOS開発

環境準備

環境設定

ブートローダ

カーネルローダ

GRUB

カーネル

ドライバーその他

Tips IA32(x86)汎用命令一覧 Iから始まる命令 IMUL命令

IA32(x86)汎用命令一覧

このサイトで挙げる命令は汎用命令の一覧となります

調べたい命令の頭文字をクリックすると、表の下に詳細が表示されます
IA32(x86)汎用命令一覧
A B C D E F G H
I J K L M N O P
Q R S T U V W X
Y Z 補足


Iから始まる命令

クリックすると、表の下に詳細が表示されます
Iから始まる命令一覧
命令 代表命令の説明
(英語)
代表命令の説明
(日本語)
IDIV Signed Divide 符号付き除算
IMUL Signed Multiply 符号付き掛け算
IN Input From Port ポートからの入力
INC Increment by 1 インクリメント(1加算)する
INS/INSB/INSW/INSD Input from Port to String ポートからの入力を指定したアドレスに格納する
INT/INT3/INTO Call to Interrupt Procedure 割り込み処理呼び出し
INVD Invalid Cache キャッシュを無効にする
INVLPG Invalid TLB Entry TLBエントリを無効にする
IRET/IRETD Interrupt Return 割り込みハンドラからの復帰


IMUL命令(Signed Multiply)

IMUL命令
オペコード 命令 説明
0xF6 /5 IMUL r/m8 ALをr/m8で符号付き乗算し、結果をAXに格納します
0xF7 /5 IMUL r/m16 AXをr/m16で符号付き乗算し、結果をDX:AXに格納します
0xF7 /5 IMUL r/m32 EAXをr/m8で符号付き乗算し、結果をEDX:EAXに格納します
0x0F 0xAF /r IMUL r16, r/m16 r16をr/m16で符号付き乗算し、結果をr16に格納します
0x0F 0xAF /r IMUL r32, r/m32 r32をr/m32で符号付き乗算し、結果をr16に格納します
0x6B /r ib IMUL r16, r/m16, imm8 r/m16を符号拡張即値imm8で符号付き乗算し、結果をr16に格納します
0x6B /r ib IMUL r32, r/m32, imm8 r/m32を符号拡張即値imm8で符号付き乗算し、結果をr32に格納します
0x6B /r ib IMUL r16, imm8 r16を符号拡張即値imm8で符号付き乗算し、結果をr16に格納します
0x6B /r ib IMUL r32, imm8 r32を符号拡張即値imm8で符号付き乗算し、結果をr32に格納します
0x69 /r iw IMUL r16, r/m16, imm16 r/m16を即値imm16で符号付き乗算し、結果をr16に格納します
0x69 /r id IMUL r32, r/m32, imm32 r/m32を即値imm32で符号付き乗算し、結果をr32に格納します
0x69 /r iw IMUL r16, imm16 r16を即値imm16で符号付き乗算し、結果をr16に格納します
0x69 /r iw IMUL r32, imm32 r32を即値imm32で符号付き乗算し、結果をr16に格納します


詳細

2つのオペランドの符号付き乗算を行います。この命令にはオペランド数に応じて3つの形式があります

即値を、オペランドとして使用すると、格納先オペランドのサイズに符号拡張されます

乗算結果の上位半分のバイト、ワード、ダブルワードに符号ビットを含む、キャリーがあったときは、CFとOFがセットされます

符号ビットを含む結果が下位半分のバイト、ワード、ダブルワードに収まったときは、CFとOFがクリアされます



IMUL命令の3つの形式は、乗算結果が両方のオペランドサイズの2倍になる点で同じです。1オペランド形式では、

結果は格納先オペランドのサイズで格納されます。しかし、2オペランド、3オペランド形式では、結果は格納先のサイズに

切り捨てられてから格納先レジスタに格納されます。切り捨てされる場合があるので、CFまたはOFをテストして、

有効ビットの脱落が無いように保証する必要があります



2オペランド、3オペランド形式には、乗算結果の下位は両方のオペランドの符号ありなしに関わらず同じで、

符号なしオペランドに対しても使用できます。ただし、CFとOFを使用して、結果の上位半分がゼロでないかどうかは

判断することはできません

影響のあるEFLAGSレジスタのフラグ

影響のあるEFLAGSレジスタのフラグ
フラグ 説明
ID -
VIP -
VIF -
AC -
VM -
RF -
NT -
IOPL -
OF 1オペランド形式:
0:結果が結果の下位半分に収まる場合
1:結果の上位半分に有効ビットのキャリーがある場合

2オペランド、3オペランド形式:
0:結果が格納先オペランドサイズに収まる場合
1:結果が格納先オペランドサイズに合わせるために、切り捨てられた場合
DF -
IF -
TF -
SF 未定義
ZF 未定義
AF 未定義
PF 未定義
CF 1オペランド形式:
0:結果が結果の下位半分に収まる場合
1:結果の上位半分に有効ビットのキャリーがある場合

2オペランド、3オペランド形式:
0:結果が格納先オペランドサイズに収まる場合
1:結果が格納先オペランドサイズに合わせるために、切り捨てられた場合


inserted by FC2 system