鱼C论坛

 找回密码
 立即注册
查看: 3264|回复: 12

各位看看 这个代码 咋回事???

[复制链接]
发表于 2011-8-8 21:19:07 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 weixianlang 于 2011-8-9 09:54 编辑
  1. assume cs:code
  2. a segment
  3. dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
  4. a ends
  5. b segment
  6. dw 0,0,0,0,0,0,0
  7. b ends
  8. code segment
  9. start:mov ax, b
  10. mov ss, ax
  11. mov sp, 7
  12. mov ax, a
  13. mov ds, ax

  14. mov bx, 0
  15. mov cx, 8
  16. s: push [bx]
  17. add bx, 2
  18. loop s
  19. mov ax, 4c00h
  20. int 21h
  21. code ends
  22. end start
复制代码

每次运行到mov ss, ax都是自动退出 啊  

这是实验5上面的一个题

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-8 23:28:21 | 显示全部楼层
本帖最后由 NWm 于 2011-8-8 23:30 编辑

我找到错误了,错误在第11行,sp应该为偶数,至于为何要为偶数,我有如下猜想:
当sp为奇数时无法对齐栈底 所以系统在检查之后发现错误所以退出我用几组数据尝试了一下,都是奇数运行到此自动退出,而偶数能继续运行
但我没有其他的论据支持了,希望其他的高手能够给出一个更合理的解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-8 23:37:17 | 显示全部楼层
你这个代码是乱写,循环8次,栈却只有6个位置,哪剩下的2个去哪了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-8 23:38:14 | 显示全部楼层
我又进行了进一步的探索,我发现当sp取9以下(包括9)的奇数时会出现这种情况,而当sp取一个大的奇数的时候程序并不会自动终止,这让我又有了一个猜想:
可能是在debug程序中调试我们编写的程序时要用到堆栈,而太短的奇数的堆栈导致堆栈溢出而不平衡从而引发致命异常从而导致程序崩溃
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-8 23:47:25 | 显示全部楼层
这个和sp一点关心都没有,因为还没调到sp设置就跳出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-9 00:04:39 | 显示全部楼层
实验显示sp不能为奇数,因为栈都是以2位的形式递减
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-9 13:02:24 | 显示全部楼层
应该是mov sp, 14吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-9 13:08:00 | 显示全部楼层
那实验5的代码  该怎么写啊   谁能让我参考下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-9 13:54:59 | 显示全部楼层
好吧  我非常承认 我错了   不过这次 看看这个代码怎么样啊
  1. assume cs:code
  2. a segment
  3.         dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
  4. a ends
  5. b segment
  6.         dw 0,0,0,0,0,0,0,0
  7. b ends
  8. code segment
  9. start:mov ax, b
  10.       mov ss, ax
  11.           mov sp, 22
  12.           mov ax, a
  13.           mov ds, ax
  14.           
  15.           mov bx, 0
  16.           mov cx, 8
  17.          s: push [bx]
  18.           add bx, 2
  19.           loop s
  20. mov ax, 4c00h
  21. int 21h
  22. code ends
  23. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-9 14:11:51 | 显示全部楼层
你似乎不会使用栈,sp总是在乱指。你还是仔细研究研究吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-9 14:21:30 | 显示全部楼层
嘿嘿  体谅下  我是新手  劳烦说下  栈那里不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-9 14:24:44 | 显示全部楼层
你b标识号作为栈段,你定义了8个双字节数,哪你有多少个栈帧?空栈时栈顶应该在哪偏移呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-9 20:34:47 | 显示全部楼层
你这一番话我几乎看不懂 唉    学习啊:(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-8 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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