javanetwork 发表于 2011-8-12 23:03:46

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

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

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

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

mystack segment
      dw 0,0,0,0,0,0,0,0;栈
mystack ends

mycode segment;定义一个段,段名为mycode
      
      
beg:;标号
      mov bx,0
      mov cx,8
      mov ax,mydata
      mov ds,ax
      mov ax,mystack
      mov ss,ax
      mov sp,10H
         
fo1:push    
      inc bx
      inc bx
      loop fo1
      
      mov bx,0
      mov cx,8
fo2:pop
      inc bx
      inc bx
      loop fo2
   mov ax,4C00H;程序返回
   int 21H
mycode ends;结束段
end beg;结束程序,同时告诉编译器,程序入口的标号是beg



但是如果把
mov ss,ax
mov sp,10H
这两个指令颠倒一下,debug进去发现错误
用debug进去,发现 mov sp时,内存的数据会有10个字节被改掉,为什么?
还有push有时候也会这样,明明push两个字节的,sp前面10个字节也会变成乱七八糟的数据?

小甲鱼 发表于 2011-8-15 16:51:05

由于单步中断保护原因,设置ss和sp之间不产生单步中断,因此不能颠倒顺序。

张国祥 发表于 2011-8-15 16:54:30

话说,栈里的数据开始会有些不正常是很正常的,我也遇到过

parbbo 发表于 2011-8-15 18:41:01

为什么要颠倒呢?

/db_八神_/zq 发表于 2011-8-15 19:56:08

这个 设置ss和,会马上sp吧,中间不会断吧

??? 发表于 2011-8-16 13:05:24

调试了好一会,结果还是有点乱

javanetwork 发表于 2011-8-16 22:59:43

/db_八神_/zq 发表于 2011-8-15 19:56 static/image/common/back.gif
这个 设置ss和,会马上sp吧,中间不会断吧

先设置sp中间会断
先设置ss,再设置sp,两句一起跳过
页: [1]
查看完整版本: 只有ss sp设置顺序不同,结果却不一样