一. 如果传递指针给函数
long cread(long *p){
long result = *p;
return result;
}
visual studio得到的汇编代码:
long result = *p;
mov eax,dword ptr [p]
mov ecx,dword ptr [eax]
mov dword ptr [result],ecx
return result;
mov eax,dword ptr [result]
那么
eax, 代表了result的值
p, 代表了&p的值, 相当于:ebp+立即数。
[p], 代表了p的值。
[[p]], 代表了*p的值(注:[[p]]这样写是为了帮助理解)
而如果用gcc生成的汇编代码:
mov
汇编语言中传递指针给函数的原理分析

本文探讨了在Visual Studio和GCC环境下,如何通过汇编代码传递指针给函数。在Visual Studio中,`eax`表示`result`值,`p`表示`&p`的值,`[p]`和`[[p]]`分别表示`p`的值和`*p`的值。而GCC中,`rdi`等价于`p`,`[rdi]`表示`*p`。文章补充说明了传递数据给函数时的类似情况。
最低0.47元/天 解锁文章
14万+

被折叠的 条评论
为什么被折叠?



