|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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 [bx]
- inc bx
- inc bx
- loop fo1
-
- mov bx,0
- mov cx,8
- fo2: pop [bx]
- 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个字节也会变成乱七八糟的数据?
|
|