内联汇编


求数组长度 LENGTH 数组名
求数组大小 SIZE 数组名
求数组类型大小 TYPE 数组名
内联汇编不可以使用db dw dq等... 只能使用_emit定义,且一次只能定义一个字节
例子:定义三个0x90字节

__asm {
  _emit 0x90
  _emit 0x90
  _emit 0x90
  mov eax, eax
}

裸函数

可以有局部变量,但是需要自己抬栈,否则会导致堆栈不平衡,使用宏 __LOCAL_SIZE ,这个宏会自动计算裸函数局部变量的大小。
例子:

void fun()
{
    int nValue = 0;

  __asm {
        push ebp
        mov  ebp, esp
      sub esp, __LOCAL_SIZE
        ...
        leave  //mov esp, ebp  pop ebp
        retn 参数个数 * sizeof 参数类型
    }
}