怎么样都可以,你可以做个实验呀,定义80KB的数据,如
db 0ffffh dup (1)
db 1000 dup (1)
用debug的D命令查看那些超过64k的部分在什么地方。我没有做过,不确定能不能过编译器。
对于栈段,并不是说部分空间访问不到,假如设定栈顶为0ffffh,当前栈顶为0,在sp=0Ffffh的地方有着重要的数据,这时执行压栈操作,Sp=sp-2,将Ss:0fffeh处的数据覆盖掉,称为栈顶超界,但是压栈操作有效。在xp下发生栈定超界操作系统会报错,在纯dos下不会。
对于代码段,在没有任何跳转的情况下超过64k的部分将不会得到执行,因为ip指不到那。同样可以做个实验,
code segment
assume cs:code
db 0fffah dup (1);估计不一定能通过编译。
s:add ax,1;将从这里执行。
add ax,1;随便什么指令都行。
add ax,1;除了一些改变cs和ip的。
add ax,1;这里应该超过64k了吧。
code ends;注意查看ip和cs。
end s |