0
function:  mov eax,ebx   
           and ebx,1
           shl ebx,2
           jmp [ebx+Tab]
Tab:       dd F1
           dd F2
           dd F3
           dd F4
F4:        sub eax,eax
F3:        add eax,eax
F2:        sub eax,eax
F1:        ret

ebx = Number->の場合、それ以外の場合でも0の場合はeaxでNumberを返す必要があります

4

2 に答える 2

3

eaxのコピーをebxに取り込み、右端の桁(AND)=> 0または1を取り、4倍(SHL)=> 0または4、ジャンプテーブルによって計算されたアドレスにジャンプします=> F1またはF4、 F1(ebxは0、eaxは偶数)は元のeaxで戻り、F2(ebxは4、eaxは不均一)は0(eax-eax)を返します。

F3とF4は未使用です。

于 2012-09-20T09:58:59.850 に答える
3

and ebx,1 ビット単位のAND演算では、結果は0(ebxが偶数の場合)または1(それ以外の場合)になります。

shl ebx,2 2ビット左にシフトします(これは4を掛けるのと同じです)。ebxは0または4になりました。

jmp [ebx+Tab]Tab + ebxからアドレスを取得し、それにジャンプします。Tabは4バイトのポインターの配列であり、ebxは0または4のいずれかであるため、最初の(F1)または2番目の(F2)要素を指します。偶数の場合はF1にジャンプし(元の値を返します)、それ以外の場合はF2にジャンプします(eaxがクリアされ、ゼロが返されます)。

于 2012-09-20T10:01:06.203 に答える