这个程序如何工作,以及这种跳跃是如何工作的

时间:2012-09-20 09:45:53

标签: assembly nasm

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 - >应该返回eax中的Number,否则为0

2 个答案:

答案 0 :(得分:3)

将eax的副本带入ebx,取最右边的数字(AND)=> 0或1,四倍(SHL)=> 0或4,通过跳转表跳转到计算地址=> F1或F4,如果F1(ebx为0,eax为偶数)返回原始eax,如果F2(ebx为4,eax不均匀)返回0(eax-eax)。

F3和F4未使用。

答案 1 :(得分:3)

and ebx,1按位与运算,结果为0(如果ebx为偶数)或1(否则)

shl ebx,2向左移2位(相当于乘以4)。 ebx现在为0或4。

jmp [ebx+Tab]从Tab + ebx获取地址并跳转到该地址。 Tab是四个字节指针的数组,ebx是0或4,因此它指向第一个(F1)或第二个(F2)元素。 如果偶数跳转到F1(返回原始值),否则跳转到F2(清除eax并返回零)。