01 【哈工大_操作系统】x86_64 常用寄存器大全

在学习CPU底层技术的时候,难免会接触到各式各样的寄存器。尤其是在使用汇编语言编写操作系统时,寄存器更是必不可少的。因此,这篇文章将来详细聊聊 x86_64 架构中的所有寄存器,按照从 常用->不常用 的顺序来进行介绍。

首先,什么是寄存器?

寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果以及一些CPU运行需要的信息。

从操作系统使用的角度出发, 按照寄存器类型,可以分成如下几类:

16 _bits_:
	数据寄存器(可拆为两个独立的 8 _bits_ 寄存器)
	段寄存器
	变址寄存器
	指针寄存器
32 _bits_:
	通用寄存器
	控制寄存器
	...

一、16 bits(实模式)

8086 CPU 中寄存器总共为 14 个 16 bits 寄存器。

  • 数据寄存器
寄存器用途
AX累加寄存器,AH:AL,可分别访问高八位、低八位。
通常作为临时寄存器,为段寄存器赋值;或可用于汇编乘(MUL)除(DIV)法临时寄存器。
BX基地址寄存器,BH:BL,可分别访问高八位、低八位。
通常作为存储器指针。
CX计数器寄存器,CH:CL,可分别访问高八位、低八位。
通常作为串操作或循环控制中的计数器
DX数据寄存器,DH:DL,可分别访问高八位、低八位。
与 AX 配合用于字乘/除法。
  • 段寄存器
寄存器用途
CS代码段段地址寄存器
通常与代码段寄存器CS组合为CS:IP作为代码段地址,指向下一条要执行的指令
DS数据段段地址寄存器
通常与变址寄存器SI组合为DS:SI,作为串操作源地址
SS堆栈段段地址寄存器
通常与堆栈指针寄存器SP组合为SS:SP来使用
ES附加段段地址寄存器
通常与变址寄存器DI组合为ES:DI,作为串操作目的地址
  • 变址寄存器
寄存器用途
SI源地址寄存器
通常作为串操作中的源地址
DI目的地址寄存器
通常作为串操作中的目的地址
  • SI 与 数据段寄存器 DS 组成 DS:SI,通常用来表示汇编指令的源地址
  • DI 与 附加段寄存器 ES 组成 ES:DS,通常用来表示汇编指令的目的地址
    如:当调用 movsb 指令,就会从源地址复制一个字节的数据到目的地址
  • 指针寄存器
寄存器用途
SP堆栈指针寄存器
通常与堆栈段寄存器组合使用
BP基址指针寄存器
通常存取堆栈的指针
  • 控制寄存器
寄存器用途
IP指令指针寄存器
通常与代码段寄存器CS组合为CS:IP作为代码段地址,指向下一条要执行的指令
FLAG标志寄存器,记录CPU执行过程中的一系列状态
OF:溢出标志
SF:符号标志
ZF:零标志
CF:进位标志
AF:辅助进位标志
DF:方向标志
IF:中断标志
TF:陷阱标志
PF:奇偶标志

举个例子:

cmp AL, #0x3a
jl START

上述指令实现:将寄存器 AL 的值与立即数 #0x3a 进行比较,若 AL < #0x3a,则置位零标志位 ZF,jl 指令再通过判断 ZF 大小,跳转到 START 处。若 AL ≥ #0x3a,则不跳转。

二、32 bits(保护模式)

32 bits 寄存器与 16 bits 寄存器一样,同样可以分为数据寄存器、变址寄存器、指针寄存器、控制寄存器,我们不再一一分类,将其归纳如下所示。

  • 通用寄存器
寄存器用途
EAX累加寄存器,通常作为用来执行加法
EBX基地址寄存器,通常用于数据存取
ECX计数器寄存器,通常用作计数器
EDX数据寄存器,通常用来存储临时数据
ESP栈顶指针,指向栈的顶部
EBP栈底指针,指向栈的底部,通常用ebp+偏移量的形式来定位函数存放在栈中的局部变量
ESI源地址寄存器,通常作为串操作中的源地址
EDI目的地址寄存器,通常作为串操作中的目的地址
EIP指令指针寄存器
通常与代码段寄存器CS组合为CS:IP作为代码段地址,指向下一条要执行的指令地址
EFLAGS标志寄存器,记录CPU执行过程中的一系列状态,如下图所示

在这里插入图片描述

  • 控制寄存器

在这里插入图片描述
本文目前只更新了李治军老师【操作系统】课程中常用的寄存器,包括16位的和32位的,一些尚未使用到的还未更新,具体可以参考《Linux内核完全注释(修正版v3.0).pdf》第四章,这一章详细介绍了 80x86 系统寄存器大全。

待更新…后续将继续更新【操作系统】课程中所使用到的寄存器

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小猪沉塘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值