. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  哪位高手帮忙咯~~  实验二  [待解决] 回复[ 3次 ]   点击[ 457次 ]  
rainforest0
[帖 主]   [ 发表时间:2009-03-21 17:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-07 13:53
第三章 实验二任务2  为什么 d 2000:0 f  会改变呀!???  不明白~
bslg123
[第1楼]   [ 回复时间:2009-03-21 21:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-28 00:58
不需要明白,这关系到12章的中断内容,丰富的想象力是建立在丰富的知识之上的。其实王爽老师这样设计一方面是给有基础的人 另外一方面是在考验你是否有勇气跟着这个线索向下学习!!
kkaxiao
[第2楼]   [ 回复时间:2009-03-26 16:55 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-03-20 22:14
第三章实验任务二刚开始还真有点儿晕。仔细分析了一下还是明白了。图3.19给出的汇编指令有七条,手动执行到完第三条后栈区确定了(就是2000:0—2000:f),然后我们用了一个-d命令来查看内存内容,其实在上文王爽老师已经说过了,debug的-d命令当然也是由CPU来执行的。这样的话,实际上CPU是中断了当前由IP自增指向的第四条指令,转而执行-d的指令代码段。这就要求保护被中断指令的“现场”,也就是相应寄存器入栈(据我分析,有CS,IP,BP,AX,BX,CX,DX入栈,但最先入栈的059DH却不知道是什么,有知道的留个言啊),然后-d命令的相关参数写入相应寄存器,-d执行完事之后一个ret,栈中数据弹回相应寄存器,ip仍然指向被中断的第四条指令。所以如果我们再次输入-t还是会接着执行原来所写的第四条汇编指令。这就是为什么2000:0—2000:f内存内容发生了改变。
yakoo5
[第3楼]   [ 回复时间:2009-04-18 00:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-16 15:54
因为用T指令进行调试时,会产生中断。而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,之后将IP的值进栈,之后还有一个进栈的数据(还不知道是什么数据),再就是AX中的值进栈,剩下的进栈的应该是bx,cx,dx的值(这三个进栈是猜测)。<关于中断的详细内容的讨论不在此题范围>

继续执行t指令,就会发现这个规律。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved