目前我知道vc++ inline assembler 有这几个宏 LENGTH、SIZE、TYPE,他们使用简单,下面个个例子:
void main()
{
int k[10];
int a,b,c;
__asm
{
mov eax, LENGTH k
mov ebx, SIZE k
mov ecx, TYPE k
mov a, eax
mov b, ebx
mov c, ecx
}
printf("%b - %d - %d/n", a, b, c);
}
他们的反汇编代码如下:
53: int k[10];
54: int a,b,c;
55: __asm
56: {
57: mov eax, LENGTH k
0040B7E8 mov eax,0Ah
58: mov ebx, SIZE k
0040B7ED mov ebx,28h
59: mov ecx, TYPE k
0040B7F2 mov ecx,4
60: mov a, eax
0040B7F7 mov dword ptr [ebp-2Ch],eax
61: mov b, ebx
0040B7FA mov dword ptr [ebp-30h],ebx
62: mov c, ecx
0040B7FD mov dword ptr [ebp-34h],ecx
63: }
64: printf("%b - %d - %d/n", a, b, c);
0040B800 mov eax,dword ptr [ebp-34h]
0040B803 push eax
0040B804 mov ecx,dword ptr [ebp-30h]
0040B807 push ecx
0040B808 mov edx,dword ptr [ebp-2Ch]
0040B80B push edx
0040B80C push offset string "%b - %d - %d/n" (00420f98)
0040B811 call printf (004010a0)