Intel架构的基本知识

字节序

字节序根据存储的方向不同, 分为大端字节序(big-endian) 和 小端字节序(little-endian)

大端字节序(big-endian): 低字节存储在起始地址

小端字节序(little-endian): 高字节存储在起始地址

Intel架构的基本知识_第1张图片

获得当前主机字节序

#include 

using namespace std;

int main()
{
    union {
            short s;
            char c[sizeof(short)];
    } un;

    un.s = 0x0102;

    if(sizeof(short) == 2)
    {
        if(un.c[0] == 1 && un.c[1] == 2)
        {
            cout << "大端字节序" << endl;
        } else if(un.c[0] == 2 && un.c[1] == 1)
        {
            cout << "小端字节序" << endl;
        } else 
        {
            cout << "unknown" << endl;
        }
    } else
    {
        cout << "sizeof(short) = " << sizeof(short) << endl;
    }

    return 0;
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

32位环境中的寄存器

Intel架构的基本知识_第2张图片

通用寄存器的用途
通用寄存器 用途
EAX 操作数的运算, 结果
EBX 指向数据段(DS)寄存器中数据的指针
ECX 字符串操作或循环的计数器
EDX 输入输出指针
ESI 指向数据段(DS)寄存器中某个数据的指针, 或者字符串操作中字符串的复制源(source)
EDI 指向数据段(ES)寄存器中某个数据的指针, 或者字符串操作中字符串的复制目的地(destination)
ESP 栈指针(堆栈段SS)
EBP 指向栈上数据的指针(堆栈段)

通用寄存器的用途不限于上述, 只作为参考

段寄存器的用途
段寄存器 用途
CS 代码段
DS 数据段
堆栈段
ES 数据段
FS 数据段
GS 数据段

程序代码放在代码段, 数据放在数据段, 程序所用的栈放在堆栈段中

EFLAGS寄存器

包含状态标志(status flag), 控制标志(control flag), 系统标志(system flag)

Intel架构的基本知识_第3张图片

EIP寄存器

用来存储CPU 32位指令指针

CPU每次执行控制器读取完,相应的就再通过EIP寄存器去进行下一次的读取指令工作。每次CPU读取指令到指令缓冲区,相应的EIP寄存器的值增加,增加大小的就是读取指令的字节大小

其他寄存器

控制寄存器(CR0 ~ CR4)

GDRT, IDTR, TR, LDTR

调试寄存器(DR0/DR1/DR2/DR3/DR6/DR7)

内存类型范围寄存器 MTRR, MSR(Model Specific Register) 寄存器

机器检查寄存器(Machine check Register)

性能监控寄存器(Performance Monitoring Counter)

Intel架构的基本知识_第4张图片

Intel架构的基本知识_第5张图片

64位环境中的寄存器

对比32位寄存器, 64位支持的地址空间为264

Intel架构的基本知识_第6张图片

64位模式下, 通用寄存器在处理32位操作时, 使用EAX/EBX/ECX/EDX/EDI/ESI/EBP/R8D ~ R15D 寄存器

处理64位操作时, 使用RAX/RBX/RCX/RDX/RDI/RSI/RBP/RSP/R8~R15

R8D~R15D / R8 ~ R15 是8个新的通用寄存器

RIP寄存器64位指令寄存器

栈指针和控制寄存器都可以扩展64位,并增加CR8寄存器

调试寄存器可以扩展到64位

GDTR, IDTR可以扩展到10字节

LDTR, TR可以扩展到64位

地址

**物理地址:**CPU通过内存总线访问到的地址

32位模式下最大物理地址64GB(236)

64位模式下最大物理地址: intel(240), AMD(248)

操作系统原理——内存的分段、分页和平坦模型:区别与发展

平坦内存模型

线性地址空间: 单一, 平坦的连续地址空间

Intel架构的基本知识_第7张图片

linux采用这种内存模型

64位模式采用平坦模式, 不能使用分段式内存模型

分段式内存模型

内存看做段(segment)的独立地址空间集合

通过段选择器和偏移量组成逻辑地址访问段内地址

32位下最多指定16383个段, 各段最大大小为232字节

Intel架构的基本知识_第8张图片

数据类型

基本数据类型:

字节(8bit), 字(16bit), 双字(32bit), 四字(64bit), 双字(128bit)

Intel架构的基本知识_第9张图片

整数

整数数据类型:

支持 无符号整数 和 符号整数

无符号整数范围: 0 ~ 最大整数(2n - 1)

符号整数范围: 负数(-2n-1) ~ 正数(2n-1-1)

浮点数据类型:

单精度浮点数(32位) 精度: 24bit

双精度浮点数(64位) 精度: 53bit

扩展精度浮点数(80位) 精度: 64bit

你可能感兴趣的:(c++)