使用内联汇编将 int 保存在来自结构指针的函数变量中
Save int in a function variable coming from a struct pointer using 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
}
我有一个包含 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
}