注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

编程学习

我的网上家园

 
 
 

日志

 
 

检测点11.2 16位模式与32位模式栈的操作  

2013-02-19 10:09:18|  分类: 《x86汇编语言: |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在 x86 处理器的实模式下,可以在栈中压入 16 位或者 32 位数据 (SP=SP-2 或 SP=SP-4)

在 x86 处理器的 32 位保护模式下,可以在栈中压入 16 位或者 32 位数据(ESP=ESP-2或ESP=ESP-4)

在 x86 处理器的 32 位保护模式下,如果栈段描述符的 B 位是 0,则使用 SP 寄存器。压入16 位数据时,是 SP 先减去 2;压入 32 位数据时,是 SP 先减去 4

在 x86 处理器的 32 位保护模式下,如果栈段描述符的 B 位是 1,则使用 ESP 寄存器。压入 16 位数据时,是 ESP 先减去 2;压入 32 位数据时,是 ESP 先减去 4

;以下是测试方法:
========================================================
16位实模式压栈测试(BOCHS):

压入字节:
push byte 0xaa  ;机器码6AAA
实际压栈操作时,push 0xffaa,假如 pop ax,则ax的值为 0xffaa

压入双字:
push dword 0xaaaaaaaa
假设SP的原值为0X7C00,压栈后变为0x7bfc.  SP=SP-4

测试SP与ESP:
mov esp,0xff0000
push word 0xaaaa

压栈后,ESP变为0XFFFFFE.也就是说16位模式下,ESP的高16位部分不相关.

32位保护模式下压栈测试(BOCHS):

push word 0xaaaa
压栈后,ESP=ESP-2;

push byte 0xaa ;机器码 6AAA
实际运行时,push 0xffffffaa
压栈后,ESP=ESP-4;

32位保护模式下 栈段B位为0的情况测试:
mov esp,0xff0000
push byte 0xaa
执行后,SP=SP-4 ESP的高16位没有变化.


  评论这张
 
阅读(60)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017