鱼C论坛

 找回密码
 立即注册
查看: 2450|回复: 7

谁帮忙解说解说啊!

[复制链接]
发表于 2012-3-31 20:39:17 | 显示全部楼层 |阅读模式
1鱼币
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

最佳答案

查看完整内容

SP的值不一定要24H,你用18H,16H等等都行的 但是呢,如果SP < 10h 就不行,为什么呢? 加入设置SP = 0DH 你想想,前面有代码 push pop cs: add bx,2 当SP = 0DH,push 后, sp = SP - 2 = 0BH, 然后的会存入 cs:[0b] 然后 pop cs:, 这是 sp = sp + 2 = 0cH 对吧, 随着bx的增加,当bx = 0DH的时候,push 后,sp = sp - 2 = obh 而前面cs:[0b]已经存放了从[0b]拷贝过来的值,内存被覆盖了,也就是复制内存失败 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-31 20:39:18 | 显示全部楼层
本帖最后由 wAterLoo 于 2012-4-1 12:15 编辑

SP的值不一定要24H,你用18H,16H等等都行的
但是呢,如果SP < 10h  就不行,为什么呢?
加入设置SP = 0DH
你想想,前面有代码
push [bx]
pop   cs:[bx]
add bx,2
当SP = 0DH,push [bx] 后, sp = SP - 2 = 0BH, 然后[bx]的会存入 cs:[0b]
然后 pop cs:[bx], 这是 sp = sp + 2 = 0cH 对吧,
随着bx的增加,当bx = 0DH的时候,push [bx]后,sp = sp - 2 = obh
而前面cs:[0b]已经存放了从[0b]拷贝过来的值,内存被覆盖了,也就是复制内存失败

所以栈空间尽量一些余地


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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能取的最小值是多少!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-31 23:39:31 | 显示全部楼层
wAterLoo 发表于 2012-3-31 23:10
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是怎么来的那?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-1 09:57:35 | 显示全部楼层
wAterLoo 发表于 2012-3-31 23:48
我跟你说,sp设为8H铁定是错的,sp可以设置的比24H小,但是绝对比8H大
前面0123h,0456h,0789h,0abch,0defh ...

这把0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 定义了八个字节型是吧,它所占内存空间的大小为16个字节是吧, 下面定义栈空间只能定大些是吧,还是它们本来就是在一个栈里面 所以上边是16个字节加上下面定义的20个字节 就是这个栈的空间?定义栈空间是不是要比上面大些好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-1 19:42:04 | 显示全部楼层
wAterLoo 发表于 2012-4-1 11:51
SP的值不一定要24H,你用18H,16H等等都行的
但是呢,如果SP < 10h  就不行,为什么呢?
加入设置SP =  ...

哦!懂了  谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-2 14:32:05 | 显示全部楼层
哦哦 哦哦哦刷下屏   赚鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 10:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表