能力值:
( LV8,RANK:130 )
|
-
-
2 楼
如果发错地方,请斑竹先别移贴,拜谢了
|
能力值:
(RANK:260 )
|
-
-
3 楼
没有实验,凭我的理解,应该是最后ax=1,bx=0
等下实验一下,看看对不对。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你自己弄个编译器调试不就行了吗?王爽的汇编语言里面有
|
能力值:
(RANK:260 )
|
-
-
5 楼
实验过了,结果确实是ax=1,bx=0。
下面解释一下:
程序定义了16个word作栈空间,前几行代码是置栈指针的,让栈初始为空即,sp=16指向栈底部。
接下来的几条指令是将call指令后的那一条nop的地址入栈,此时栈中的数据为:
ss:00 -> offset s
ss:02 -> cs
// 上面的值不是栈中的值,是为call指令构造的目的地址
// 04 - 0a\0b之间的值无效
ss:0c -> offset s - 1,因nop占一个字节,所以它与后面s的地址相差1
ss:0e -> cs
并且call指令执行后,cs:eip指向s处的代码,sp == 0c,即“返回”地址
所以,后面给ax装入s的地址,再减去ss:[0ch],相差正好是1,即一个nop指令的字节长度
而给bx装入cs的值,再减去cs,结果当然是0了
如果这个问题搞不明白,把书中的8086逻辑寻址模式和堆栈那一部分知识好好看一下,哦,还有call指令也要搞明白。
|
能力值:
( LV8,RANK:130 )
|
-
-
6 楼
感谢书呆彭,讲得非常透彻,我也搞明白了,再谢
|
|
|