当前位置:编程学习 > 汇编语言 >>

C语言的指针如何进入嵌入的汇编语言?

# include <stdio.h> void main() { unsigned long m,*v; v=&m; m=0x01020304; printf(" %x %x %x\n",v,*v,m);//这一步的结果是12ff7c 1020304 1020304,符合预期 m=0x01020304; _asm { mov eax,m bswap eax mov m,EAX } printf(" %x\n",m);//这一步的结果是4030201,符合预期 _asm { mov eax,[v] bswap eax mov m,EAX } printf(" %x %x %x\n",m,v,*v);//结果感到意外:7cff1200 12ff7c 7cff1200 //照理来说,v是指针,就是地址,那么[v]就应该是m,怎么[v]仍然是v呢? v=&m; m=0x01020304; _asm { mov eax,v bswap eax mov m,EAX } printf(" %x",m);//结果:7cff1200,也在意料之中 }
追问:这样我也做过了,甚至给esi,然后lodsd,进入eax的仍然是v而不是[v]。我想内联汇编不接受指针吧?可是为什么又不出错,而又能接收地址,却不能用这个地址寻址呢?
答案:你那个是寻址的问题,不是内嵌的问题,你那样都是直接寻址,这里变量和立即数不一样。这样就可以了:
 _asm
    {
        push ebx
        mov ebx,v
        mov eax,[ebx]
        bswap eax
        mov m,EAX
        pop ebx
    }

上一个:汇编语言 子程序设计
下一个:哪有计算机汇编语言下载?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,