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寄存器

    https://www.cnblogs.com/zhuge2018/p/8466288.html 之前的理解不对 当然了 现在的理解也不太对.. CS.IP和PC寄存器 CS寄存器和IP寄存器: 首先 ...

  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. the current differences between MyISAM and InnoDB storage engines

    原文地址:https://stackoverflow.com/questions/47680213/what-are-the-current-differences-between-myisam-an ...

  2. tomcat8_java1.8 基础镜像

    需要解决的越来越多, 基础镜像中 添加 cronolog功能,用于切割catalina.out 日志. 思路是: cephfs 挂载在node节点, crontab 删除 几天的tomcaat 日志. ...

  3. solidity学习-cryptoPunks为实例

    在这里使用cryptoPunks为实例来进行solidity的介绍,一般这些内容理解了就能够进行相对简单的智能合约的编写了,同时会添加一些我认为也十分重要的内容学习文档为http://solidity ...

  4. day10,11练习

    1.执行Python脚本两种方式? 略 2.简述位.字节关系? 8位一个字节 3.简述ASCII,Unicode,utf-8,gbk关系? ascii unicode utf8 4.请写出李杰分别用u ...

  5. python中.py和.pyw文件的区别

    :本文为博主原创文章,未经博主允许不得转载. 以下是摘录自百度问题的答案: 严格来说,它们之间的不同就只有一个:视窗运行它们的时候调用不同的执行档案. 视窗用 python.exe 运行 .py ,用 ...

  6. ubuntu apt-get 出现NO_PUBKEY的解决方案

    https://blog.csdn.net/u014221090/article/details/77524682

  7. Robust Real-time Object Detection学习

    健壮实时对象检测(robust real-time object detection) 高检测率(high detection rates), 一种新的图像表示方法,叫做积分图(integral im ...

  8. 大功率DC-DC方案

    三端稳压芯片只适合于小功率器件的直流稳压(电流<1A):如7805,这个电路是可以应付大多数情况的: 如果出现大功率的器件就需要采用新的稳压方案,可以参考下图方案: https://www.bi ...

  9. ubuntu root 密码是随机的! root权限下设置共享文件夹

    一.Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输入命令 sudo passwd,然后输入当前用户的密码,enter, 二.终端会提示我们输入新的密码并确 ...

  10. lazy-load-img.js 源码 学习笔记及原理说明

    lazy-load-img.js? 1. 什么鬼? 一个轻量级的图片懒加载,我个人很是喜欢. 2. 有什么优势? 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图 ...