无我

让内心永远燃烧着伟大的光明的精神之火!
灵活的思考,严谨的实现
豪迈的气魄、顽强的意志和周全的思考

王爽汇编语言(第2版)实验2 学习

其中第2题是这样的:

(2) 仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题,那么要恭喜你,因为你有很好的悟性。大多数的学习者对这个问题还是比较迷惑的,不过不要紧,因为随着课程的进行,这个问题的答案将逐渐变得显而易见。图3.19 用Debug进行的实验

 

对这道问题,我看到网上的前辈基本上一致认可的答案是:因为用T指令进行调试时,会产生中断。而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。所以内容也就是:IP-CS-EFlags-栈底.

这个答案是对的,不过我做了很多次实验,发现栈中不仅仅是这些内容,还压了另外两个寄存器:BP和AX。大家可以通过以下代码实验:

    mov ax,2000h
    mov bx,3000h
    mov cx,4000h
    mov dx,5555h
    mov bp,6666h
    mov si,7777h
    mov di,8888h
    mov ds,bx
    mov es,cx
    mov bx,3333h
    mov cx,9999h
    mov ss,ax
    mov sp,10h
    mov ax,2222h
    push ax
    push bx
    push cx
    mov ax,6869h

结果如下:

也就是栈里面内容有:AX-BP-IP-CS-EFlags-自己push的内容-栈底。

疑问就是为什么要保存ax和bp呢?

posted on 2012-05-31 10:13 Tim 阅读(2080) 评论(0)  编辑 收藏 引用 所属分类: 汇编语言


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

本博客原创文章,欢迎转载和交流。不过请注明以下信息:
作者:TimWu
邮箱:timfly@yeah.net
来源:www.cppblog.com/Tim
感谢您对我的支持!

留言簿(9)

随笔分类(173)

IT

Life

搜索

积分与排名

最新随笔

最新评论

阅读排行榜