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
}
上一个:汇编语言 子程序设计
下一个:哪有计算机汇编语言下载?