所以我正在测试是否有一些“设置”。 bv(ebx)是我的位向量,位(ecx)是我的索引0,1,2 ...并且返回(eax)应该是0或1.我的逻辑在这里有什么问题吗? c函数看起来像
int bitIsSet(unsigned int *bv, unsigned int bit)
汇编实施:
#define return %eax
#define bv %ebx
#define bit %ecx
#define FSIZE 8
.text
.global bitIsSetBV
bitIsSetBV:
//Prologue
subl $FSIZE, %esp //Frame space
//Load Params
movl FSIZE+4(%esp), %ebx //loads *bv
movl FSIZE+8(%esp), %ecx //loads bit
//Func Body
bt bit, bv //check if 0/1
jc END //if 1 jump to END
xor return, return //return = 0 if bv @ bit is 0
jmp EPILOGUE //Skip END
END:
movl $1, return //return = 1 if bv @ bit is 1
//Epilogue
EPILOGUE:
add $FSIZE, %esp //restore stack ptr
ret //return = 0/1
我正在使用GAS语法