实模式是指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的实模式的更多相关文章

  1. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  2. ASM:《X86汇编语言-从实模式到保护模式》第9章:实模式下中断机制和实时时钟

    中断是处理器一个非常重要的工作机制.第9章是讲中断在实模式下如何工作,第17章是讲中断在保护模式下如何工作. ★PART1:外部硬件中断 外部硬件中断是通过两个信号线引入处理器内部的,这两条线分别叫N ...

  3. MIT 6.828 JOS学习笔记6. Appendix 1: 实模式(real mode)与保护模式(protected mode)

    在我们阅读boot loader代码时,遇到了两个非常重要的概念,实模式(real mode)和保护模式(protected mode). 首先我们要知道这两种模式都是CPU的工作模式,实模式是早期C ...

  4. 【OS】实模式和保护模式区别及寻址方式

    实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.csdn.NET/rosetta 64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别 ...

  5. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

  6. ASM:《X86汇编语言-从实模式到保护模式》第11章:进入保护模式

    ★PART1:进入保护模式 1. 全局描述符表(Global Descriptor Table,GDT)        32位保护模式下,如果要使用一个段,必须先登记,登记的信息包括段的起始地址,段的 ...

  7. ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构

    ★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

  8. “段寄存器”的故事[转](彻底搞清内存段/elf段/实模式保护模式以及段寄存器)

    http://blog.csdn.net/michael2012zhao/article/details/5554023 一. 段寄存器的产生 段寄存器的产生源于Intel 8086 CPU体系结构中 ...

  9. Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  10. 全局描述符表(GDT)——《x86汇编语言:从实模式到保护模式》读书笔记09

    在进入保护模式之前,我们先要学习一些基础知识.今天我们看一下全局描述符表(Global Descriptor Table, 简称GDT). 同实模式一样,在保护模式下,对内存的访问仍然使用段地址加偏移 ...

随机推荐

  1. 4G EPS 中的各种唯一标识

    目录 文章目录 目录 电信运营商的唯一标识:PLMN.MCC 与 MNC 移动用户的唯一标识:IMSI.MSIN 与 MSISDN/MDN 移动用户的唯一临时标识:TMSI.GUTI 与 GUMMEI ...

  2. WPF使用Shape实现复杂线条动画

    看到巧用 CSS/SVG 实现复杂线条光效动画的文章,便也想尝试用WPF的Shape配合动画实现同样的效果.ChokCoco大佬的文章中介绍了基于SVG的线条动画效果和通过角向渐变配合 MASK 实现 ...

  3. Istio(六):Istio弹性(超时&重试)和故障注入

    目录 一.模块概览 二.系统环境 三.弹性(超时&重试) 3.1 弹性 四.故障注入 4.1 故障注入 五.实战:观察错误注入 5.1 在 Grafana.Zipkin 和 Kiali 中观察 ...

  4. apache 的下载与配置

    一,下载: 打开apache的官方网站,http://www.apache.org/   拉到网站的最下面,如图所示: 点击HTTP Server链接,对 Apache httpd 2.4.43 Re ...

  5. 【U8】快速获取u8单据的类型key值

    win10下 打开 写字板,直接搜索栏搜索写字板打开. 登录u8,找到需要的单据,以基础档案存货为例,打开存货档案界面. 按住键盘ctrl+shift,鼠标左键单据单据上的某个按钮,以新增按钮为例,单 ...

  6. win10找回Ubuntu启动项(非EasyBCD)

    最近想对装在电脑上的Ubuntu进行更新,但是之前在BIOS里改了引导系统的文件,导致找不到Ubuntu启动项,EasyBCD程序也不起作用(整块硬盘Windows分区都是GPT,改BIOS也没什么用 ...

  7. P1036 [NOIP2002 普及组] 选数

    传送锚点:https://www.luogu.com.cn/problem/P1036 题目描述 已知 \(n\) 个整数 \(x_1,x_2,\cdots,x_n\),以及 \(1\) 个整数 \( ...

  8. Java21新特性-虚拟线程

    虚拟线程是轻量级线程(类似于 Go 中的 "协程(Goroutine)"),可以减少编写.维护和调度高吞吐量并发应用程序的工作量. 线程是可供调度的最小处理单元,它与其他类似的处理 ...

  9. Java遍历Map集合的方法

    Java中遍历Map集合的常用方式主要有以下几种: 1.使用keySet()方法遍历 遍历Map的key集合,然后通过key获取value. Map<String, Integer> ma ...

  10. navicat 如何调整查询区域字体大小

    Navicat是一套快速.可靠和全面的数据库管理工具,专门用于简化数据库管理和降低管理成本.Navicat图形界面直观,提供简便的管理方法,设计和操作MySQL.MariaDB.SQL Server. ...