gpt4 book ai didi

c++ - 带数组的内联汇编 lea

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:52 27 4
gpt4 key购买 nike

你好,我有一个关于 lea 指令和数组的问题,这很好用:

char *msg = new char[6];
msg = "hello";

_asm{
push 10h
push 0
mov eax, [msg]
push eax
push 0
call MessageBox
}

}

但为什么会出现“操作数大小冲突”错误?

char msg2[] = "hey2";
_asm{
push 10h
push 0
mov eax, [msg2]
push eax
push 0
call MessageBox
}

为什么它再次与 lea 一起工作?

char msg2[] = "hey2";
_asm{
push 10h
push 0
lea eax, [msg2] // <-
push eax
push 0
call MessageBox
}

最佳答案

在这里,您试图取消引用指向 char 大小的指针,但您尝试从中加载一个 int。

mov         eax, [msg2]

不确定这是否是正确的语法,但您可以使用

mov   eax, offset msg3

这里,加载地址,或者使用lea指令。

在 C 中,这类似于:

char msg2[10];
char *p = &msg2[0];
int x = *p;

该指令不解引用指针,它只是获取指针的地址,它还可以使用某些运算符计算地址。

lea         eax, [msg2]  // <-

相当于:

char msg2[10];
char *p = &msg2[0];

关于c++ - 带数组的内联汇编 lea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20749401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com