汇编初级问题(有关栈的分配)

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

assume cs:codesg
codesg segment

dw 0123H, 0456H, 0789H, 0abcH, 0defH, 0135H, 0246H, 0369H
dw 0,0,0,0,0 ;5个字单元用作栈空间

start: mov ax,____
mov ss,ax
mov sp, ____
mov ax,0
mov ds,ax
mov bx,0
mov cx,8

s: push [bx]
________
add bx,2
loop s

mov ax,4c00H
int 21H

codesg ends
end start

我补完的程序是这样:
assume cs:codesg
codesg segment

dw 0123H, 0456H, 0789H, 0abcH, 0defH, 0135H, 0246H, 0369H
dw 0,0,0,0,0

start: mov ax,cs
mov ss,ax
mov sp,26
mov ax,0
mov ds,ax
mov bx,0
mov cx,8

s: push [bx]
pop cs:[bx]
add bx,2
loop s

mov ax,4c00H
int 21H

codesg ends
end start

debug可以完成功能。

但是我有一个疑问:
为什么要用5个字单元做栈空间??
用4个字作栈空间,程序改为:
……
dw 0,0,0,0
……
mov sp,24
……
我试了也完全可以实现功能。

那现在就又有一个问题:我认为程序中只需要一个字的栈空间作中转就可以实现数据的互换,为什么要设4个字的栈空间呢?

但是如果我把程序改为
……
dw 0,0,0
……
mov sp,22
……
(用三个字作栈空间)
得到的结果是最后的一个字的内容没有改变。

改为:
……
dw 0,0
……
mov sp,20
……
(用两个字作栈空间)
得到的结果是最后的两个字的内容没有改变。

……
dw 0
……
mov sp,18
……
(用一个字作栈空间)

得到的结果是最后的三个字的内容没有改变。
你可以试试。;)

为什么????


多谢!!
...全文
174 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
watermelon01 2004-06-12
  • 打赏
  • 举报
回复
偶也去调试了一下,
楼主用把sp改为24,也能实现,
是因为
原程序中计数器cx=8,sp=26
最后一次是把0369H的后一个字的内容改掉了,

所以你把sp改为24,正好是改到0369h为止!当然不错了
所以有楼主后边的疑问,
etmonitor 2004-06-12
  • 打赏
  • 举报
回复
对啊。
谁能告诉我为什么会有这样的结果?

我不是很明白;)
programfanny 2004-06-12
  • 打赏
  • 举报
回复
try
etmonitor 2004-06-10
  • 打赏
  • 举报
回复
顶一顶:)
etmonitor 2004-06-08
  • 打赏
  • 举报
回复
这个就是一个定义在程序中的栈空间。

dw 0123H, 0456H, 0789H, 0abcH, 0defH, 0135H, 0246H, 0369H
dw 0,0,0,0,0;这里是定义了5个字的栈空间用作中转。

我就是不明白为什么要用5个字空间作中转,我认为1个字空间就够了,因为每次都是push然后紧接着pop的。只会用到一个栈空间。

但如果定义<4个的栈空间,结果就如上面说的一样。

为什么???

多谢!!!
紫郢剑侠 2004-06-08
  • 打赏
  • 举报
回复
楼主的这个程序对理解栈的工作原理是很有意义的.

用调试程序跟踪看看..
xghost 2004-06-08
  • 打赏
  • 举报
回复
dw 0123H, 0456H, 0789H, 0abcH, 0defH, 0135H, 0246H, 0369H
dw 0,0,0,0,0 ;5个字单元用作栈空间

是数据段中的空间吧?栈空间不能这样定义吧?
xqlez 2004-06-08
  • 打赏
  • 举报
回复
debug工作时要用到栈,用TR吧。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