鱼C论坛

 找回密码
 立即注册
查看: 2739|回复: 3

百思不得起解!求大虾帮忙。。。(解决)

[复制链接]
发表于 2011-12-23 14:39:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 根号3 于 2011-12-25 14:05 编辑

题目是这样的:
把 程序提供的8个字单元顺序放到 DW 0,0,0,0,0,0,0,0 中,用上栈
程序开头制定这样:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0

我的程序如下:


assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0
start:
mov ax,codesg
mov ds,ax
mov ss,ax  ;  栈的段地址在AX 中
mov sp,0h
mov bx,10h
mov cx,8
s:pop [bx] ; 出栈,将SP指向的内存地址数据送到便宜地址为BX 的内存单元中!
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start

请各位大牛帮我看看! 我的实现方案完全OK! 完全正确 ! 为什么执行到  add bx,2 的时候 程序就死亡了?  
到底哪里错了???

DEBUG 的调试信息如下:

                               
登录/注册后可看大图





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-23 20:20:31 | 显示全部楼层
阿,记得几个月前曾经有网友遇到类似的问题...来!再贴一次当时的回答,呵呵.

汇编语言论坛asmedu.net上mess网友的解答:
在虚拟dos下,当sp过小,比如4,在执行t命令时会发生程序错误,
这个涉及到後面学习的中断和系统保护,把sp设置大些就行了。

"中断和系统保护"指的是你使用DEBUG调试的时候,栈里面会压入额外的东西,
所以,虽然说你的解法逻辑上行得通,运行时应该都会崩溃

另外,栈的机制是,推栈则SP减少,出栈则SP增加,
因此我们可以把SP视成是表示栈内空间大小的一个数值
你初始化SP时给0,那就等於说是预设栈已经满了

无论如何,这样的想法还是漫有创意的,值得鼓励,呵呵.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-25 13:48:52 | 显示全部楼层
是在太感谢了~~~~~~~~总算解除疑问~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-25 13:49:25 | 显示全部楼层
ytrfamli 发表于 2011-12-23 20:20
阿,记得几个月前曾经有网友遇到类似的问题...来!再贴一次当时的回答,呵呵.

汇编语言论坛asmedu.net上mes ...

是在太感谢了~~~~~~~~总算解除疑问~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 07:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表