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

标签 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
}

我只需要把作业部分翻译成程序集。问题是我已经尝试过这段代码但不起作用:

尝试 1

void change(SARCH *arch) {
int n;

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

}

尝试2

void change(SARCH *arch) {
int n;

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

}

尝试3

void change(SARCH *arch) {
int n;

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

}

尝试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 赋值?

最佳答案

我通过执行以下操作解决了该问题

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

关于c - 使用内联汇编将 int 保存在来自结构指针的函数变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40786516/

相关文章:

c - 独立的 C 应用程序

c - 内核在添加新代码时中断(永远不会运行)

assembly - 自修改代码算法

c - 如何释放递归结构(trie)

c++ - 标准是否定义了 `a[i]` 的类型,其中 `a` 是 `T [M][N]`?

谁能指出为什么会发生错误?错误是 "expected "=",";","asm"or __attribute__ before "<"

c++ - 编译 __asm 代码所需的标志

c - 使用 sqlite3 将某些数据分配给结构

c - 图像翻转不正确...为什么?

c - 二叉树搜索是在骗我吗?