|
主题 : : 实验二 完全分析- 傻瓜教程-包看,包懂,包理解 [待解决] |
回复[ 42次 ]
点击[ 1646次 ] | |
|
|
|
|
|
[帖 主]
[ 发表时间:2009-06-02 17:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05 |
刚发错地方了。。。org!
很多人都分析过实验二了,但一来他们都用了复杂的操作来表示简单的问题,二来也不是每个人有耐心看他们长篇大论的所以 我这里出个傻瓜版 包看,包懂,包理解!
OK
首先我打开debug手动设置 ss为2000H,sp为10H 然后我d ss:0结果如下
2000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
大家看这个栈是空的啊
之后我手动设置 cs=1234H,ip=99 H然后我用a cs:99 键入mov ax,0000,先不运行我们在看下 ss:0
2000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
大家看这个栈依然是空的啊
ok
最后 我轻轻的键入了T然后回车 我们再看下ss:0
2000:0000 00 00 00 00 00 00 00 00-00 00 9C 00 34 12 82 06
我解释下 0682 你们现在不用理会他 他是标志寄存器 psw的值
1234 很明显是 cs地址了
009c 保存是的ip地址关于 009c怎么来的请看下面
-u cs:99
1234:0099 B80000 MOV AX,0000
1234:009C 0000 ADD [BX+SI],AL
看到了吧 009c是 mov ax,000后下一条指令的偏移地址
那么究竟发生了什么呢?你按T的时候 产生了中断信息,所以cpu在运行完当前指令后立即产生中断,
(cpu ip指向的是下条指令) 由于中断, 为了保护现场 cpu用栈 来把 psw,cs,ip
分别送入栈中(注意是有顺序的),然后 跳转到 中断处理程序
所以我们看到 这个栈内 他保存了 原先的一些信息,以便于中断处理完成后能根据这些信息继续执行下面的指令
具体一些复杂的地方这里就不说了 用王爽老师的话说 这叫知识屏蔽 会分散大家注意力的! | | |
|
|
|
|
|
[第1楼]
[ 回复时间:2009-06-17 21:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:31
信誉值:3
注册日期:2009-06-15 19:20 |
| 哎~我在遇见这题的时候,是看出来cs,ip等值被写入栈了,再试几次,也能发现确实没错。但没学过中断机制咋知道它是要“保护现场”啊~还悟性~我晕。 | | |
|
|
|
|
|
[第2楼]
[ 回复时间:2009-08-01 09:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-02-10 14:31 |
请问"轻轻的键入了T",和用力键入有什么不同???
我怎么不同你的,我设置了ss:sp之后,2000:0段就变成
2000:0000 00 00 00 00 00 00 00 20-00 00 08 01 E6 0A 4A 05
我就知道0AE6是cs的值,0108是ip的值..
其他的我就不知道了,
看来我悟性不行啊,我差不多学完了第十章了,才回头看看.
就为了 王老师的 "悟性"才回头研究研究的..(我的心一直放不下这里)
但是还是没有结果.悲哀...... | | |
|
|
|
|
|
[第3楼]
[ 回复时间:2009-08-11 12:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-07-24 11:11 |
| 分析得很详细。我的“悟性”不高。因为太好奇,就到这里找答案啦。 | | |
|
|
|
|
|
[第4楼]
[ 回复时间:2009-09-21 20:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:3
注册日期:2008-11-09 22:07 |
|
|
|
|
|
|
[第5楼]
[ 回复时间:2009-09-23 20:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-09-16 19:31 |
分析得很详细。我的“悟性”不高。因为太好奇,就到这里找答案啦。
------------------
回复:志同道合的,呵呵... | | |
|
|
|
|
|
[第6楼]
[ 回复时间:2009-09-28 14:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-08-22 20:30 |
中断的保护现场机制是非常的严谨,ZHENGLXD分析的很好,很到位。反过来,说明我的悟性有待发掘。
渭南市 范智勇 | | |
|
|
|
|
|
[第7楼]
[ 回复时间:2009-10-06 18:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-06 18:19 |
| 终于找到答案了,今天看到这里怎么看也不明白。谢谢了。差点打击我。 | | |
|
|
|
|
|
[第8楼]
[ 回复时间:2009-10-10 16:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:8
注册日期:2009-10-08 14:01 |
|
|
|
|
|
|
[第9楼]
[ 回复时间:2009-10-10 16:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:8
注册日期:2009-10-08 14:01 |
0b02:0108 b82331 mov ax,3123
-t
ax=3123 bx=0000 cx=0000 dx=0000 sp=0010 bp=0000 si=0000 di=0000
ds=0b02 es=0b02 ss=2000 cs=0b02 ip=010b nv up ei pl nz na po nc
0b02:010b 50 push ax
-d 2000:0 f
2000:0000 00 00 00 00 00 00 23 31-00 00 0b 01 02 0b 66 05
为什么mov ax,3123执行后会出现这样啊?23 31是怎么来的啊?还没有压栈怎么出来的啊? | | |
|
|
|
|
|
[第10楼]
[ 回复时间:2009-10-19 19:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-09-28 22:40 |
|
|
|
|
|
|
[第11楼]
[ 回复时间:2009-10-20 21:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-18 09:53 |
|
|
|
|
|
|
[第12楼]
[ 回复时间:2009-10-25 00:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-02-11 11:20 |
刚才实验了一下
指定入栈的,出现在应该出现的位置
其之后分别入栈的(每次执行后)显示不知道的东西、cs、ip
那个不知道的东西就是楼主分析的吧!
但是王老师书上写着,如果不实验都能分析出来,说明很有悟性
于是我不实验的情况下,被两个东西弄晕了,一个是之前的那个不知道的东西
不实验也不知道动态的情况呀!
另一个就是书上不知从何而来的2000:0007H处的20H
上机实验后,知道cs,知道ip,就是不知道之前入栈的是啥玩意
所以到这里寻求答案 | | |
|
|
|
|
|
[第13楼]
[ 回复时间:2009-10-30 11:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2009-10-28 11:47 |
非常感谢楼主
呵呵,这次是专门是为这个而来论坛的
从分析,只知道保存了那些数据,而且也能找出对应关系
只是不明白,原来是保护现场
看到“悟性”,差点打击死我 | | |
|
|
|
|
|
[第14楼]
[ 回复时间:2009-11-25 20:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-14 19:20 |
哎,悲剧了。
我还以为是cpu一下处理两个代码来不及,所以先记下来一个,在搞那一个。
悟性啊!~~~~~悲剧了。。。。 | | |
|
|
|
|
|
[第15楼]
[ 回复时间:2009-11-27 20:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-31 08:24 |
|
|
|
|
|
|
[第16楼]
[ 回复时间:2009-11-27 20:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-31 08:24 |
| 唉,不知道有没有学<<微机原理》这个课程的啊?我们大二学这个,也是清华大学的教授写的,好像作者叫周明德,那本书写的太乱了,可能是专业性太强,不适合初学者读,王爽老师的这本书当教材就好了,不至于始大家学了半年的微机原理了,竟不知汇编为何物.悲哀啊! | | |
|
|
|
|
|
[第17楼]
[ 回复时间:2009-12-28 13:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
| 我还是不明白,我只看到第三章,不太理解中断,首先手动设置ss,ip,按书中所说,只要有关ss的命令,就会产生中断,自然就变了,不知是如何手动设置,好象设置ss得通过命令才行吧,这里就卡住了 | | |
|
|
|
|
|
[第18楼]
[ 回复时间:2009-12-28 20:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:1
注册日期:2009-12-24 11:13 |
| 我明白了,是用r命令来修改cs,ip这就不牵扯到指令 | | |
|
|
|
|
|
[第19楼]
[ 回复时间:2010-01-05 17:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-03 08:56 |
| 楼主分析很好,不过我有一点不明白,既然有东西入栈了,为什么sp不发生变化呢? | | |
|
|
|
|
|
[第20楼]
[ 回复时间:2010-01-06 01:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
楼主分析很好,不过我有一点不明白,既然有东西入栈了,为什么sp不发生变化呢?
------------------
回复:栈操作是以字为单位的。 每当入栈一次, sp-2,也就是说,入栈操作从高地址向低地址方向增长。这些东西, 还是用debug自己试验, 有的时候,说了半天还不如多做几次实验明白的透彻。 | | |
|
|
|
|
|
[第21楼]
[ 回复时间:2010-01-10 17:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:6
注册日期:2010-01-07 10:37 |
|
|
|
|
|
|
[第22楼]
[ 回复时间:2010-01-12 22:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-07 13:38 |
|
|
|
|
|
|
[第23楼]
[ 回复时间:2010-01-18 23:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-10-17 21:41 |
0b02:0108 b82331 mov ax,3123
-t
ax=3123 bx=0000 cx=0000 dx=0000 sp=0010 bp=0000 si=0000 di=0000
ds=0b02 es=0b02 ss=2000 cs=0b02 ip=010b nv up ei pl nz na po nc
0b02:010b 50 push ax
-d 2000:0 f
2000:0000 00 00 00 00 00 00 23 31-00 00 0b 01 02 0b 66 05
为什么mov ax,3123执行后会出现这样啊?23 31是怎么来的啊?还没有压栈怎么出来的啊?
===========================================================================
我的是:
2000:0000 00 00 00 00 00 00 00 20-00 00 0b 01 02 0b 66 05
发出同样的疑问,第8个单元的20是从哪儿来的?
------------------
回复: | | |
|
|
|
|
|
[第24楼]
[ 回复时间:2010-02-03 16:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-12-23 03:55 |
|
|
|
|
|
|
[第25楼]
[ 回复时间:2010-03-20 18:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-07-15 11:17 |
|
|
|
|
|
|
[第26楼]
[ 回复时间:2010-03-20 18:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-02 17:21 |
0b02:0108 b82331 mov ax,3123
-t
ax=3123 bx=0000 cx=0000 dx=0000 sp=0010 bp=0000 si=0000 di=0000
ds=0b02 es=0b02 ss=2000 cs=0b02 ip=010b nv up ei pl nz na po nc
0b02:010b 50 push ax
-d 2000:0 f
2000:0000 00 00 00 00 00 00 23 31-00 00 0b 01 02 0b 66 05
为什么mov ax,3123执行后会出现这样啊?23 31是怎么来的啊?还没有压栈怎么出来的啊?
===========================================================================
23 31 就是你Mov进ax的值 | | |
|
|
|
|
|
[第27楼]
[ 回复时间:2010-03-20 18:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-02 17:21 |
| LZ 举例子的时候是mov ax,00 自然之前相应的值变成00了 | | |
|
|
|
|
|
[第28楼]
[ 回复时间:2010-03-29 21:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-11 18:27 |
| 楼主分析的不错。呵呵,我知道是中断时候cs ip要压栈。最后两个字节我以为是操作码,晕死。至于其他的字节应该保存的是程序状态字和通用寄存器吧。 | | |
|
|
|
|
|
[第29楼]
[ 回复时间:2010-04-01 15:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-26 16:06 |
|
|
|
|
|
|
[第30楼]
[ 回复时间:2010-04-11 09:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-06 11:41 |
| 太阳,汗...俺看到 ss cs ip在 2000:0 f中,还以为这个内存段是寄存器所在地址段呢,要不然怎能保存毫无相关的寄存器数据呢 唉 看了中断保护的解释才知道 我tm真傻 听都没听过 还悟性 ,nnd 奏性还差不多 王老真狠啊 一个悟性害得我好纠结! | | |
|
|
|
|
|
[第31楼]
[ 回复时间:2010-06-14 16:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-07-16 14:51 |
| 初学者可能觉得用'悟性'有点牵强,但如果看完全书在理解那一段代码,也许王老师就是因为熟练掌握全书,才在那一道题说 '悟性' | | |
|
|
|
|
|
[第32楼]
[ 回复时间:2010-06-16 13:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:324
信誉值:0
注册日期:2008-01-01 17:48 |
初学者可能觉得用'悟性'有点牵强,但如果看完全书在理解那一段代码,也许王老师就是因为熟练掌握全书,才在那一道题说 '悟性'
------------------
回复:我觉得,debug提供我们的是数据,能从这些数据中找到规律本身就是一种“悟性”,比如cs、ip。而里面的标志寄存器 的值需要汇编的知识,不能算在里面。 | | |
|
|
|
|
|
[第33楼]
[ 回复时间:2010-06-22 23:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-08 17:43 |
mov ax,2000
mov ss,ax
mov sp,0010
在实行完着段代码后栈地址被改变,在实行D命令时cpu就中断把寄存器的值压入栈,所以看到地址20000H中有数值。
不只我这样分析对不 | | |
|
|
|
|
|
[第34楼]
[ 回复时间:2010-07-13 16:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-06-01 10:03 |
0b02:0108 b82331 mov ax,3123
-t
ax=3123 bx=0000 cx=0000 dx=0000 sp=0010 bp=0000 si=0000 di=0000
ds=0b02 es=0b02 ss=2000 cs=0b02 ip=010b nv up ei pl nz na po nc
0b02:010b 50 push ax
-d 2000:0 f
2000:0000 00 00 00 00 00 00 23 31-00 00 0b 01 02 0b 66 05
为什么mov ax,3123执行后会出现这样啊?23 31是怎么来的啊?还没有压栈怎么出来的啊?
===========================================================================
23 31 就是你Mov进ax的值
------------------
回复:为什么MOv进ax的值会出现在这里呢? 还有之前一步2000:0008的20又是什么意思呢?? | | |
|
|
|
|
|
[第35楼]
[ 回复时间:2010-07-13 17:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-12 14:54 |
| 提问一下:如果我们没有在程序中定义栈段,那又怎样保护现场呢???!!! | | |
|
|
|
|
|
[第36楼]
[ 回复时间:2010-07-19 22:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-16 17:17 |
|
|
|
|
|
|
[第37楼]
[ 回复时间:2010-08-07 09:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2010-07-31 15:39 |
| 我也悟性偏低。。。不知道那个20是什么意思,怎么会算ax进的呢? | | |
|
|
|
|
|
[第38楼]
[ 回复时间:2010-08-18 21:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-16 21:37 |
===========================================================================
23 31 就是你Mov进ax的值
------------------
回复:为什么MOv进ax的值会出现在这里呢? 还有之前一步2000:0008的20又是什么意思呢??
------------------
回复:
你可以这样理解:cpu要保存现场,现场包含哪些信息?无非就是执行了XX指令?这个指令的参数是多少?
所以当执行mov ax, 3123这条指令之前,要先把mov这条指令对应的2进制放到栈里保存起来,同样的,3123也要保存起来。而且,这种cpu自己保存的栈信息,并不影响sp的内容。 | | |
|
|
|
|
|
[第39楼]
[ 回复时间:2010-08-21 19:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-15 21:22 |
|
|
|
|
|
|
[第40楼]
[ 回复时间:2010-08-22 12:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-22 10:52 |
老师啊老师,这和悟性有什么关系啊?我就觉得和中断机制有关系,就是不知道有什么关系,老师说看“悟性 我一想我要是看答案不就相当于承认自己悟性不好了么。何况老师说看“悟性”,那一定是前面学过的内容可以解释这个问题,于是我足足用了两个小时来回想,还复习了前面的知识,结果依然一无所获。
令我无比惊讶的是,我上当了,这根本就没学过!!!!!!!!!! | | |
|
|
|
|
|
[第41楼]
[ 回复时间:2010-08-25 19:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-13 11:06 |
| 必须承认自己悟性不高,只是不知道原来这道题把我们都变普通了。 | | |
|
|
|
|
|
[第42楼]
[ 回复时间:2010-08-27 00:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-25 18:20 |
|