首页
社区
课程
招聘
[求助]386进栈push的问题?
发表于: 2009-8-11 11:12 4920

[求助]386进栈push的问题?

2009-8-11 11:12
4920
8086是将sp减2后的值进栈.
386是将进栈操作前的SP(ESP)值进栈.这句话什么意思?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
应该是这个意思。
                  PUSH SP 之前          PUSH SP 之后
                      +------+             +------+
                 FFE8 | 1234 |        FFE8 | 1234 |
                      +------+             +------+
                 FFEA | 1234 |    SP->FFEA | FFEA |
(8086)                +------+             +------+
             SP->FFEC | 1234 |        FFEC | 1234 |
                      +------+             +------+
                 FFEE | 1234 |        FFEE | 1234 |
                      +------+             +------+

                      +------+             +------+
                 FFE8 | 1234 |        FFE8 | 1234 |
(P6 family,           +------+             +------+
Pentium,        FFEA | 1234 |    SP->FFEA | FFEC |
Intel 486            +------+             +------+
/386/286)   SP->FFEC | 1234 |        FFEC | 1234 |
                      +------+             +------+
                 FFEE | 1234 |        FFEE | 1234 |
                      +------+             +------+
2009-8-11 11:38
0
雪    币: 8209
活跃值: (4528)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
3
8086是16位机,堆栈指针用sp
80386是32位机,可以工作在16位模式下堆栈指针用sp,也可以工作在32位模式下堆栈指针用esp
2009-8-11 13:43
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
搞明白push操作的机制就OK了,建议去看Intel手册。Vol 2B

说简单些,就是CPU在执行push指令的时候的动作,实际上是分成两步的:
1. sub (e)sp, n
2. mov [sp], xxx

在CPU压栈的时候,都是要先把SP减去一个值,然后才向栈指针寄存器指向的内存写东西的。只有这样,你才能通过栈指针访问到栈顶的内容。

对于栈的操作,不存在一次压一1个,3个字节的情况,CPU会自动进行内存边界对齐。上面的sub的是esp还是sp,取决于你的代码是16还是32位的,16位的就是sp,32位的就是esp,如果是sp,当然就会一次减去2个字节,32位的,一次就减去4个字节。
2009-8-11 15:31
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=puretears;669522]搞明白push操作的机制就OK了,建议去看Intel手册。Vol 2B

说简单些,就是CPU在执行push指令的时候的动作,实际上是分成两步的:
1. sub (e)sp, n
2. mov [sp], xxx

在CPU压栈的时候,都是要先把SP减去一个值,然后才向栈指针寄存器指向的...[/QUOTE]

很正确,顺路走过。
2009-8-12 02:40
0
雪    币: 401
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
呵呵 我也学习了
2009-8-13 15:21
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习中............
2009-8-13 17:56
0
游客
登录 | 注册 方可回帖
返回
//