使用内联汇编将int保存在来自结构指针的函数变量中

时间:2016-11-24 12:31:13

标签: c assembly struct x86 inline-assembly

我有一个包含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分配?

1 个答案:

答案 0 :(得分:0)

我通过以下方式解决了这个问题

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