首页
社区
课程
招聘
[求助]堆栈宽度问题
发表于: 2009-9-15 20:08 4569

[求助]堆栈宽度问题

2009-9-15 20:08
4569
如果代码段是16位的,堆栈段也是16位,那么每次堆栈操作都是2字节对齐,这个很好理解。但为什么堆栈段是32位时,只要代码段是16位的,依然是2字节呢?
比如,push ds,call offset,我调试时发现它们是这样的。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
    堆栈段是32位表明两点: 一它的段限是32位的,二压栈时它使用32位栈指针。16位代码PUSH DS相当于SUB ESP ESP-2; MOV WORD PTR SS:[ESP],DS. 如果是16位栈, 则PUSH DS相当于SUB SP,2; MOV WORD PTR SS:[SP],DS(只是示意,16位代码不支持此条指针)。代码段决定默认操作数大小,而不影响栈指针大小。像WINDOWS 的32位模式,代码段/栈段都是32位,但也可以压入16位的数据,而不是一定是32位的对齐的,只是作为编程,强烈建议32位对齐。
2009-9-17 20:18
0
雪    币: 205
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哦,明白了。谢谢。
2009-10-12 11:13
0
游客
登录 | 注册 方可回帖
返回
//