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  当前执行的指令。
  • 相关阅读:
    任正非:所有公司都是管理第一,技术第二(没有一流管理,领先的技术就会退化;有一流管理,即使技术二流也会进步)
    QuickReport的OnNeedData的触发情况
    Quickreport不用数据字段,如何实现多页打印?
    我要继续做开发吗(对18个问题,全部都是肯定!)
    一台主机,至多可以开启多少个线程
    BenchmarkDotNet
    开发资源
    WebSocket
    TCP
    “在什么时候学习编程才合适?”
  • 原文地址:https://www.cnblogs.com/frankyou/p/8631983.html
Copyright © 2011-2022 走看看