SIBバイト

読み:エスアイビー・バイト
外語:SIB byte 英語
品詞:名詞

x86の機械語コード中にあり、実効アドレスを指定したメモリーアクセスをする際の情報を与えるためのバイト。i386の32ビット以降で追加された。

目次

32ビットモードでのアドレッシングの場合、インデックスを使った実効アドレス指定は、ModR/Mだけでは出来ない。そこでこのような場合は、ModR/Mの直後にSIBバイトが置かれる。

ModR/Mの各モードごとにR/Mフィールドを100とすると、SIBを使用してアドレスの参照方法を指定できる。

76543210
ScaleフィールドIndexフィールドBaseフィールド

これを組み合わせることで、[eax+edx*4+10]といったような実効アドレスを指定し、メモリアクセスをすることができる。

この例の場合、eaxがBase、edxがIndex、4がScaleということになる。

Base

ベースアドレスを指定するレジスターを指定するフィールドである。

ModR/MのModフィールドによって、baseの解釈が変わる。

64ビットでは、レジスター数が倍となり表現に4ビットを要するため、4ビット目はREXプリフィックスのREX.bで表わす。

レジスターはロングモード(64ビット)でのものを記載しているが、32ビットでも(R8から15が無いことを除けば)同様である。

 mod
rex.bbase000110
0000RAXRAX + disp8RAX + disp32
001RCXRCX + disp8RCX + disp32
010RDXRDX + disp8RDX + disp32
011RBXRBX + disp8RBX + disp32
100RSPRSP + disp8RSP + disp32
101disp32RBP + disp8RBP + disp32
110RSIRSI + disp8RSI + disp32
111RDIRDI + disp8RDI + disp32
1000R8R8 + disp8R8 + disp32
001R9R9 + disp8R9 + disp32
010R10R10 + disp8R10 + disp32
011R11R11 + disp8R11 + disp32
100R12R12 + disp8R12 + disp32
101disp32R13 + disp8R13 + disp32
110R14R14 + disp8R14 + disp32
111R15R15 + disp8R15 + disp32

Mod=00の場合、ベースを指定する時はディスプレイスメントは指定できないが、ベースレジスター無し(base=101)を指定する場合)はディスプレースメントが必須である。ベースもディスプレースメントも無い、という指定は出来ない。

Mod=01またはMod=10の場合、ベースなしという指定は出来ず、またディスプレースメントが必須となる。

Index

インデックスレジスターを指定するための3ビットのフィールドである。

32ビットでは、rex.x=0のレジスターのみが使える。

64ビットでは、レジスター数が倍となり表現に4ビットを要するため、4ビット目はREXプリフィックスのREX.xで表わす。

rex.xindexレジスター
0000RAX
001RCX
010RDX
011RBX
100RSP
101RBP
110RSI
111RDI
1000R8
001R9
010R10
011R11
100R12
101R13
110R14
111R15

Scale

インデックスレジスターの倍率を指定するフィールドである。

scale倍率
00なし
012
104
118
用語の所属
x86
関連する用語
オペコード (IA-32)
ModR/M
REXプリフィックス

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club