VC6.0 中使用汇编需要注意的一个小问题

发布于 2022-09-18 21:09:10 字数 2634 浏览 8 评论 0

VC6.0 + Intel CPU
int main()
{
        unsigned int var_EAX[100];
        unsigned int var_EBX[100];
        unsigned int var_ECX[100];
        unsigned int var_EDX[100];
        unsigned int var_R8[100];
        int i;

        i=0;

        __asm{
                push MB_OK                                        //把要传给MessageBox的参数(4个)入栈
                push title
                push message
                push NULL
                call dword ptr MessageBoxA        //调用MessageBoxA
                mov  var_EBX,EBX
                mov  var_EAX,EAX
                mov  var_ECX,ECX
                mov  var_EDX,EDX

//                mov  var_R8,r8
        }
return(0);
}

其中把
                mov  var_EBX,EBX
                mov  var_EAX,EAX
                mov  var_ECX,ECX
                mov  var_EDX,EDX
翻译成了:
        mov        DWORD PTR _i$[ebp+ebp], eax
        mov        DWORD PTR _i$[ebp+ebp], ebx
        mov        DWORD PTR _i$[ebp+ebp], ecx
        mov        DWORD PTR _i$[ebp+ebp], edx

因此对于VC6.0不要用var_EAX[...]这样的形式.而用var_EAX这样的非数组为好.
其它有的编译器则没有这个问题

[ 本帖最后由 system888net 于 2008-4-23 22:55 编辑 ]

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文