![MOV EBX,[EBX]是什么意思?](/img/294033543.jpg)
int main( )
{ int var = 10;
teach(var);
return 0;
}
void teach(int testvar)
{
_asm
{
mov ebx,[ebp+8]
mov ebx,[ebx]
}
}
请问,这段程序执行后ebx将得到var的变量地址,中间发生了什么,是怎么取到var的地址的?
一楼的有毛病,[ebp+8]位置是一个指针的地址,我只是想知道这个地址怎么产生的!
c++生成变量就是在堆栈中按照你数据的类型来给你分配空间型世。所以这里有什么异议吗?
[ebp+8]指向的是 堆栈中的一个空间 就是 你定义变量的那个 内存地址的首地址。
如果你想知道为什么是[ebp+8]反汇编调试下你就明白了
在衫租消汇编语言中 ebx是基址寄存器,这个用的是 寄存器间接寻址方式,将ebx中的内容作为偏移引用ds段
来找到偏移也就是说 这句指令就是 mov ebx,ds:[ebx]
段地址*10+偏移地址=物理地址。找到物理地址后取出 其中的值送给ebx寄存器
mov ebx,[ebp+8];这句指令是将var的偏移传送给ebx
而此时 ebx中的值是var的偏移地址 所以就是讲 var中的数据传或知送给ebx寄存器中
你可能没学过汇编语言。所以你不了解这些
汇编语言爱好者为您解答,选我哦