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 系统寄存器大全。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统的特性

操作系统的性质 并发性 操作系统支持多道程序设计&#xff0c;即允许多个程序并发执行。通过进程管理和调度机制&#xff0c;操作系统能够在单个处理器上模拟出多个任务同时运行的效果&#xff0c;提高系统资源利用率和用户响应体验。并发性也要求操作系统具备进程同步、互斥和…

Spark-机器学习(4)回归学习之逻辑回归

在之前的文章中&#xff0c;我们来学习我们回归中的线性回归&#xff0c;了解了它的算法&#xff0c;知道了它的用法&#xff0c;并带来了简单案例。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请…

Syncovery for Mac v10.14.3激活版:文件备份和同步工具

Syncovery for Mac是一款高效且灵活的文件备份与同步工具&#xff0c;专为Mac用户设计&#xff0c;旨在确保数据的安全性和完整性。该软件支持多种备份和同步方式&#xff0c;包括本地备份、网络备份以及云备份&#xff0c;用户可以根据实际需求选择最合适的方案。 Syncovery f…

信息系统项目管理师0062:需求分析(5信息系统工程—5.1软件工程—5.1.2需求分析)

点击查看专栏目录 文章目录 5.1.2需求分析1.需求的层次2.需求过程3.UML4.面向对象分析记忆要点总结5.1.2需求分析 软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。根据IEEE的软件工程标准词汇表,软件需求是指用户解决问题或达到目标所需的条件或能力,是…

【深度学习】烟雾和火焰数据集,野外数据集,超大量数据集,目标检测,YOLOv5

标注了2w张数据集&#xff0c;是目标检测yolo格式的&#xff0c;有火焰、烟雾两个目标。 训练方法看这里&#xff1a; https://qq742971636.blog.csdn.net/article/details/138097481 打包 依据不一样的需求&#xff0c; 详情请查看 https://docs.qq.com/sheet/DUEdqZ2l…

多元函数泰勒公式(含黑塞矩阵)

一元函数的泰勒公式&#xff1a; 接下来&#xff0c;由一元函数有关知识&#xff0c;我们有: 注意这里的dxn中&#xff0c;应把dx看作一个整体&#xff0c;即一个微小变量的n次方 我们接下来推导微分算子&#xff1a; 接下来&#xff0c;把一元泰勒公式转为微分形式: 对于二元…

React.js 3D开发快速入门

如果你对 3D 图形的可能性着迷&#xff0c;但发现从头开始创建 3D 模型的想法是不可能的 - 不用担心&#xff01; Three.js 是一个强大的 JavaScript 库&#xff0c;它可以帮助我们轻松地将现有的 3D 模型集成到 React 应用程序中。因此&#xff0c;在本文中&#xff0c;我将深…

Linux tcp/ip 网路协议栈学习-00 前言

Linux tcp/ip 网路协议栈学习-00 前言 目录 Linux tcp/ip 网路协议栈学习-00 前言 (1)预备知识 (2)前置知识 (3)学习目标 (4)总结 (1)预备知识 好工具事半功倍&#xff0c;做任何事情都需要有方法和工具&#xff0c;同样&#xff0c;阅读 Linux 内核源码也是如此…

ExcelVBA把当前工作表导出为PDF文档

我们先问问Kimi Excel导出为PDF的方法有多种&#xff0c;以下是一些常见的方法&#xff1a; 1 使用Excel软件的内置功能&#xff1a; 打开Excel文件&#xff0c;点击“文件”菜单。选择“另存为”&#xff0c;在“保存类型”中选择“PDF”。设置保存路径和文件名&#xff0c;点…

【机器学习】重塑汽车设计与制造:实例与代码探索

机器学习重塑汽车设计与制造 一、机器学习在汽车设计中的应用二、机器学习在智能制造与生产中的应用 在数字化浪潮的推动下&#xff0c;机器学习技术正逐步成为汽车行业的创新引擎。从概念设计到智能制造&#xff0c;机器学习正以其独特的优势助力汽车产业的革新与发展。本文将…

