栈界限-保护模式栈边界的问题

问题描述

保护模式栈边界的问题
X86汇编语言-从实模式到保护模式 有这样一道题:
当前栈段描述符的B位是1,基地址为0X00700000,界限值为0XFFFE。那么,在32位模式下,该栈段的有效地址范围是0X00700000~( )。当ESP的内容为0XFFFFF002时,还能压入一个双字吗?为什么?当前栈段是向下扩展的。
我的答案是0X00700000+0XFFFFE*0X1000+0XFFF=0X1006FEFFF
去掉溢出位=0X006FEFFF
不过看到第二问时候我就知道我错了。可是书上又说,实际使用的栈段边界就是段内不允许访问的最低端偏移地址,所以又感觉我的是对的。栈段的边界真的搞不懂! 求给出具体的思路,最好带上备注,very thank you!

时间: 2024-11-02 07:52:21

栈界限-保护模式栈边界的问题的相关文章

Linux操作系统基础(四)保护模式内存管理(2)【转】

转自:http://blog.csdn.net/rosetta/article/details/8570681 Linux操作系统基础(四)保护模式内存管理(2) 转载请注明出处:http://blog.csdn.net/rosetta           本节主要讲:保护模式内存管理相关的物理地址空间,逻辑和线性地址空间,段选择符,段寄存器,段描述符. 物理地址空间          保护模式下,IA-32架构提供了一个4GBytes(2^32bytes)正常大小的物理寻址空间.处理器可以使用

汇编-在保护模式的无特权级变换的转移

问题描述 在保护模式的无特权级变换的转移 在保护模式下采用 JMP 和 RETF 指令进行任务内无特权级变换的转移.最好是能给出程序和说明,而不是到处引用,新手勿扰. 解决方案 用 JUMP.CALL.RETF等指令进行相应段的转移.在用到 CALL 指令时,使用堆栈,以使得在调用 CALL时,系统对 CALL 当前的程序运行点进行压栈保存,在遇到 RETF 返回指令时,进行弹栈返回. 解决方案二: (1)实模式下的初始化,包括对GDT和演示任务LDT的初始化,装载GDTR:(2)从实模式切换到

实模式/保护模式,GDT/LDT的含义

1.实模式.保护模式CPU启动时有两种模式,分别是:实模式 和 保护模式 实模式:不能使用多线程.不能实现权限分级.还不能访问20位以上地址线,也就是说只能访问1M内存(!!!)地址转换公式是:物理地址 = 线性地址 = 段地址*16 + 段偏移 保护模式:操作系统(system模块中的head.s程序)接管CPU后,会使CPU进入保护模式. 包括CPU权限分级. 多任务,内存分页等各种功能. 2.地址转换步骤 地址转换:查全GDT--> 查LDT --> 找到段(确定段基址) -->

深入理解计算机系统-之-内存寻址(二)--存储保护机制(CPU实模式与保护模式)

cpu的保护模式由来 分段机制 8086的诞生,标志着Intel 正式进入了x86时代,这是个多么具有纪念意义的日子:1978-6-8.同时,8086的诞生也是处理器内存寻址技术的第一次飞跃. 对于一根实际的.实实在在的.物理的.可看得见.摸得着的内存条而言,处理器把它当做8位一个字节的序列来管理和存取,每一个内存字节都有一个对应的地址,我们叫它物理地址,用地址可以表示的长度叫做寻址空间.而CPU是如何去访问内存单元里的数据的方式就叫做寻址. 8086得CPU在内存寻址方面第一次引入了一个非常重

保护模式汇编系列之一 - 初探保护模式

为了后面学习操作系统的需要,从今天开始我要研究x86的汇编了.所以我决定开始总结并连载x86的汇编系列,这是第一篇--初探保护模式. 我假定读者接触过16位的汇编语言,并理解汇编语言的基本概念.熟悉8086处理器采用的"段寄存器 * 16 + 偏移地址"的寻址方法. 我们从80386处理器入手.首先,到了80386时代,CPU有了三种运行模式,即实模式.保护模式和虚拟8086模式. 实模式指的是8086CPU的运行模式,不过这是后来提出的概念,在8086时代只有当时的运行模式,自然也就

嵌入式实时应用开发实战(原书第3版)》——3.3 保护模式架构

3.3 保护模式架构 在现代的Intel处理器中,实现保护模式存储器首先出现在80386中.它采用一个整32bit的地址对4GB的范围寻址.访问是受控的,因此一个存储块可能执行只读或读/写操作. 处理器可以工作在4个优先级中的一个,一个运行在最高优先级(0级)的程序可以做任何事情--执行I/O指令.启用或屏蔽中断.改变描述符表.低优先级会阻止程序执行可能有危险的操作.例如,一个字处理应用程序不能被中断标志干扰,因为前者是操作系统的工作. 所以操作系统运行在最高优先级,而应用程序代码通常运行在最低

如何实现Oracle DG最大保护模式

实现最大保护模式,可以先实现最大性能模式,然后再转换为最大保护模式. 一.三种保护模式 最大性能(maximize performance):这是data guard默认的保护模式.primay上的事务commit前不需要从standby上收到反馈信息,该模式在primary故障时可能丢失数据,但standby对primary的性能影响最小. 最大可用(maximize availability):在正常情况下,最大可用模式和最大保护模式一样:在standby不可用时,最大可用模式会自动降低成最

Oracle Data Guard的三种保护模式

Data Guard提供如下三种数据保护模式: 1)最高保护模式(Maximum Protection) 这里的"最大保护"是指最大限度的保护数据不丢失,也就是至少有一个standby和primary保持实时同步,但这样做的代价很大,即当一个事务提交时,不但要写到primary段的online redo log,还有写到至少一个standby的standby redo log.这样会有一个严重的问题,就是当standby出现故障或网络故障,导致日志无法同步时,primary数据库会被s

Oracle Data Guard学习(1) 三种保护模式

Data Guard提供如下三种数据保护模式: 1)最高保护模式(Maximum Protection) 这里的"最高保护"是指最大限度的保护数据不丢失,也就是至少有一个standby和 primary保持实时同步,但这样做的代价很大,因为只要当一个事务提交时,不但要写到primary段的 online redo log,还有写到至少一个standby的standby redo log.这样会有一个严重的问题,就是当 standby出现故障或网络故障,导致日志无法同步时,primary