. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
主题 : :  实验二 完全分析- 傻瓜教程-包看,包懂,包理解  [待解决] 回复[ 83次 ]   点击[ 7376次 ]  
zhenglxd
[帖 主] [ 发表时间:2009-06-02 17:03 ] 
荣誉值: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
分别送入栈中(注意是有顺序的),然后 跳转到 中断处理程序
所以我们看到 这个栈内 他保存了 原先的一些信息,以便于中断处理完成后能根据这些信息继续执行下面的指令
具体一些复杂的地方这里就不说了 用王爽老师的话说 这叫知识屏蔽 会分散大家注意力的!
tianya0035
[第36楼] [ 回复时间:2010-07-19 22:45 ] 
荣誉值:0
信誉值:0
注册日期:2010-07-16 17:17
好多没有悟性的,这下我满意了:)
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved