汇编里初始PUSH压栈的时候减2那不是在第三格了吗?
初始时地址是1000FH,压入前先减2再压入数据。1000FH-2=1000DH 他为什么会在1000EH这格呢,算出来在1000DH这格啊1000AH
1000BH
1000CH
1000DH 这格
1000EH
1000FH
任何时候SP栈顶指针指向栈顶元素。
初始时地址是1000FH
楼主是不是把1000F当成栈的第一个单元地址了?
其实这段栈的第一个单元地址是 1000E, 压两个数据进去, SP就跑到 1000DH了。
如果我的表达还是不清楚的话,可以参考王爽的《汇编语言》第二版60页,问题3.6
如果将10000H ~ 1000FH 当作栈, 初始状态栈是空的话, 那SP就是指向10010H。
反过来推算,楼主初始时地址是1000FH, 那栈的空间就是 XXXXX ~ 1000EH 了。 Mr.C 发表于 2012-3-2 21:37 static/image/common/back.gif
任何时候SP栈顶指针指向栈顶元素。
初始时地址是1000FH
我看小甲鱼的那个讲栈的那课,有指令没想通,原文:
mov ax,1000H
mov ss,ax
mov sp,2 (这句没想通)
mov ax,2266H
push ax
FFFE
FFFF
10000 66
10001 22
10002指向 栈顶
10003
不知道这么画是不是对的。
他指向10002
PUSH AX他又要减2又变成10000.
是不是这么个意思啊,我脑子已经被弄的模糊了。概念老是不能清晰
栈空间内 栈内没数据的时候 指针SP 指向栈顶下一个单元 你设定一个栈10000h--1000fh 那他的sp 就指向10010h所以当数据进去的时候他的SP-2 会指向1000e 而不是1000d 本帖最后由 莫名其妙 于 2012-3-2 22:43 编辑
乄不想※错过 发表于 2012-3-2 22:12 http://bbs.fishc.com/static/image/common/back.gif
我看小甲鱼的那个讲栈的那课,有指令没想通,原文:
mov ax,1000H
mov ss,ax
mov ax,1000H
mov ss,ax
mov sp,2 (这句没想通); 你算算数据是从0开始012不正好指向10002么 然后 sp -2 不就是10000么 10000开始的16位数据不就是 低八位66高八位22 你读起来不就是2266h么? sp-2 → 10000 66h 低
mov ax,2266H 10001 22h高
push ax sp→10002
栈段push 的方向是从下向上 数据段的存储方向是从上向下
初始状态栈是空的话,它的栈顶就是在1000f的上面一个,也就是10010H,因为栈顶指向10010时向下移两个内存单元,这样指针就知道1000E,也就是说0~f共有16个,这样就构成了两个内存单元的一循环,但栈中都充满时在操作时又从10010的栈顶开始覆盖处理。希望对你有用 乄不想※错过 发表于 2012-3-2 22:12 static/image/common/back.gif
我看小甲鱼的那个讲栈的那课,有指令没想通,原文:
mov ax,1000H
mov ss,ax
就像你去看电影,影院里只有情侣包厢,而且过道很窄,你和你老婆是最里面那个1号包厢,在你们进去之前,整个厅都没人,那么你想从里面拉人出来的话,你就只能从墙里面挖挖看了;当你俩坐进1号包厢了,别人再想从这个厅里面拉人的话,当然就指向你俩了 {:10_266:}{:10_266:} {:10_266:}{:10_266:} 学习学习
页:
[1]