鱼C论坛

 找回密码
 立即注册
查看: 5860|回复: 9

[已解决]下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈...

[复制链接]
发表于 2017-11-2 21:18:04 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 微笑向暖~ 于 2017-11-2 21:34 编辑

下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内。完成程序:

QQ截图20171102211503.png

想问一下这个圈住的是什么意思?
我感觉这个只用设置一个栈段就好呀,先push再pop,为什么设置10个栈段,用意何在???
求大神指教!!!
最佳答案
2017-11-2 22:22:21
本帖最后由 兰陵月 于 2017-11-2 22:26 编辑
微笑向暖~ 发表于 2017-11-2 22:15
说错了,我是说栈段设置一个字节就OK了,为什么要设置10个字节,这么做的用意何在???


第一,栈压入或者弹出都是以字为单位,不存在一个字节单元的问题。我理解你说的应该是一个最小存储单元的意思,也就是一个字。
第二,栈保持适当的空间,能减少很多错误的产生,有时候,栈里绝不仅仅是我们自己操作的那一部分内容,可能还有系统操作的相关内容。

最主要的用意还是在于让人养成良好的习惯,在设置栈大小的尽量适当设置,10个字节大小的栈已经是很小,虽然可以更少,但是又何必呢。我们不缺那点空间。照你说的只设置一个字大小的栈,压入一下就没了,再压就越界了。假如你后面还有要用到栈的地方呢,还有需要用栈保存较多数据的地方呢。

所以,别把栈弄的那么小,一个人要是穿着很小一号的衣服,肯定也很难受的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-2 21:30:10 | 显示全部楼层
把栈里的数据拿出来,给cs:[bx]的这个地址,就不用通用寄存器当临时变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-2 21:34:08 | 显示全部楼层
第二个[bx]处用了段前缀CS,表明这是以CS为段地址,偏移地址为[bx]的内存单元。

当第一次bx=0时,该内存单元指向的就是第一个dw处的位置,也就是数据“0123H”存放的地方。

以下类推。

push [bx]
pop cs:[bx]
这两句连起来就是用内存单元0000:[bx]的值依次取代第一个伪指令dw后的8个字数据。(按低地址到高地址的次序)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-2 21:35:31 | 显示全部楼层
丶忘却的年少o 发表于 2017-11-2 21:30
把栈里的数据拿出来,给cs:的这个地址,就不用通用寄存器当临时变量

我感觉这个只用设置一个栈段就好呀,先push再pop,为什么设置10个栈段,用意何在???
求大神指教!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-2 21:36:49 | 显示全部楼层
兰陵月 发表于 2017-11-2 21:34
第二个处用了段前缀CS,表明这是以CS为段地址,偏移地址为的内存单元。

当第一次bx=0时,该内存单元指向 ...

我感觉这个只用设置一个栈段就好呀,先push再pop,为什么设置10个栈段,用意何在???
求大神指教!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-2 21:37:48 | 显示全部楼层
微笑向暖~ 发表于 2017-11-2 21:35
我感觉这个只用设置一个栈段就好呀,先push再pop,为什么设置10个栈段,用意何在???
求大神指教!! ...

哪里有设置10个栈段,就一个啊

段ss值=cs的值 SP指向36
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-2 22:15:01 | 显示全部楼层
兰陵月 发表于 2017-11-2 21:37
哪里有设置10个栈段,就一个啊

段ss值=cs的值 SP指向36

说错了,我是说栈段设置一个字节就OK了,为什么要设置10个字节,这么做的用意何在???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-2 22:22:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 兰陵月 于 2017-11-2 22:26 编辑
微笑向暖~ 发表于 2017-11-2 22:15
说错了,我是说栈段设置一个字节就OK了,为什么要设置10个字节,这么做的用意何在???


第一,栈压入或者弹出都是以字为单位,不存在一个字节单元的问题。我理解你说的应该是一个最小存储单元的意思,也就是一个字。
第二,栈保持适当的空间,能减少很多错误的产生,有时候,栈里绝不仅仅是我们自己操作的那一部分内容,可能还有系统操作的相关内容。

最主要的用意还是在于让人养成良好的习惯,在设置栈大小的尽量适当设置,10个字节大小的栈已经是很小,虽然可以更少,但是又何必呢。我们不缺那点空间。照你说的只设置一个字大小的栈,压入一下就没了,再压就越界了。假如你后面还有要用到栈的地方呢,还有需要用栈保存较多数据的地方呢。

所以,别把栈弄的那么小,一个人要是穿着很小一号的衣服,肯定也很难受的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-2 23:31:01 | 显示全部楼层
兰陵月 发表于 2017-11-2 22:22
第一,栈压入或者弹出都是以字为单位,不存在一个字节单元的问题。我理解你说的应该是一个最小存储单元 ...

醍醐灌顶,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-3 00:09:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-16 23:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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