乄不想※错过 发表于 2012-3-2 21:07:39

汇编里初始PUSH压栈的时候减2那不是在第三格了吗?

初始时地址是1000FH,压入前先减2再压入数据。1000FH-2=1000DH 他为什么会在1000EH这格呢,算出来在1000DH这格啊


1000AH
1000BH
1000CH
1000DH 这格
1000EH
1000FH

Mr.C 发表于 2012-3-2 21:37:52

任何时候SP栈顶指针指向栈顶元素。

初始时地址是1000FH

楼主是不是把1000F当成栈的第一个单元地址了?

其实这段栈的第一个单元地址是 1000E, 压两个数据进去, SP就跑到 1000DH了。

如果我的表达还是不清楚的话,可以参考王爽的《汇编语言》第二版60页,问题3.6

如果将10000H ~ 1000FH 当作栈, 初始状态栈是空的话, 那SP就是指向10010H。

反过来推算,楼主初始时地址是1000FH, 那栈的空间就是 XXXXX ~ 1000EH 了。

乄不想※错过 发表于 2012-3-2 22:12:45

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.
是不是这么个意思啊,我脑子已经被弄的模糊了。概念老是不能清晰

莫名其妙 发表于 2012-3-2 22:28:26

栈空间内 栈内没数据的时候 指针SP 指向栈顶下一个单元   你设定一个栈10000h--1000fh 那他的sp 就指向10010h所以当数据进去的时候他的SP-2 会指向1000e 而不是1000d

莫名其妙 发表于 2012-3-2 22:30:58

本帖最后由 莫名其妙 于 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 的方向是从下向上    数据段的存储方向是从上向下

.静待彼岸 发表于 2012-3-2 22:39:50

初始状态栈是空的话,它的栈顶就是在1000f的上面一个,也就是10010H,因为栈顶指向10010时向下移两个内存单元,这样指针就知道1000E,也就是说0~f共有16个,这样就构成了两个内存单元的一循环,但栈中都充满时在操作时又从10010的栈顶开始覆盖处理。希望对你有用

风剑河 发表于 2012-3-8 23:55:23

乄不想※错过 发表于 2012-3-2 22:12 static/image/common/back.gif
我看小甲鱼的那个讲栈的那课,有指令没想通,原文:
mov ax,1000H
mov ss,ax


就像你去看电影,影院里只有情侣包厢,而且过道很窄,你和你老婆是最里面那个1号包厢,在你们进去之前,整个厅都没人,那么你想从里面拉人出来的话,你就只能从墙里面挖挖看了;当你俩坐进1号包厢了,别人再想从这个厅里面拉人的话,当然就指向你俩了

冲啊大笼包 发表于 2016-11-13 08:42:14

{:10_266:}{:10_266:}

冲啊大笼包 发表于 2016-11-13 08:42:50

{:10_266:}{:10_266:}

fishc1008 发表于 2016-12-31 12:07:39

学习学习
页: [1]
查看完整版本: 汇编里初始PUSH压栈的时候减2那不是在第三格了吗?