IA-32(Intel Architecture 32位)寄存器

news/2024/11/17 6:45:10/

IA-32 寄存器类型

Basic program execution registers
x87 FPU registers
MMX registers
XMM registers
Control registers
Memory management registers
Debug registers
Memory management registers
Debug registers
Memory type range registers
Machine specific registers
Machine check register

基本程序运行寄存器(Basic program execution registers)

基本程序运行寄存器由4类寄存器组成。

  • 通用寄存器(General Purpose Registers,32位,8个)
  • 段寄存器(Segment Registers,16位,6个)
  • 程序状态与控制寄存器(Program Status and Control Register,32位,1个)
  • 指令指针寄存器(Instruction Pointer,32位,1个)

通用寄存器

通用寄存器是一种通用型的寄存器,用于传送和暂存数据,也可参与算数逻辑运算,并保存计算结果。

寄存器名称32位16位高8位低8位主要用途
EAX累加器EAXAXAHAL针对操作数和结果数据
EBX基址寄存器EBXBXBHBLDS段中的数据指针
ECX计数器ECXCXCHCL字符串和循环操作
EDX数据寄存器EDXDXDHDLI/O指针
EBP扩展基址指针寄存器EBPBP--SS段中栈内数据指针
ESI源变址寄存器ESISI--字符串操作源指针
EDI字符串操作目标指针EDIDI--字符串操作目标寄存器
ESP栈指针寄存器ESPSP--栈指针寄存器

段寄存器

IA-32 的保护模式中,段是一种内存保护技术,它把内存划分为多个区段,并为每个区段赋予起始地址、范围、访问权限等,以保护内存。此外同分页技术一起用于将虚拟内存变更为实际物理内存。段内存记录在 SDT(Segment Descriptor Table,段描述符表)中,而段寄存器就持有这些 SDT 的索引。

段寄存器共6个,每个寄存器大小为16位。每个段寄存器指向的描述符与虚拟内存结合,形成一个线性地址。

寄存器名称用途
CSCode Segment代码段寄存器
SSStack Segment栈段寄存器
DSData Segment数据段寄存器
ESExtra ( Data ) Segment附加(数据)段寄存器
FSData Segment数据段寄存器
GSData Segment数据段寄存器

程序状态与控制寄存器(EFLAGS)

IA-32 中标志寄存器的名称为 EFLAGS,其大小为 4 个字节(32位),由原来的 16 位 FLAGS 寄存器扩展而来。EFLAGS 寄存器的每位都有其意义。

位数Status名称全名含义
0SCFCarry Flag无符号整数溢出时为1,否则为0
2SPFParity Flag
4SAFAuxiliary Carry Flag
6SZFZero Flag若运算结果为 0,则其值为1,否则为0
7SSFSign Flag
8XTFTrap Flag
9XIFInterrupt Enable Flag
10CDFDirection Flag
11SOFOverflow Flag有符号整数溢出时被设置为1.此外,MSB(Most Significant Bit,最高有效位)也被设置为1
12-13XIOPLI/O Privilege Level
14XNTNested Task
16XRFResume Flag
17XVMVirtual-8086 Mode
18XACAlignment Check
19XVIFVirtual Interrupt Flag
20XVIPVirtual Interupt Pending
21XIDID Flag

Status Describe:
S: Indicates a Status Flag
C: Indicates a Control Flag
X: Indicates a System Flag

注: 没有写出的为保留位,没有使用

指令指针寄存器(EIP)

指令指针寄存器 EIP(Instruction Pointer),用于指向下一条要执行的指令。


http://www.ppmy.cn/news/892711.html

相关文章

fast lio测试

fast lio2代码编译及运行 编译 fast lio2仓库地址 一. 安装依赖 ubuntu18ros环境下,pcl和eigen可默认使用ros自带版本,所以只需安装 livox驱动包 livox_ros_driver即可 安装livox驱动(github.com/Livox-SDK/livox_ros_driver),需要先安装驱动依赖的S…

web服务器/中间件漏洞系列4:apache漏洞汇总

apache 简介: Apache 是世界使用排名第一的Web 服务器软件。它可以运行在几乎所有广泛使用的 计算机平台上,由于其 跨平台 和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将 Perl/ Py…

Intel 系统级架构概述

文章目录 前言一、IA-32 架构 和 Intel 64 架构 简述二、系统级架构概述2.1 Global and Local Descriptor Tables2.1.1 32-bit modes2.1.2 IA-32e Mode 2.2 System Segments, Segment Descriptors, and Gates2.2.1 32-bit modes2.2.2 IA-32e Mode 2.3 Task-State Segments and …

ESP32-WROOM-32E,WIFI基本功能实现,采坑经验

ESP32-WROOM-32E,WIFI基本功能实现,采坑经验 用的示例代码,路径 D:\esp-idf\examples\wifi\getting_started\station 。 看官网教程,路径https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/get-started/index.html#get-start…

platformio中arduino框架下esp32 flash信息修改问题

问题描述: 购买的esp32-wroom-32E的flash明明是16MB,但是为什么在烧录的时候只能显示1MB? 回答: 在platformio中选择板子的时候,给的模板默认是4MB的模板。4MB又会被分成5个区。下图是flash的一个分区表,用arduino…

ESP32 Arduino框架入门(二)外部中断和TouchPad(电容触摸引脚)

接ESP32 Arduino框架入门(一)介绍和工程创建(8条消息) ESP32 Arduino框架入门(一)介绍和工程创建_长谷深风灯盏的博客-CSDN博客_arduino的esp32软件系统架构 接下来继续介绍ESP32-Wroom-32E的外部引脚、中断、定时器等部分…

ESP32-WROOM-32E,MQTT报错mqtt_message_receive:transport_read() error:errno=128

ESP32-WROOM-32E,MQTT使用采坑经验之transport_read() error:errno128 配置MQTT的是 esp_mqtt_client_config_t 结构体,里面包含了MQTT的信息,可根据具体场景配置。 问题 使用MQTT建立连接后,不收发数据,每隔35秒会有如下报错&…

【Intel Parallel编译器(icc icpc ifort)Linux-centos7系统安装配置】

(toc) Intel Parallel编译器(icc icpc ifort)Linux系统安装配置 本篇文章主要讲解在linux系统centos7.5/centos7.9版本中,Intel编译器的安装、环境导入、并行库调用以及在不同centos版本中安装时缺少32位库的解决方案等内容。 一、★Intel编译器定义 Intel Paralle…