2016-11-24 45 views
0

我有一个包含一个int像下面这样的结构从结构指针来:保存int类型的函数变量使用内联汇编

typedef struct arch 
{ 
    int size; 
    unsigned char *info 
} SARCH; 

,我有一个需要执行以下功能:

void change(SARCH *arch) { 
    int n; 
    n = arch-> size; 
    // Do something with n 
} 

我只需要将分配部分转换为程序集。问题是我试图与此代码并不起作用:

ATTEMPT 1

void change(SARCH *arch) { 
int n; 

_asm { 
mov [n], arch.size // THIS LINE 
} 

} 

ATTEMPT 2

void change(SARCH *arch) { 
int n; 

_asm { 
mov eax, arch.size 
mov [n], eax // THIS LINE 
} 

} 

ATTEMPT 3

void change(SARCH *arch) { 
int n; 

_asm { 
movsx eax, arch.size 
mov [n], eax 
} 

} 

ATTEMPT 4

void change(SARCH *arch) { 
int n; 

_asm { 
mov eax, arch 
mov eax, [eax] arch.size 
mov [n], eax // THIS LINE 
} 

}

尝试1,2和4由于我评论过的行不能编译。尝试3编译并运行,但不会在n中正确保存该值。相反,它保存了另一个数字,例如104而不是7.我如何实现int赋值?

+0

你为什么要做这个问题? –

+0

C不支持_methods_。你有一个_function_。 – Olaf

+2

尝试4编译并在这里工作(Visual Studio 2015),一旦我从'move'中删除了多余的'e'。 –

回答

0

我决心通过只是在做以下

_asm { 
    mov eax, dword ptr [data] 
    mov ecx, dword ptr [eax] 
    mov dword ptr [n],ecx 
}