我认为这是从第二版改到第三版时的一个错误,请看第二版中的截图:
注意截图中红框部分,第二版中是定义了16个字单元,即32个字节,再加上前面的8个字数据占据的16个字节,共计是48个字节,正好是十六进制的30h,所以程序中设置堆栈的初始栈顶指针应该是30h。第三版中应该是把前面定义修改成了8个字单元,即16个字节,而后面程序中设置堆栈时没有修改,后面的修改成20h就对了。
dw 声明的是字型数据,都是双字节的。单字节的叫字节数据。这段注释只是dw 16个0这一行代码的注释,并不包括前面那一行dw 0123h...的内容。也就是说cs:0到cs:F存储的是2301,5604....的内容,cs:10到cs:2F存储的才是00000000....的内容。可以理解为第二行是 dw 0h,0h,0h,...,这样就明白了。就是说栈多申请了cs:10到cs:1F,这八个字型数据,16个字节数据。多申请的没有用到。
如果设置成30h, 那不就超过栈的长度了,
--楼主认为,栈的长度是多少?