数据挖掘实验(Apriori,fpgrowth)

Apriori&#xff1a;这里做了个小优化&#xff0c;比如abcde和adcef自连接出的新项集abcdef&#xff0c;可以用abcde的位置和f的位置取交集&#xff0c;这样第n项集的计算可以用n-1项集的信息和数字本身的位置信息计算出来&#xff0c;只需要保存第n-1项集的位置信息就可以提速…

day06 51单片机-点阵led

1 点阵LED 1.1 需求描述 本案例介绍如何使用点阵LED显示一排由左上到右下的斜线。 1.2 硬件设计 1.2.1 硬件原理图 点阵内部的原理图: 点阵LED的原理也非常简单,就是LED点灯。例如,我们想要让13列(阳极端)9行(阴极端)的LED点亮,需要13为高电平,9为低电平。注意对于…

【Git】git revert 命令(撤销 commit 改动)

基本语法 Git revert命令用于通过创建一个新的commit来撤销一个或多个之前的commit。这样做的好处是保持了项目历史的完整性&#xff0c;并且可以将撤销的改动应用到其他分支。 撤销单个commit&#xff1a;如果你只想撤销一个commit&#xff0c;你可以使用以下命令 git revert…

Oracle进阶(3)——索引、权限、角色管理、分区表

一、索引 在 Oracle 数据库中&#xff0c;索引是一种数据结构&#xff0c;用于加快数据库表的数据检索速度。索引存储着表中一个或多个列的值以及对应的行的物理地址或指针。通过使用索引&#xff0c;数据库可以更快地定位到符合特定条件的行&#xff0c;而不必扫描整个表。索引…

logback添加日志行号

logback打印行号 全量配置如下 在包名后面添加\(%F:%L\\)这样打印的日志是带类名加行号&#xff0c;支持 ide 点击跳转(xxx.main.java:18)精简配置如下 打印全量类占用显示位置去掉主类名直接打印行号%clr(%4.4L{4})这样打印的日志只是加行号解释&#xff1a;%4&#xff1a;这…

【源码】Spring validation参数校验之分组序列校验@GroupSequenceProvider、@GroupSequence的实现原理

Spring validation参数校验系列 1、Spring validation参数校验基本使用 2、Spring validation参数校验之自定义校验规则及编程式校验等进阶篇 3、Spring validation参数校验原理解析之Controller控制器参数校验中RequestBody参数校验实现原理 4、Spring validation参数校验…

苍穹外卖day8(2)用户下单、微信支付

文章目录 前言一、用户下单1. 业务流程2. 接口设计3. 数据库设计3.1 订单表orders3.2 订单明细表 order_detail 4. 代码实现 二、订单支付 前言 用户下单 因为订单信息中包含了其他业务中的数据&#xff0c;在逻辑处理中涉及了多个其他业务&#xff0c;比如要判断地址簿、购物…

描述一下PHP与HTML和CSS的关系

描述一下PHP与HTML和CSS的关系 PHP、HTML和CSS在Web开发中各自扮演着不同的角色&#xff0c;它们之间的关系密切而互补&#xff0c;共同构建了一个完整且富有动态性的Web应用程序。下面我将详细阐述PHP与HTML和CSS之间的关系。 首先&#xff0c;HTML&#xff08;HyperText Ma…

面试复习基础题目-c#相关

面试复习基础题目 c#相关问题 delegate和event的区别是什么&#xff1f; Delegate用来声明委托类型&#xff0c;event用来声明委托对象&#xff1b; 事件是委托的一种应用&#xff0c;事件是带有event关键词的委托对象&#xff0c;对委托对象进行了封装&#xff0c;本质就是委…

聚类与分类的区别

聚类和分类是机器学习中的两个基本概念&#xff0c;两者的主要区别在于用于分类的数据已经预先标记好类别&#xff0c;而用于聚类的数据则没有预先标记的类别。以下是详细介绍&#xff1a; 目的不同。聚类的目的是发现数据中的自然分组&#xff0c;将相似或相关的对象组织在一…