能力值:
( LV2,RANK:10 )
|
-
-
2 楼
参数是引用,[ebp+8]的值是参数地址,所以eax和edx的值都是传递进去的参数地址
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
1,“地址”和“地址里的内容"要搞清楚。 一加中括号就表示地址,例如:mov [edx],ecx ;把寄存器ecx的数值放到以edx为地址的空间中,不是放到edx寄存器。 2,内存地址之间的数据交换不能直接进行,必须经过寄存器作为中间商进行。
最后于 2023-7-8 22:40
被sixL编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
函数定义 void add(int &ref), 传入参数 是 引用型, 也就是 ref的地址 edx = [ebp + 8] = &ref [edx] = ref;
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我知道了,mov [edx],ecx, [edx]做为被赋值对象,不需要对其地址进行取值,故ecx可以给[edx]赋值。
我之前的疑问:[edx]不就是对其里面地址进行取值吗,ecx也是值,值怎么可以对值进行赋值
最后于 2023-7-8 23:40
被goose007编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
可以这样理解吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
[EDX] 在 源操作数, 目标操作数上 意义不一样。 在源位置,表示取得指定内存地址EDX单元的值; 在目标位置, 表示 保存值到指定内存地址EDX的存储单元上。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
参数一 int &ref 表示传入的是值的地址. 而不是值本身.
我们可以把 &ref 比喻口袋. ref是口袋中的苹果 &ref = [ebp+8]//口袋 ref=[ [ebp+8] ]//口袋里面才是苹果
我们的目标是加入一个苹果,而不是直接添加一个口袋, 所以我们先要把苹果 ref 取出来 , ref=[ [ebp+8] ] 把苹果 ref 加入一个,又放回口袋里面去. [ [ebp+8] ] = ref
具体使用哪个寄存器看编译器决定,只要在函数中空闲的寄存器即可. eax/edx/ebx...
最后于 2023-7-9 09:30
被Mxixihaha编辑
,原因:
|
|
|