一个令我疑惑的地方,求助
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,4567h
data ends
stack segment
dw 0h,0h
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov bx,data
mov ds,bx
mov sp,10h
mov bx,0
mov cx,2
flag:push ds:[bx]
add bx,2
loop flag
mov cx,2
flag0:pop ds:[bx]
add bx,2
loop flag0
mov ax,4c00h
int 21h
code ends
end start
sp为什么不是5h,栈里面不是4个字节大的空间吗,栈为空不就是mov sp,5h吗?
[解决办法]
应该是8字节吧,两个DW
[解决办法]
目的是利用栈空间交换数据段中的两数据的位置?mov sp,4,设置栈顶ss:sp指向stack:4。plag0前面还要bx清零
[解决办法]
你不能这样算,要预留空间,stack在这种情况下不是光你一个人用
[解决办法]
首先,sp的变化是以2为单位的,即每次要么加2、要么减2,所以sp的值不会是奇数。
其次,程序中定义的堆栈段只有两个字——4个字节的空间,而8086的分段概念中最小的段是16字节,所以,最终该程序实际的分配的堆栈段是16B(因为有效的段地址都是16的倍数,即****0H),即使后面的空间你用不到。因此,程序中“MOV SP,10h”,设定栈的深度为16B。