zoukankan      html  css  js  c++  java
  • CS 寄存器 和 IP 寄存器

    下面将要介绍的是一组非常非常重要的寄存器,即 CS:IP 。

    CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中  CS 为代码段寄存器,而   IP 为指令指针寄存器

    什么叫做指示了 CPU 当前将要读取的指令呢?在 8086  CPU 中,为什么  CPU  会自动的执行指令呢?

    这些指令肯定是存放在内存中的,但是  CPU  怎么知道这些指令存放在内存的那个位置呢?

    比如,我有下面的两条指令要执行:

        MOV AX,1234H
        MOV BX,AX

    而假设这两条指令在内存中存放为:

    image

    很显然, 1000H:0000H 指向的是  MOV  AX,1234H  的首地址,

    如果 CPU 要读取到我的指令的话,很显然,必须要知道地址  1000H:0000H ,

    然后  CPU  就可以根据这个首地址,将汇编指令  MOV  AX,1234H  所对应的机器码读入到  CPU  的指令寄存器中

    最后便可以在  CPU  中进行处理了。

    但关键是   CPU  如何知道我的  1000H:0000H  这个首地址?其实这就需要使用到  CS:IP  这个寄存器组了 。

    当我们运行一个可执行文件时,很明显,我们需要另外一个程序来将这个可执行文件加载到内存当中,

    关于这个加载可执行文件的程序,我们在这里不管他,点一下即可,

    一般是通过操作系统的外壳程序(也就是传说中的  Shell  程序),

    Shell  将可执行文件加载到内存中以后,就会设置  CPU  中的两个寄存器,即设置  CS:IP  两个寄存器指向可执行文件的起始地址,此后  CPU  便从这个起始地址开始读取内存中的指令,并且执行。

    比如我们在写汇编程序时,通常会使用  START  标记,其实这个标记就是用来标记起始地址的,

    当将一个汇编程序编译,连接成可执行文件以后,再通过操作系统的  Shell  程序将可执行文件加载到内存中以后,

    这个  START  所标记处的地址就是整个可执行文件的起始地址了 。

    也就是说,当一个可执行文件加载到内存中以后,CS:IP  两个寄存器便指向了这个可执行文件的起始地址,

    然后  CPU  就可以从这个起始地址开始往下读取指令,

    当读取完指令后,CS:IP  将会自动的改变,基本上是改变  IP ,从而指向下一条要读取的指令,这样就可以执行这个可执行文件了 。

    最后再对  CS:IP  总结一下:

    1. 你想让  CPU  执行哪行指令,你就让  CS:IP  指向保存有指令的那块内存即可。
    2. 任何时候,CS:IP  指向的地址中的内容都是  CPU  当前执行的指令。
  • 相关阅读:
    Windows 8实例教程系列 开篇
    qt 开发发布于 windeploy.exe
    qt qoci 测试验证
    vmware vmx 版本不兼容
    qt oracle
    vc qt dll
    QOCIDriver unable to create environment
    qoci 编译完 放置位置 具体根据情况
    calling 'lastError' with incomplete return type 'QSqlError' qsqlquer
    Hbase 操作工具类
  • 原文地址:https://www.cnblogs.com/frankyou/p/8631983.html
Copyright © 2011-2022 走看看