测试一个位是0还是1 x86

时间:2017-02-27 19:18:19

标签: assembly x86 gas

所以我正在测试是否有一些“设置”。 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语法

0 个答案:

没有答案