碌碌无为1983 发表于 2011-12-15 09:42:20

汇编语言实验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 ?


lelering 发表于 2011-12-15 12:43:51

4也可以,写16应该是习惯性的吧,呵呵

lelering 发表于 2011-12-15 12:45:08

记得类似的问题论坛好像有人提过,楼主可以在论坛搜索下实验5,

♂"征òひ 发表于 2011-12-15 13:18:55

呵呵这个问题我想 可能是小甲鱼老师没有注意吧,照理说 sp应该是4如果是16的话 那么会覆盖后面12个字节的数据。当时我在看的时候也注意到这个问题了自己理解到了就行

~疯子 发表于 2011-12-15 13:39:45

sp是指向栈顶的指针如果sp是4的话那么它的栈顶就是4向栈中压入数据的话数据就存在 3210这几个字节
要是16的话原理是一样的   不知道这样说对不对我也是刚学

碌碌无为1983 发表于 2011-12-15 15:28:59

lelering 发表于 2011-12-15 12:45 static/image/common/back.gif
记得类似的问题论坛好像有人提过,楼主可以在论坛搜索下实验5,

早上搜的时候 网页直接报错,所以就发帖求助了!

碌碌无为1983 发表于 2011-12-15 15:30:21

♂"征òひ 发表于 2011-12-15 13:18 static/image/common/back.gif
呵呵这个问题我想 可能是小甲鱼老师没有注意吧,照理说 sp应该是4如果是16的话 那么会覆盖后面12个字 ...

同感,同感!

碌碌无为1983 发表于 2011-12-15 15:33:45

~疯子 发表于 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:16:21

本帖最后由 18555587 于 2011-12-15 16:20 编辑

定义了4个字节,会分配这个段为16个字节,如果你定义了17个字节,会分配这个段为32个字节,不知道这样说你能不能理解。
就是小于16个字节,会自动分配16个字节;如果你定义的字节大于16并且小于32,会自动分配32个字节。

~疯子 发表于 2011-12-15 16:39:12

不会的stack为两个字的大小栈顶指向的地址是16

~疯子 发表于 2011-12-15 16:40:10

本帖最后由 ~疯子 于 2011-12-15 16:40 编辑

这样不知道你能理解
stack这个只是定义栈大小
不是栈的位置
你也可用debug试下

lelering 发表于 2011-12-15 22:51:39

学习了,不好意思啊,楼主,没用心看,呵呵……

每天坚持点点点 发表于 2011-12-29 22:10:40

18555587 发表于 2011-12-15 16:16 static/image/common/back.gif
定义了4个字节,会分配这个段为16个字节,如果你定义了17个字节,会分配这个段为32个字节,不知道这样说你能 ...

{:5_108:}恩恩。。
页: [1]
查看完整版本: 汇编语言实验5(2) 疑问