能力值:
( LV4,RANK:50 )
|
-
-
2 楼
BP 默认 对应 SS 不是 DS
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
bp=sp=fffeH 这个地址是怎么来的?
不用关心这个地址是怎么来的,只要关心这个地址里面装的值,实际上这个地址是用debug跟踪器看出来
的,还可以是别的16进制,不管是什么,它里面装的都是刚入栈的偏移地址0005(call ax 的下一条指令
的偏移地址);
mov bp,sp ; 只是寄存器之间的操作,让bp指向sp单元的值,这样在下一步的[bp]就是取sp这个地址里
面的值也就是偏移地址0005;
注意call ax的调用 相当于执行:push ip , jump ax
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我想问 bp对应得段寄存器不应该是ds吗?这里也没有显示指向ss段 怎么取得的5呢?
BP的默认段寄存器与BX|SI|DI不同,使用SS。除非显式指定使用DS。
当执行mov bp,sp和add ax,[bp]后就相当于执行了add ax,[sp],而bp默认的段寄存器是ss,所以执行完这两条语句就相当于把ax的值加上ss:sp所指向的值,而ss:sp所指向的值正是call ax时放进栈中的IP的值
所以就是ax=6h+5h=0bh
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
在王爽的书中162页 (3)中写到 只要在·[...]中使用寄存器BP,而指令中没有显性地给出段地址,段地址就默认在SS中。
不错,它的确是一个寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到
比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.
把这个理解了你的问题就好办了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
没书 是在没理解到意思
|
|
|