能力值:
( LV2,RANK:10 )
|
-
-
2 楼
ptr前的标识表示数据类型,ptr后的标识表示数据首地址
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
是的
[ ]里的是内存单元的地址
地址处数据才是操作数
|
能力值:
(RANK:410 )
|
-
-
4 楼
不一定,带中括号里的值可以是内存地址,也可以是数值。这主要看对这个地址(数值)操作指令是什么类型的指令才能判断中括号的值是内存地址还是数值。如果指令是属于操作内存地址的,带中括号中的值就是内存地址,如果指令是操作指针的数值的,那带中括号的数值可能是指针地址,也可能是数值。如你上面的push指令操作带中括号的值时,中括号的值就只能是内存地址,不能是数值。如lea eax,[esi+1c]指令时,带中括号的数值可以是内存地址,也可以是数值。
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
那对于是 lea eax , [edx+10]
内存怎么知道中括号是数值还是地址呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
楼上人才!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
[QUOTE=zevenfly;895679]那对于是 lea eax , [edx+10]
内存怎么知道中括号是数值还是地址呢?[/QUOTE]
就是目标地址传送指令: 将一个近地址指针写入到指定的寄存器。格式:
LEA reg16,mem16
其中reg16必须是一个16位通用寄存器,mem16必须是一个存储器,执行这个指令后,就将mem16所指的16位偏移地址传送reg16中。
lea eax , [edx+10]
就是eax=edx+10.
区别MOV传送指令:
MOV传送的是地址所指的内容,而LEA只是地址。
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
我明白版主说的意思了 ~~~
其实 主要就是这个 lea 指令作怪吧
我说 [ XXX ] 中的XXX一定是 内存虚拟线性地址 ~~ 也应该是 正确的
因为 就算是 lea 指令 ,lea eax,[esi + 1Ch]
我就把 esi+1Ch 看做地址。
lea 指令的使命就是 取内存单元的偏移地址
自然就计算 esi+1Ch 送给 eax
这里 不管 这个 XXX 是哪里的 、 有没有提交 。它 就是一个 虚拟地址
这个虚拟地址不一定 已经分配有物理内存,但这个虚拟线性地址 我肯定是可以使用的
|
|
|