谁帮忙解说解说啊!
assume cs:codesgcodesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0
start:
mov ax,cs
mov ss,ax
mov sp,24h 这为什么栈顶指向24h那?是怎么算的那?
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
本文来自:鱼C工作室<a href=http://www.fishc.com>详细出处参考:http://www.fishc.com/a/kehouti/_huibianyuyan_/839.html
本帖最后由 wAterLoo 于 2012-4-1 12:15 编辑
逍遥 发表于 2012-4-1 09:57 static/image/common/back.gif
这把0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 定义了八个字节型是吧,它所占内存空间的大小为1 ...
SP的值不一定要24H,你用18H,16H等等都行的
但是呢,如果SP < 10h就不行,为什么呢?
加入设置SP = 0DH
你想想,前面有代码
push
pop cs:
add bx,2
当SP = 0DH,push 后, sp = SP - 2 = 0BH, 然后的会存入 cs:
然后 pop cs:, 这是 sp = sp + 2 = 0cH 对吧,
随着bx的增加,当bx = 0DH的时候,push 后,sp = sp - 2 = obh
而前面cs:已经存放了从拷贝过来的值,内存被覆盖了,也就是复制内存失败
所以栈空间尽量一些余地
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0 10个字节做栈空间
题目要我们把SP指向最后一个0的后一个字节,这是一个隐藏的条件,你可能没注意到
这里一个有18个字,也就是36个字节,相当于16进制的24H
其实SP不一定要是24H的,还可以取更小的值的,你可以思考思考SP能取的最小值是多少!!!! wAterLoo 发表于 2012-3-31 23:10 static/image/common/back.gif
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0 10个字节做栈空间
题目要我 ...
还是不是很懂,也属是你理解错了我的意思,10个字节空间做栈的, 代码里面 “mov sp,24H" 是指向栈顶的下面的是吧。这24H数是怎么来的 我看有的代码dw 0,0,0,0,0,0,0,0 设定栈空间 后面代码 ”mov sp,8H” 这8H是怎么来的那? 我跟你说,sp设为8H铁定是错的,sp可以设置的比24H小,但是绝对比8H大
前面0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 就已经有16个字节,
你把SP设为8H,也就是指向0def 这个字单元,如果你连这点都不明白,我想下面的也不用看了
这里的24H 就是
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 16字节 = 10H
0,0,0,0,0,0,0,0,0,0 20 字节 = 14H
10H + 14H = 24H
wAterLoo 发表于 2012-3-31 23:48 static/image/common/back.gif
我跟你说,sp设为8H铁定是错的,sp可以设置的比24H小,但是绝对比8H大
前面0123h,0456h,0789h,0abch,0defh ...
这把0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 定义了八个字节型是吧,它所占内存空间的大小为16个字节是吧, 下面定义栈空间只能定大些是吧,还是它们本来就是在一个栈里面 所以上边是16个字节加上下面定义的20个字节 就是这个栈的空间?定义栈空间是不是要比上面大些好 wAterLoo 发表于 2012-4-1 11:51 static/image/common/back.gif
SP的值不一定要24H,你用18H,16H等等都行的
但是呢,如果SP < 10h就不行,为什么呢?
加入设置SP =...
哦!懂了谢谢啦 哦哦 哦哦哦刷下屏 赚鱼币
页:
[1]