汇编初级问题(有关栈的分配)
下面的程序实现依次用内存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
……
(用一个字作栈空间)
得到的结果是最后的三个字的内容没有改变。
你可以试试。;)
为什么????
多谢!!