汇编语言实验5(2) 疑问
本帖最后由 碌碌无为1983 于 2011-12-15 15:47 编辑assume cs:code ,ds:data,ss:stack
datasegment
dw 0123h,0456h
data ends
stack segment
dw 0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:
push ds:
pop ds:
pop ds:
mov ax,4c00h
int 21h
code ends
end start
问题:堆栈段
stack segment
dw 0,0
stack ends
初始化堆栈段时:
mov ax,stack
mov ss,ax
mov sp,16
dw 定义了两个字, 为何sp赋值16 而不是4 ?
4也可以,写16应该是习惯性的吧,呵呵 记得类似的问题论坛好像有人提过,楼主可以在论坛搜索下实验5, 呵呵这个问题我想 可能是小甲鱼老师没有注意吧,照理说 sp应该是4如果是16的话 那么会覆盖后面12个字节的数据。当时我在看的时候也注意到这个问题了自己理解到了就行 sp是指向栈顶的指针如果sp是4的话那么它的栈顶就是4向栈中压入数据的话数据就存在 3210这几个字节
要是16的话原理是一样的 不知道这样说对不对我也是刚学 lelering 发表于 2011-12-15 12:45 static/image/common/back.gif
记得类似的问题论坛好像有人提过,楼主可以在论坛搜索下实验5,
早上搜的时候 网页直接报错,所以就发帖求助了! ♂"征òひ 发表于 2011-12-15 13:18 static/image/common/back.gif
呵呵这个问题我想 可能是小甲鱼老师没有注意吧,照理说 sp应该是4如果是16的话 那么会覆盖后面12个字 ...
同感,同感! ~疯子 发表于 2011-12-15 13:39 static/image/common/back.gif
sp是指向栈顶的指针如果sp是4的话那么它的栈顶就是4向栈中压入数据的话数据就存在 3210这几个字节
...
sp是指向栈顶, 这没有错, 但是stack段只定义了两个字的内存, 要是想把数据压到我们指定的两个字的地址中的话, 那么就sp就应该是4, 要是sp=16的话, 那么压栈的时候就不是写到我们定义的那段空间上了!----个人认为! 本帖最后由 18555587 于 2011-12-15 16:20 编辑
定义了4个字节,会分配这个段为16个字节,如果你定义了17个字节,会分配这个段为32个字节,不知道这样说你能不能理解。
就是小于16个字节,会自动分配16个字节;如果你定义的字节大于16并且小于32,会自动分配32个字节。
不会的stack为两个字的大小栈顶指向的地址是16
本帖最后由 ~疯子 于 2011-12-15 16:40 编辑
这样不知道你能理解
stack这个只是定义栈大小
不是栈的位置
你也可用debug试下 学习了,不好意思啊,楼主,没用心看,呵呵…… 18555587 发表于 2011-12-15 16:16 static/image/common/back.gif
定义了4个字节,会分配这个段为16个字节,如果你定义了17个字节,会分配这个段为32个字节,不知道这样说你能 ...
{:5_108:}恩恩。。
页:
[1]