https://www.cnblogs.com/zhuge2018/p/8466288.html

之前的理解不对

当然了 现在的理解也不太对。。 

CS、IP和PC寄存器

  CS寄存器和IP寄存器:

  首先强调一下,这两个寄存器非常非常重要,CS的全拼为“Code segment”,即代码段寄存器,对应于内存中的存放代码的内存区域,用来存放内存代码段区域的入口地址(段基址)。

  CPU在执行指令时,通过代码寄存器CS和指令指针寄存器IP(instruction Pointer)来确定要执行的下一条指令的内存地址。

  CS:IP 两个寄存器指示了CPU当前要读取的指令地址,计算方式一般为CS左移4位然后加上IP寄存器,作为地址去取内容。

  CPU的制造商会为这两个寄存器设置出厂初始值,这2个初始值,其实就决定了第一条执行指令的地址,这是所有程序的源头,没有这个初始值,多么复杂精妙的程序都没用,因为CPU压根就不会鸟你。随着X86的发展,第一条指令并不是一成不变的,

  (1)8086:CPU reset后CS寄存器的值为0xFFFF,IP寄存器的值为0,所以将CS左移4位+IP,换算出的物理地址为0xFFFF0,这个地址就是

        1MB往下16字节的位置。

  (2)80286:CPU reset之后CS的只为0xF000,IP的只为0xFFF0,算法同样是CS左移4位+IP,计算出的物理地址也是0xFFFF0

  (3)80386:到了386年代,一切都变了,此时CPU reset后CS的只为0xF000,但是CS除了段选择之外还有一个隐藏的基址寄存器,这个寄存

     器的值为0xFFFF0000,IP的值仍然为0xFFF0,此时的计算算法也不是上面的左移4位了,而是0xFFFF0000 + 0xFFF0 = 0xFFFFFFF0

     ,这个地址已经是很高的地址了,是4G往下16字节的位置。

  PC是非intel厂家对IP的称呼,也就是说PC起始跟CS:IP是一回事儿。

[转帖]CS、IP和PC寄存器的更多相关文章

  1. CS、IP和PC寄存器

    CS寄存器和IP寄存器: 首先强调一下,这两个寄存器非常非常重要,CS的全拼为“Code segment”,即代码段寄存器,对应于内存中的存放代码的内存区域,用来存放内存代码段区域的入口地址(段基址) ...

  2. JVM之PC寄存器(Program Counter Register)

    基本特性: 当前线程执行的字节码的行号指示器. Java虚拟机支持多个线程同时执行,每一个线程都有自己的pc寄存器. 任意时刻,一个线程都只会执行一个方法的代码,称为该线程的当前方法,对于非nativ ...

  3. PC寄存器的真实状态

    因为预取指令的关系,PC寄存器永远比当前的寄存器多两个指令,ARM模式为大8,Thumb模式为大2,这针对的是32bit的ARMv7的指令集 In ARM state, the value of th ...

  4. 大脸猫讲逆向之ARM汇编中PC寄存器详解

    i春秋作家:v4ever 近日,在研究一些开源native层hook方案的实现方式,并据此对ARM汇编层中容易出问题的一些地方做了整理,以便后来人能有从中有所收获并应用于现实问题中.当然,文中许多介绍 ...

  5. Verilog MIPS32 CPU(一)-- PC寄存器

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  6. Java虚拟机栈和PC寄存器

    PC Register介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息.CPU只有把数据装 ...

  7. JVM-运行时数据区之PC寄存器

    1.运行时数据区图 运行时数据区是在类加载完成后所经历的阶段,当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,执行引擎就 ...

  8. cs ip 通过jmp转移命令间接赋值。无法直接对其赋值。

    jmp 寄存器 命令 对IP间接赋值.

  9. Android 手机应用开发经验 之 通过Socket(TCP/IP)与PC通讯

    Android 是一个开源的手机操作系统平台,已经被非常多的开发者视作未来最有潜力的智能手机操作系统.而且,在很短的时间内就在Android Market上出现大量的第三方应用程序,供用户下载与使用, ...

随机推荐

  1. MYSQL基本操作(下)

    好了,废话不多说,接着开始Mysql剩下部分的小结了 Mysql 之 基础下 事务 事务:一系列将要发生或正在发生的连续操作,旨在保证数据操作的完整性.在事务开启之后,所有的操作都会被临时存储到事务日 ...

  2. c#基础知识之 Dataset 索引0没有值

    datatable绑定到dataGrieView,在刷新datatable的数据时,常会bug:索引0没有值或索引(int)x没有值 昨天弄了一个下午,发现bug原因: dataGridView中有数 ...

  3. 在Intellij IDEA中使用Maven的方式将项目导出为jar包

    前言:由于项目使用maven管理方式,所以在未发布版本的时候,就需要将项目打成jar包,供本地调试使用.注意在使用本地jar包的时候,需要将pom文件中相关jar包的依赖屏蔽,再将jar包加入项目中. ...

  4. Django-rest-framework 接口实现 Serializer 使用

    Django接口实现 DRF 使用 以下模块 实现 json数据 序列化 博客: https://www.cnblogs.com/liwenzhou/p/9959979.html Django RES ...

  5. Anaconda的下载与安装

    1.下载地点: 支持国产:https://mirrors.tuna.tsinghua.edu.cn/ Anaconda官网:https://www.anaconda.com/download/ 2.下 ...

  6. 【转】iOS弹幕库OCBarrage-如何hold住每秒5000条巨量弹幕

    最近公司做新需求, 原来用的老弹幕库, 已经无法满足需要. 迫不得已自己写了一套弹幕库OCBarrage. 这套弹幕库轻量, 可拓展, 高度自定义, 超高性能, 简单易上手. 无论哪家公司软件的性能绝 ...

  7. Linux:Day6(下) vim编辑器

    vim编辑器 简介: vi:Visual Interface,文本编辑器 文本:ASCII,Unicode 文本编辑种类: 行编辑器:sed 全屏编辑器:nano,vi VIM - Vi IMprov ...

  8. Arduino 操作OLED

    https://item.taobao.com/item.htm?_u=n1qf7bf5beef&id=562158712128 1.模块尺寸:35(L)*31(W)mm 2.电源电压:2.8 ...

  9. Luogu5221 Product

    Luogu5221 Product 求 \(\displaystyle\prod_{i=1}^n\prod_{j=1}^n{\frac{\operatorname{lcm}(i,\ j)}{\gcd( ...

  10. 【Atcoder hbpc C 183】1=0.999...

    Atcoder hbpc C 题意:给n个循环小数或者有限小数,问其中有多少个互不相同的. 思路:我的思路比较繁琐. 首先我们考虑分数化小数:假设原来的数是\(a.b(c)\),那么这个分数就是\(a ...