发现一个问题,请各位解答(视频中的代码有错误?).
先上代码(取自小鱼老师的30课)按照视频上的代码建立16个字节的stack,程序执行到第二个循环s0的loop s0之前就直接退出了。
但是按照书上建立32个字节的stack就正常结束。 个人感觉建立16个字节的stack够用了,请各位解惑。
assume cs:code,ds:data,ss:stack
data segment
dw 1111h,2222h,3333h,4444h,5555h,6666h,7777h,8888h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov bx,0
mov cx,8
s:push
add bx,2
loop s
mov bx,0
mov cx,8
s0:pop
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
按照我们Mr.C大神的说法就是:
理论上转移多少数据,开僻多大的栈空间。
实际上,执行程序时,栈顶位置总是被系统存放一些CS,IP等数据。这些数据跟程序无关,但不留空间还不行。
好像说最少得留X+3个内存单元。所以课本里留的是X*2的栈空间。
留点余地吧,不然会报错,一般凑个16的倍数,比如要用10个单元,就设置16,用19个就设置32个单元,别怕浪费,不就几个字节空间吗,大内存时代了 谢谢两位了:)
页:
[1]