鱼C论坛

 找回密码
 立即注册
查看: 3278|回复: 6

只有ss sp设置顺序不同,结果却不一样

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

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

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

x
本帖最后由 weixianlang 于 2011-8-13 08:18 编辑

完整的程序:assume cs:mycode,ds:mydata,ss:mystack

  1. mydata segment
  2.       dw 0123H,0234H,4232H,125CH,0180H,0245H,2348H,4545H;数据
  3. mydata ends

  4. mystack segment
  5.       dw 0,0,0,0,0,0,0,0;栈
  6. mystack ends

  7. mycode segment;定义一个段,段名为mycode
  8.       
  9.       
  10. beg:;标号
  11.       mov bx,0
  12.       mov cx,8
  13.       mov ax,mydata
  14.       mov ds,ax
  15.       mov ax,mystack
  16.       mov ss,ax
  17.       mov sp,10H
  18.            
  19. fo1:  push [bx]   
  20.       inc bx
  21.       inc bx
  22.       loop fo1
  23.       
  24.       mov bx,0
  25.       mov cx,8
  26. fo2:  pop [bx]
  27.       inc bx
  28.       inc bx
  29.       loop fo2
  30.    mov ax,4C00H;程序返回
  31.    int 21H
  32. mycode ends;结束段
  33. end beg;结束程序,同时告诉编译器,程序入口的标号是beg
复制代码



但是如果把
mov ss,ax
mov sp,10H
这两个指令颠倒一下,debug进去发现错误
用debug进去,发现 mov sp时,内存的数据会有10个字节被改掉,为什么?
还有push有时候也会这样,明明push两个字节的,sp前面10个字节也会变成乱七八糟的数据?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-15 16:51:05 | 显示全部楼层
由于单步中断保护原因,设置ss和sp之间不产生单步中断,因此不能颠倒顺序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-15 16:54:30 | 显示全部楼层
话说,栈里的数据开始会有些不正常是很正常的,我也遇到过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-15 18:41:01 | 显示全部楼层
为什么要颠倒呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-15 19:56:08 | 显示全部楼层
这个 设置ss和,会马上sp吧,中间不会断吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-16 13:05:24 | 显示全部楼层
调试了好一会,结果还是有点乱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-16 22:59:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-26 08:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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