汇编问题,王爽的《汇编语言》,包含多段的程序,sp设置问题

这个是第6章,实验5(2)的代码assume cs:code,ds:data,ss:stack data segment
dw
0123h,0456hdata ends
stack segment
dw
0,0stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
.........其中设置了栈段后,定义了段中的2个字型数据,为什么sp指向的是16呢?我的理解是sp指向的4,按我的理解是定义了栈空间为4个字节(0~3),所以sp执行的是4。。。。请问我的理解错在哪里~~~~求大侠指教~~~~~~~~

栈空间你虽然只开辟了4个字节
但是 因为为了系统效率
每个段(例如 数据段,代码段)必须是 16字节的整数倍(系统规定)
所以小于16个字节的会自动的变成16个字节
4个字节实际上就变成了 16个字节
30 就会变成 32
其实你在给 sp赋值的时候 赋4 也没有问题
不过剩下的12个字节被浪费了而已

详见
http://zhidao.baidu.com/question/425927848.html追问

但是我sp赋值4的时候程序执行出错啊~~~

追答

提示什么错误?
是用 mov sp,4 么?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-01
我觉的
你的理解是对的,设置栈段,系统会自动分配一段安全的空间,如果sp的值比这段空间长了,有可能出错,不过一般不会出错。还有,栈最好设长一点。
第2个回答  2013-04-03
sp是通过mov sp,16 确定的,不是自动识别栈区元素的
相似回答