. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->第一个程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  还是第三章实验三的问题  [待解决] 回复[ 4次 ]   点击[ 746次 ]  
huige
[帖 主]   [ 发表时间:2008-04-18 23:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-15 23:01
我也遇到了执行pop ax
出现错误的现象,也看了博友abcabc提出的问题以及相应的答复,虽然明白了一点,但我又遇到一个新问题:
1.就是我不用debug跟踪,直接c:\masm\masm\t1.exe(各人路径不同)却不报错(像书中例题那样直接返回到cmd中了),那到底是xp无声无息的把程序杀死了呢还是已经成功运行了?跟在debug下有什么不同?
这个问题我想了很久了。
------------------------------------------------------------------------------
2.顺便我还想问一下,有帖子里说到把sp的值改大一点就行,避免和一段内存太接近。但是执行pop指令不应该是先把栈顶内容取出,sp再+2吗,那就是说把sp改大不离下面的内存段更近了吗,怎么会可以跟踪了呢,况且我们根本不知道下面的内存段到底有多长,如何改sp呢?
哎......
我头都大了
huige
[第1楼]   [ 回复时间:2008-04-18 23:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-15 23:01
不好意思,我主题写错了,是第四章,看来真是大脑短路
mouse
[第2楼]   [ 回复时间:2008-04-19 09:59 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
看来楼主没有好好看“博友abcabc提出的问题以及相应的答复”o(∩_∩)o...

这个程序debug调试的时候之所以会出现“无效指令”的提示,并不是程序的原因,而是debug在调试程序的时调用了中断【中断使用栈来保存现场(这里就涉及到了ss/sp)】,当sp过小,压入数据过多的话,sp就会发生环绕,保护模式下的操作系统为了安全就将其杀死了。

一个程序一运行就应该是从第一条指令开始执行,一直执行至遇到mov ax,4c00h int 21h等程序返回中断来结束程序的。而我们用debug调试程序需要程序运行一条或几条语句就停下来,这就用到了中断,比如debug的t命令。

由于第四章的程序没有向屏幕下东西,也就是说程序运行过程中我们看不到屏幕的变化,等到第九章开始就有能运行并从屏幕看到结果了。不管能不难看到屏幕,debug都是无敌工具啊:-)一定要熟练才行啊~
huige
[第3楼]   [ 回复时间:2008-04-19 15:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-15 23:01
回复:[第2楼]
------------------
就是说直接执行程序成功即可,debug只起中断作用,至于栈指针(中断使用栈来保存现场)只需设计合理就行啦?
貌似明白了
xiaofeng176
[第4楼]   [ 回复时间:2008-04-19 17:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2008-04-17 11:21
那个以后再说吧,以后看中断或许就明白了
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved