|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 shuiyu 于 2017-6-29 22:45 编辑
小白刚学,不对的请各位大佬指正,谢谢
由于鱼C论坛的回档,我昨天的笔记消失了.... 所以今天先补回昨天的两个笔记。
实验二
(1)使用DEBUG,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。 (红色的为填空)
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax= 5BEAH
add ax,[2] ;ax= 5CCAH
mov bx,[4] ;bx= 30F0H
add bx,[6] ;bx= 6027H
push ax ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 5CCAH
push bx ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 6027H
pop ax ;sp= 00FEH ,ax= 6027H
pop bx ;sp= 0100H ,bx= 5CCAH
push [4] ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 30F0 内容是根据前面的mov bx,[4] ;bx= 30F0H 得到的因为都是[4]这个内存单元的数据
push [6] ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 2F37 内容是根据前面的add bx,[6] ;bx= 6027H 得到的,用结果减掉前面bx的值就得到内容了
我的一些操作见下图:
(2)
仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:F中的内容会发生改变?
书本给出的答案:
答:因为在debug使用T等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以,你的栈里就有些不是你操作的数据了。
这个问题后面会学到,不过这里也要有个印象,因为如果是在中断过程中压栈是栈越界的话,在windows下的命令窗口会强制关闭的。这个可能在你跟踪一些程序的时候会遇到,到时候有个思考方向。
自己的理解:当使用T命令引起中断,这其实也是一个异常(就是出错的意思);而一旦发生异常,CPU会调用某些程序,某些命令或机制去处理这些异常,或许也不是CPU主动的去调用,也可能是被动的要去调用执行。调用这些肯定要占用内存,刚好我们使用的内存段就在这;所以我们的内存段被占用了,从而发生了改变。
谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
小白刚学,不对的请各位大佬指正,谢谢 |
评分
-
查看全部评分
|