18.8.1
使用codeblocks的汇编调试发现代码如下
push %ebp
mov %esp,%ebp
mov 0x8(%ebp),%edx
mov 0xc(%ebp),%eax
add %eax,%edx
mov 0x10(%ebp),%eax
add %edx,%eax
pop %ebp
ret
然后发现codeblocks并不能写汇编
vc++👇✍内联汇编应该是
_asm
{
push %ebp
mov %esp,%ebp
mov 0x8(%ebp),%edx
mov 0xc(%ebp),%eax
add %eax,%edx
mov 0x10(%ebp),%eax
add %edx,%eax
pop %ebp
ret
}
18.8.2
_asm
{
mov 0x14(%esp),%eax
mov %eax,0xc(%esp)
mov 0x18(%esp),%eax
mov %eax,0x8(%esp)
mov 0x1c(%esp),%eax
mov %eax,0x4(%esp)
movl $0x403024,(%esp)
call 0x401ba0 <printf>
}
#define _ADDRESSOF (v) (&reinterpret_cast<const char &>(v) )
#define _INITSIZEOF(n) ((sizeof(n) + sizeof(int) -1) & ~(sizeof(int) -1))
#define va_start(ap,v) (ap = (va_list)_ADDRESSOF(v) + _INITSIZEOF(v))
#define va_arg (ap , t) (*(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF( t )))
#define va_arg (ap) (ap = (va_list)0)