16h只能8个进栈,7个出栈,这样cx=8就没意义了
肤浅,真正用来传送数据的栈空间只有一个字的空间就够了,用完下一次就用新的数据覆盖了。。 本帖最后由 梅梁馨 于 2012-4-1 20:33 编辑
一世芳华 发表于 2012-4-1 19:45 http://bbs.fishc.com/static/image/common/back.gif
SP最小值为28h。
我们假设SP=SP1+SP2+SP3;
1、由于要复制的是字型数据,且SP每次-2,因此,SP1=f+2=11; ...
讨论一下:
1.以字为单位的时候,什么情况下指针会在11的奇数位置?
2.我认为是Debug中才能看到标志位.这是小问题,主要是flag是什么?占几个什么单元?
3.sp最小值为8H,这个栈无缘无故就空这么多在这里?
:lol 梅梁馨 发表于 2012-4-1 20:26 static/image/common/back.gif
讨论一下:
1.以字为单位的时候,什么情况下指针会在11的奇数位置?
2.我认为是Debug中才能看到标志位.这是 ...
1、这是SP1。。。打比方来的,并不是真正的SP~~并且,即使指向奇数位,也是没有问题的;
2、标志位在控制台中有8个,由于只有0或1,因此是字节,不过,不管是字还是字节~,由于是存在栈内,SP每次移动2个内存单元,所以每个标志位占一个字的空间,空的部分用0填充,即两个字节单元;
3、这个sp不能低于8个字节单元的情况我实验过, 低于8的时候,调试就会报错,我也不知道原因在哪里,估计是系统设置吧~~~ 本帖最后由 莫名其妙 于 2012-4-1 21:38 编辑
一世芳华 发表于 2012-4-1 19:02 http://bbs.fishc.com/static/image/common/back.gif
你分析这么多有意义吗? sp小于8h,调试的时候就会报错。。还0呢~~动手才是王道,想破脑袋不如动手试试~~ ...
对不起 在版主没公布正确答案前我坚持我的答案
而且我并不是没有动手测试就发表评论 我相信每个人都有自己的想法 有自己的计算结果 不管结果正确与否
我并不针对别人的结果发表什么看法 最多也就算互相讨论下 毕竟自己和别人的想法不一定一样
-dds:0 f
0000:000068 10 A7 00 BB 13 02 0E-16 00 B6 03 B1 13 02 0E
0000:00108B 01 70 00 B9 06 1B 02-40 07 1B 02 FF 03 1B 02
-d cs:0 f
1403:000068 10 A7 00 BB 13 02 0E-16 00 B6 03 B1 13 02 0E
1403:001000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
莫名其妙 发表于 2012-4-1 21:34 static/image/common/back.gif
对不起 在版主没公布正确答案前我坚持我的答案
而且我并不是没有动手测试就发表评论 我相信每个人都有 ...
呵呵,不好意思哈,是我失态~~~ 期待结果。。学习:Q 答案是0吧,开始认为是12h,以为在dw 0,0,....处取一个空间作为栈保存数据的地方就行了,后来因为题目中说的是将0:0-0:15空间中的数据复制到cs:0-15中,所以,原来空间中的数据就不在需要了,于是我认为是2h,但是这个调试不过去,看了上面他们的答案,发现0是正确的,但是还是不是很明白,就解释。。。:P 根据12楼的提示,还是有些疑惑,楼主说要点中有 中断机制,
cpu在执行int n(int21h的时候也要吗?)中段的时候要 标志寄存器入栈,cs,ip 入栈这要3个字
12楼说的pop的时候要iret这个不清楚
希望楼主能解答!还有多出些这样的题目,虽然这题目我答不上了:'(
支持鱼c! agittarius 发表于 2012-4-4 22:40 static/image/common/back.gif
答案是0吧,开始认为是12h,以为在dw 0,0,....处取一个空间作为栈保存数据的地方就行了,后来因为题目中说的 ...
可是如果这样的话,pop 之后 sp-2 就不是负数了?
还有就是在执行的过程中原数据这样不会遭到破坏吗?
求解! 莫名其妙 发表于 2012-4-1 21:34 static/image/common/back.gif
对不起 在版主没公布正确答案前我坚持我的答案
而且我并不是没有动手测试就发表评论 我相信每个人都有 ...
可是如果这样的话,pop 之后 sp-2 就不是负数了?
还有就是在执行的过程中原数据这样不会遭到破坏吗?
求解! 本帖最后由 莫名其妙 于 2012-4-5 08:33 编辑
炫动少年 发表于 2012-4-4 23:23 http://bbs.fishc.com/static/image/common/back.gif
可是如果这样的话,pop 之后 sp-2 就不是负数了?
还有就是在执行的过程中原数据这样不会遭到破坏吗?
...
版主所说的思维障碍我的想法就是 关于 题目只是要求 结果没说相对数据是否存储进去或者被破坏的问题!~
关于sp-2 问题 我前面也说了书上的问题3.12 (第3章69页)关于栈段的一些介绍用push pop 只修改sp的值 用push一直压栈会导致栈顶环绕覆盖原栈内数据 所以 sp=0-2 以后会得到 sp=fffe
{:5_104:}8h凑个热闹 炫动少年 发表于 2012-4-4 23:23 static/image/common/back.gif
可是如果这样的话,pop 之后 sp-2 就不是负数了?
还有就是在执行的过程中原数据这样不会遭到破坏吗?
...
前面的问题我也不是很清楚,但是这道题并没有在操作定义的数据,所以直接覆盖就行了。。。不用考虑是否破坏原来的数据。。。 本帖最后由 离尘※影 于 2012-4-5 16:21 编辑
CS:0~15需要保存结果,理论sp应该为11h,如果不考虑栈溢出,可以为0 研究了很长时间了额,还是不懂。求解!!! 本帖最后由 莫名其妙 于 2012-4-7 18:27 编辑
梅梁馨 发表于 2012-3-31 22:52 http://bbs.fishc.com/static/image/common/back.gif
赞成的顶一下
1.
这题汇编是两个答案:12H和18H.
喔 原来如此 我说题目重点说的调试模式是个啥意思呢 原来是 -t pushf push cs ip
没有debug 没有-t 就没有这些多出来的数据!~
我以前说的那些乱七八糟的答案原来都是不合题意的!~
不过还有一点 12h 就不能在调试模式下得出答案了吧!~那结果不是还是18h么?
莫名其妙 发表于 2012-4-7 18:15 static/image/common/back.gif
喔 原来如此 我说题目重点说的调试模式是个啥意思呢 原来是 -t pushf push cs ip
没有debug 没有-t 就 ...
很抱歉,这个题目临时想的
你那个为0的答按 理论上能行,不过我没试过,
不知道你执行的时候成功了没!
不过题目本身的意义不在于答按,而是希望大家能够思考这个问题
我也是偶然发现的,在debug下,按t ,push进去的数据,前面老是有几个数据被覆盖
不过仔细去看 却发现 前面3个字单元存储的恰好是 cs,ip,还有标志寄存器的值
由此才想到 汇编的中断机制 wAterLoo 发表于 2012-4-7 19:12 static/image/common/back.gif
很抱歉,这个题目临时想的
你那个为0的答按 理论上能行,不过我没试过,
喔明白了 不再纠结了 谢版主!~ 梅梁馨 发表于 2012-3-31 22:52 static/image/common/back.gif
赞成的顶一下
1.
这题汇编是两个答案:12H和18H.
如果不需要保存现场信息的话。。10h不可以吗。。(理论上)
页:
1
[2]