大头 发表于 2012-11-12 23:16:50

老是搞不清栈顶是多少?

先上程序
assume cs:code ,ds:data,ss:stack

data segment
    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
这个程序里的栈顶为什么是16

大头 发表于 2012-11-12 23:18:23

两个字型数据应该是0~3 栈顶下一个是4

s0512 发表于 2012-11-12 23:20:14

mov sp,16 设置栈顶:)

大头 发表于 2012-11-12 23:25:01

为什么?怎么算的

pediyzhi 发表于 2012-11-13 01:00:16

RE: 老是搞不清栈顶是多少?

你使用了指令mov sp,16
sp指向栈顶

s0512 发表于 2012-11-13 07:54:29

大头 发表于 2012-11-12 23:25 static/image/common/back.gif
为什么?怎么算的

MOV SP,16大家通常叫这个为,初始化栈顶!!
SP指向栈顶嘛!!呵呵!

嘟嘟书 发表于 2012-11-13 14:30:14

栈顶下一个是4!!!!!!!!!

大头 发表于 2012-11-13 23:00:49

MOV SP,16大家通常叫这个为,初始化栈顶!!
SP指向栈顶嘛!!
还是不太明白是不是不足16就按16来

博丽灵梦 发表于 2012-11-15 19:46:46

你就当开始栈内有一个元素

然后+2既是空栈的栈顶

dw 0,0
占4字节,如果里边有一个元素那么栈顶就是2
那么2+2就是4.

同理,如果定义
dw 8 dup (0)
16个字节单元作为栈,你当里边有一个元素的时候栈顶指向0EH
那么0EH+2=10H

大头 发表于 2012-11-17 23:22:25

那为什么上面内个程序的栈顶是16呢

梦迁 发表于 2012-11-18 13:33:30

这是你自己设置的,表示堆栈从16开始的堆栈,也就是把16这个内存单元当做栈顶!我是这样认为的,对不对?
页: [1]
查看完整版本: 老是搞不清栈顶是多少?