栈段的问题
时间:2011-03-23
来源:互联网
利用栈,将程序中定义的数据逆向存放。
我在debug了几次。
程序指向的SP是从20H 一直往上 1E ,1C ,1A,18,16,14,12,10
在第二循环s0的时候 然后sp往上加10-12-14了
书上说是dw开辟了32个字的内存空间。为什么程序不往上继续?
Assembly code
assume cs:code code segment dw 123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0 start: mov ax,cs mov ss,ax mov sp,32 mov bx,0 mov cx,8 s: push cs:[bx] add bx,2 loop s mov bx,0 mov cx,8 s0: pop cs:[bx] add bx,2 loop s0 mov ax,4c00h int 21h code ends end start
作者: StillMiss 发布时间: 2011-03-23
发现栈跟其他内存段之间的交互看的迷糊。大侠们帮我解惑下吧!
作者: StillMiss 发布时间: 2011-03-23
pop操作一次,sp+=2;
程序开辟了32个字空间给栈,栈指针只能在这空间里push/pop,如果空间过小, 则会产生越界(上溢/下溢)
作者: masmaster 发布时间: 2011-03-23
push操作一次,sp-=2;
pop操作一次,sp+=2;
所以程序一直在dw定义的8个字空间做交换?
它是先把前面的dwdw 123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
push进后面的8个字空间,然后在把数据倒过来?但是操作的还是后面8个字空间?
这么理解对吗。
作者: StillMiss 发布时间: 2011-03-23
mov ss,ax
mov sp,32
的时候, 你查看一下栈段里是什么?
-dss:0
然后到
s: push cs:[bx]
的时候 , 你观察ss段以及sp的变化
。。。
到
s0: pop cs:[bx]
的时候, 你再观察ss段和sp的变化,
这是debug一个简单程序必备的步骤, 通过观察各个寄存器以及内存地址的变化,才能感性的理解汇编。
作者: masmaster 发布时间: 2011-03-23
debug到
mov ss,ax
mov sp,32
的时候, 你查看一下栈段里是什么?
-dss:0
然后到
s: push cs:[bx]
的时候 , 你观察ss段以及sp的变化
。。。
到
s0: pop cs:[bx]
的时候, 你再观察ss段和sp的变化,
这是debug一个简单程序必备的步骤, 通过观察各个寄存器以及内存地址的变化,才能感性的理解汇编……
说到点子上了!!!!!
作者: va_zaixuexi 发布时间: 2011-03-23
但是后面的8个字型值改变了。 为什么这个时候变了啊。这里就做了个sp=32的动作啊、
作者: StillMiss 发布时间: 2011-03-23
-d ss:0 查看内存里的内容 前面定义的8个字型数据全部没变
但是后面的8个字型值改变了。 为什么这个时候变了啊。这里就做了个sp=32的动作啊、
嗯, 那当然啦,你不是把CS里的两段dw的空间都给SS了嘛
作者: masmaster 发布时间: 2011-03-23
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28