zoukankan      html  css  js  c++  java
  • 汇编语言-X86处理器架构-32位x86处理器

    32位x86处理器架构

        包括了intel IA-32系列成员和所有32位AMD处理器。

      1 操作模式

        x86处理器有三个主要模式分别是:保护模式,实地址模式和系统管理模式以及一个保护模式的特殊模式的子模式:虚拟8086模式。

        引入一个定义:程序在运行被分配的内存称之为段。

        1.1 实地址模式(Real-Address Mode)

          处理器最纯正的模式,可以访问任何段内存。是最初intel处理器的编程环境,可以切换到其它模式

        1.2 保护模式(Protected Mode)

          保护模式也就是处理器的原生状态,可以采用所有指令和特征。程序在运行被分配的内存称为段,但是处理器不允许程序使用除了段以外的其它内存。相当于对实地址模式起了一个保护作用,只能操作当前程序。

        1.3 虚拟8086模式(Virtual-8086 Mode)

          是在保护模式下直接执行实地址模式的软件。如MS-DOS程序。相当于在保护模式下执行实地址模式的软件来模拟实地址模式操作。

        1.4 系统管理模式(System Management Mode)

          SMM模式常常是由制造商来实现,他们为特定的系统设置而定制处理器。比如:电源管理和系统安全等。

     

      2 基本执行环境

        2.1 地址空间

          在32位保护模式下,一个任务和和程序最大可以寻址4GB的线性地址空间(3个1024和4相乘的结果就是4GB),从P6处理器开始,通过扩展物理寻址的技术可以使得被寻址的物理内存空间增加到64GB。反之实地址模式只能寻址1MB空间。

        

        2.2 基本程序执行-寄存器

          寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,存放n位二进制代码的寄存器,需用n个触发器来构成。

          寄存器直接位于CPU内的高速存储位置,访问速度快,远高于传统存储器。

     

             寄存器总总览(包含了8个通用寄存器,6个16位段寄存器,一个状态处理器EFLAGS和一个指令指针寄存器)

            

            2.2.1 通用寄存器

              通常用来处理算术运算和数据传递。部分童永刚寄存器可以划分成16位和8位寄存器来处理

     

    32位 16位 高8位 低8位
    EAX AX AH AL
    EBX BX BH BL
    ECX CX CH CL
    EDX DX DH DL

              其它通用寄存器只能分为32位和16位

    32位 16位
    ESI SI
    EDI DI
    EBP BP
    ESP SP

              某些通用寄存器有特殊用法

    寄存器 用法
    EAX 加减乘除默认用EAX,常被称为累加寄存器
    ECX

    CPU通常把ECX作为循环计数器

    ESP 用于寻址堆栈数据
    ESI和EDI 用于高速存储器传输指令
    EBP 高级语言通过EBP来引用堆栈中的函数参数和局部变量

            2.2.2段寄存器

              实模式中:

                16位段寄存器表示预先分配的内存区域基址

              保护模式中:

                段寄存器中存放的是段描述符表指针,还有一个堆栈段存放的是局部变量和函数参数

          

            2.2.3 指令指针

              指针指令寄存器(EIP)包含下一条将要执行的指令的地址。

            2.2.4  EFLAGS寄存器

              EFLAGS(flags)寄存器用来控制CPU和反应CPU的操作。

            2.2.5  控制标志位

              控制标志位控制CPU的操作

            2.2.5  状态标志位

              状态标志位反映CPU执行的算术和逻辑操作结果。包括:溢出位、符号位、零标志位、辅助进位标志位、奇偶标志位和进位标志位。

        

    进位标志位CF  无符号运算太大是需要设置
    溢出标志位OF 有符号运算过大过小都需要设置 
    符号标志位SF 产生负结果的时候需要设置 
    零标志位ZF 结果为零时需要设置 
    辅助进位标志位AC 产生进位的时候需要设置 
    奇偶效验标志位PF  最低有效字节包含偶数个1时设置,否则清楚。通常用来错误检测检查数据是否被修改和损坏

            

          3 MMX寄存器

            8个64位寄存器支持SIMD(单指令,多数据)的特殊寄存器。MMX指令对MMX寄存器的数据值进行并行操作

          4 XMM寄存器

            x86包括了8个128位XMM寄存器,用于SIMD流扩展指令集

            浮点单元:

              浮点单元(FPU,floating-point unit)执行高速浮点算术运算。FPU有八个浮点数据寄存器,3个控制寄存器和两个指针寄存器。

              80位数据寄存器

            

    ST(0)
    ST(1)
    ST(2)
    ST(3)
    ST(4)
    ST(5)
    ST(6)
    ST(7)

              48位指针寄存器:FPU指令指针和FPU数据指针

              16位控制寄存器:标识寄存器,控制寄存器和状态寄存器

        

      3 x86内存管理:

         x96处理器按照32位x86处理器的操作模式来管理内存。

        实地址模式中

          只能访问1MB内存,地址从00000H到FFFFFH,处理器一次只能运行一个程序。但是可以采用中断来处理外围设备的请求。应用程序被允许可以访问内存的任何地址。Windows95和98可以引导进入这种模式

        保护模式中

          处理器可以同时运行多个程序,每个进程分配总共的4GB内存。每个进行有自己的运行空间,禁止访问其他进程地址。

        虚拟8086中

          在保护模式下创建一个带有1MB地址空间的虚拟8086机器来模拟运行实地址模式的80x86计算机。

        

     

  • 相关阅读:
    Tomcat日志、项目中的log4j日志、e.printStackTrace()——我的日志最后到底跑哪去了?
    MySQL中有关TIMESTAMP和DATETIME的总结
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
    @RequestBody和@RequestParam区别
    Synchronized的jvm实现
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/beautiful7/p/13386641.html
Copyright © 2011-2022 走看看