内嵌汇编语言关于push的一个问题?

发布于 2022-09-12 03:46:08 字数 620 浏览 22 评论 0

#include <stdio.h>

int main()
{
    char varstr[100] = { 0x78, 0x56, 0x34, 0x12 };

    int vara, varb;

    _asm {
        push varstr
        lea esi, varstr
        push esi
        mov eax, [esp + 4]
        mov vara, eax
        mov eax, [esp]
        mov varb, eax
        add esp, 8
    }

    printf("%d\n%d\n", vara, varb);

    return 0;
}

VS内嵌汇编语言,问下,为什么

push varstr

压入的是0x12345678,而不是varstr的地址呢?

学过C语言,按理说varstr应该代表它的地址

但这总感觉是根据varstr的地址传入4个字节?

刚学汇编,有点不懂,请问这是怎么回事?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

幽梦紫曦~ 2022-09-19 03:46:08

c++ 与汇编混合开发是微软专用的东西,linux 下只能用嵌入16进制代码的方式。
所以微软为啥要这么设计,就得问微软了。

push varstr
push [varstr]
push dword ptr varstr

微软都会翻译成

push dword ptr [varstr]

没啥道理可讲,知道就好,想办法规避吧。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文