逍遥 发表于 2012-3-31 20:39:17

谁帮忙解说解说啊!

assume cs:codesg
codesg 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-3-31 20:39:18

本帖最后由 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:已经存放了从拷贝过来的值,内存被覆盖了,也就是复制内存失败

所以栈空间尽量一些余地


wAterLoo 发表于 2012-3-31 23:10:51

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能取的最小值是多少!!!!

逍遥 发表于 2012-3-31 23:39:31

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是怎么来的那?

wAterLoo 发表于 2012-3-31 23:48:51

我跟你说,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

逍遥 发表于 2012-4-1 09:57:35

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个字节 就是这个栈的空间?定义栈空间是不是要比上面大些好

逍遥 发表于 2012-4-1 19:42:04

wAterLoo 发表于 2012-4-1 11:51 static/image/common/back.gif
SP的值不一定要24H,你用18H,16H等等都行的
但是呢,如果SP < 10h就不行,为什么呢?
加入设置SP =...

哦!懂了谢谢啦

和平年代 发表于 2012-4-2 14:32:05

哦哦 哦哦哦刷下屏   赚鱼币
页: [1]
查看完整版本: 谁帮忙解说解说啊!