CPU的实模式
实模式是指CPU的寻址方式,寄存器大小,指令用法等,是用来反应CPU在该环境下如何工作的概念。
CPU的工作原理:CPU大体分为三个部分,控制、运算、存储单元。
控制单元是CPU的控制中心,大致由指令寄存器IR、指令译码器ID、操作控制器OC组成。程序被加载到内存后,指令指针寄存器IP指向内存中下一条待执行指令的地址,控制单元根据IP寄存器的指向,将位于内存中的指令逐个装载到指令寄存器中,指令译码器将位于指令寄存器中的指令按照指令格式解码,分析出操作码是什么,操作数在哪里之类的。
存储单元是指CPU内部的L1、L2缓存及寄存器,待处理的数据就存放在这些存储单元中,这里的数据是说指令中的操作数。
运算单元负责算术运算(加减乘除)和逻辑运算(比较,移位),它从控制单元那里接收命令(信号)并执行,它没有自主意识,只是个执行部件。
总结下CPU的工作原理:控制单元要取下一条待运行的指令,该指令的地址在程序计数器PC中,在 x86CPU上,程序计数器就是cs:ip。于是读取ip 寄存器后,将此地址送上地址总线,CPU根据此地址便得到了指令,并将其存入到指令寄存器IR中。这时候轮到指令译码器上场了,它根据指令格式检查指令寄存器中的指令,先确定操作码是什么,再检查操作数类型,若是在内存中,就将相应操作数从内存中取回放入自己的存储单元,若操作数是在寄存器中就直接用了,免了取操作数这一过程。操作码有了, 操作数也齐了,操作控制器给运算单元下令,开工,于是运算单元便真正开始执行指令了。ip寄存器的值被加上当前指令的大小,于是 ip 又指向了下一条指令的地址。接着控制单元又要取下一条指令了,流程回到了本段开头,CPU便开始了日复一日的循环,由于CPU特别不容易坏,所以唯一它停下来的条件就是停电。
实模式下CPU的内存寻址方式:寄存器寻址,立即数寻址,内存寻址。
寄存器寻址是最直接的寻址方式,直接从寄存器中拿数据即可。
立即数寻址是指操作数存在指令中,直接拿过来就能用,免去了找数的过程。
内存寻址又分为直接寻址(将操作数中的数字作为内存地址,取地址中的值为操作数),基址寻址(在操作数中用bx寄存器或寄存器作为地址的起始,地址的变化以它为基础),变址寻址(与基址寻址类似,只是寄存器变为si,di),基址变址寻址(基址寻址与变址寻址的结合)。
实模式下的ret
call,ret,jmp的原理都是修改寄存器CS,IP的值,将CPU导向新的位置。
ret的功能是在栈顶(ss:sp所指向的地址)弹出2字节内容来替换IP寄存器,还要维护栈顶指针,sp+2。
retf是从栈顶取4字节内容,栈顶2字节来替换IP寄存器,另外2字节替换CS寄存器,sp+4。
实模式下的call
call指令调用函数有四种方式:
16位实模式相对近调用:call所调用目标函数与当前代码段是同一个段,只给出偏移地址即可。给出目标函数的相对地址即可。
16位实模式间接绝对近调用:目标函数的地址没有直接给出,地址在寄存器或内存中的,不以立即数的形式出现。绝对是指目标函数的地址是绝对地址。
16位实模式直接绝对远调用:操作数以立即数形式给出。目标函数和当前地址不在同一段。
16位实模式间接绝对远调用:段基址和段内偏移地址在内存或寄存器中,但一个寄存器存不下,只支持内存寻址。
实模式下的jmp:
jmp与call的区别在于jmp只要更新CS:IP的值,不需要保存他们的值,跳到新地址后无法返回。一共五类转移方式。
16位实模式相对短转移:相对说明操作数是个相对增量,短指明操作数大小满足-128~127的范围。
16位实模式相对近转移:与短转移相比操作数范围增大了,由8位变为16位。
16位实模式间接绝对近转移:将立即数地址存在寄存器或内存中,不跨段。
16位实模式直接绝对远转移:跨段的需求。
16位实模式间接绝对远转移:操作数放内存中。
有条件转移:根据上一条指令对标志寄存器中标志位的影响,根据不同的影响有不同的转移指令决定是否转移。
CPU的实模式的更多相关文章
- 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...
- ASM:《X86汇编语言-从实模式到保护模式》第9章:实模式下中断机制和实时时钟
中断是处理器一个非常重要的工作机制.第9章是讲中断在实模式下如何工作,第17章是讲中断在保护模式下如何工作. ★PART1:外部硬件中断 外部硬件中断是通过两个信号线引入处理器内部的,这两条线分别叫N ...
- MIT 6.828 JOS学习笔记6. Appendix 1: 实模式(real mode)与保护模式(protected mode)
在我们阅读boot loader代码时,遇到了两个非常重要的概念,实模式(real mode)和保护模式(protected mode). 首先我们要知道这两种模式都是CPU的工作模式,实模式是早期C ...
- 【OS】实模式和保护模式区别及寻址方式
实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.csdn.NET/rosetta 64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别 ...
- ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述
★PART1:32位保护模式下任务的隔离和特权级保护 这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...
- ASM:《X86汇编语言-从实模式到保护模式》第11章:进入保护模式
★PART1:进入保护模式 1. 全局描述符表(Global Descriptor Table,GDT) 32位保护模式下,如果要使用一个段,必须先登记,登记的信息包括段的起始地址,段的 ...
- ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构
★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...
- “段寄存器”的故事[转](彻底搞清内存段/elf段/实模式保护模式以及段寄存器)
http://blog.csdn.net/michael2012zhao/article/details/5554023 一. 段寄存器的产生 段寄存器的产生源于Intel 8086 CPU体系结构中 ...
- Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- 全局描述符表(GDT)——《x86汇编语言:从实模式到保护模式》读书笔记09
在进入保护模式之前,我们先要学习一些基础知识.今天我们看一下全局描述符表(Global Descriptor Table, 简称GDT). 同实模式一样,在保护模式下,对内存的访问仍然使用段地址加偏移 ...
随机推荐
- 5分钟明白LangChain 的输出解析器和链
本文介绍 LangChain 的输出解析器OutputParser的使用,和基于LangChain的LCEL构建链. 1. 输出解析器OutputParser 1.1.为什么需要OutputParse ...
- golang 怎么获取kubernetes deployments的状态?
如果我们需要把k8s的信息展示为一个友好的web页面.那么deployment 的信息基本上是非常重要的(大部分的服务都是使用deployment部署). 从yaml 中我们能获取到很多关于deplo ...
- ubuntu docker 解决sudo权限问题
#如果还没有 docker group 就添加一个:$sudo groupadd docker#将用户加入该 group 内.然后退出并重新登录就生效啦.$sudo gpasswd -a ${USER ...
- ros2 foxy订阅话题问题
代码片段 这部分代码在galactic版本编译是OK的,可在foxy下编译就出了问题 TeleopPanel::TeleopPanel(QWidget* parent) : rviz_common:: ...
- css 文本换行的问题
今天测试再测试功能的时候无意间发现了这个css的bug,我们可以仔细看第一张图的最后两行,明明还没有到结尾就自动换到最后一行去了,按理说应该是撑满当前行再挤到下一行去,于是我就去看了下css的文本溢出 ...
- Vulkan Support Check and Dynamic Loader C++ code sample
很多时候不想静态依赖VulkanSDK所提供的静态库,因为会遇到一些过早的电脑不支持vulkan, 那么就需要使用动态加载vulkan-1.dll(for Windows)或libMoltenVK.d ...
- ABC346
D 枚举是哪一位相同,情况为 \(00\) 还是 \(11\),然后用前缀和和后缀和求一下即可. \(pre_{j,i}\) 表示第一位为 \(j\),前 \(i\) 位的每两个相同的字符均不相同的情 ...
- 通过 Helm Chart 部署 Easysearch
Easysearch 可以通过 Helm 快速部署了,快来看看吧! Easysearch 的 Chart 仓库地址在这里 https://helm.infinilabs.com. 使用 Helm 部署 ...
- Scrapy框架(十)--增量式爬虫
增量式爬虫 - 概念:监测网站数据更新的情况,只会爬取网站最新更新出来的数据. - 分析: - 指定一个起始url - 基于CrawlSpider获取其他页码链接 - 基于Rule将其他页码链接进行请 ...
- 比较 SpringSecurity 和 Shiro
相比 Spring Security, Shiro 在保持强大功能的同时,使用简单性和灵活性. SpringSecurity: 即使是一个一个简单的请求, 最少得经过它的 8 个Filter.Spri ...