向栈段存了16个字节型的1, 查看却发现并不全是01
代码如下:assume cs: codesg, ss: stack
stack segment
db 16 dup(1)
stack ends
codesg segment
mov ax, 4c00h
int 21h
start:
mov ax, stack
mov ss, ax
mov sp, 16
mov ax, 0
push ax
ret
codesg ends
end start
明明向栈段存入了16个字节型的1,第一行为什么不全是01呢{:10_291:}
没看懂你的问题
和其它段相比,堆栈段具有特殊性,除了程序自己用,在进行 DOS 、BIOS 系统中断调用的时候也会被用到,而使用过后,堆栈中原来被静态初始化的内容就会被覆盖,所以,堆栈只能保护用户压栈的数据(也就是从 SP 到栈顶之间的数据),从 SP 到栈底的数据属于自由空间,是不被保护的,所以,堆栈段不适合用来存储静态数据。 jackz007 发表于 2022-7-5 21:44
和其它段相比,堆栈段具有特殊性,除了程序自己用,在进行 DOS 、BIOS 系统中断调用的时候也会被用 ...
可是我第13行设置了sp=16,那ss段0~f也就是图里面第一行的16个字节为什么不是16个1呢 本帖最后由 jackz007 于 2022-7-5 22:32 编辑
6YKT6ZKm5LqI 发表于 2022-7-5 21:51
可是我第13行设置了sp=16,那ss段0~f也就是图里面第一行的16个字节为什么不是16个1呢
我已经回答了你的问题:堆栈只能保护用户压栈的数据(也就是从 SP 到栈顶之间的数据),从 SP 到栈底的数据属于自由空间,是不被保护的
所谓"不被保护"的意思是,保存在这部分内存区域的数据存在被意外改变的风险。
页:
[1]