微笑向暖~ 发表于 2017-11-2 21:18:04

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

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

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



想问一下这个圈住的是什么意思?
我感觉这个只用设置一个栈段就好呀,先push再pop,为什么设置10个栈段,用意何在???
求大神指教!!!

丶忘却的年少o 发表于 2017-11-2 21:30:10

把栈里的数据拿出来,给cs:的这个地址,就不用通用寄存器当临时变量

兰陵月 发表于 2017-11-2 21:34:08

第二个处用了段前缀CS,表明这是以CS为段地址,偏移地址为的内存单元。

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

以下类推。

push
pop cs:
这两句连起来就是用内存单元0000:的值依次取代第一个伪指令dw后的8个字数据。(按低地址到高地址的次序)

微笑向暖~ 发表于 2017-11-2 21:35:31

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

我感觉这个只用设置一个栈段就好呀,先push再pop,为什么设置10个栈段,用意何在???
求大神指教!!!

微笑向暖~ 发表于 2017-11-2 21:36:49

兰陵月 发表于 2017-11-2 21:34
第二个处用了段前缀CS,表明这是以CS为段地址,偏移地址为的内存单元。

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

我感觉这个只用设置一个栈段就好呀,先push再pop,为什么设置10个栈段,用意何在???
求大神指教!!!

兰陵月 发表于 2017-11-2 21:37:48

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

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

段ss值=cs的值 SP指向36

微笑向暖~ 发表于 2017-11-2 22:15:01

兰陵月 发表于 2017-11-2 21:37
哪里有设置10个栈段,就一个啊

段ss值=cs的值 SP指向36

说错了,我是说栈段设置一个字节就OK了,为什么要设置10个字节,这么做的用意何在???

兰陵月 发表于 2017-11-2 22:22:21

本帖最后由 兰陵月 于 2017-11-2 22:26 编辑

微笑向暖~ 发表于 2017-11-2 22:15
说错了,我是说栈段设置一个字节就OK了,为什么要设置10个字节,这么做的用意何在???

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

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

所以,别把栈弄的那么小,一个人要是穿着很小一号的衣服,肯定也很难受的。{:10_258:}

微笑向暖~ 发表于 2017-11-2 23:31:01

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

醍醐灌顶,谢谢

兰陵月 发表于 2017-11-3 00:09:33

微笑向暖~ 发表于 2017-11-2 23:31
醍醐灌顶,谢谢

{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈...