x86寄存器(二):通用寄存器、指令指针寄存器和标志寄存器

       x86处理器除了段寄存器外,还有通用寄存器、指令指针寄存器和标志寄存器。

一.通用寄存器

1.1 8086的16位通用寄存器

         为了协助运行指令,8086设计了8个16位通用寄存器,如下表所示。这8个寄存器虽然称为通用寄存器,其实最初都有专用的目的,且都是根据专用的目的命名的,但是,除了专门用来指向栈帧的SP和BP外,这些专用的目的已成为历史,在编程时我们可灵活使用。

        AX、BX、CX和DX分别提供了字节的访问方式,例如可通过AL访问低8位,通过AH访问高8位。

序号通用寄存器作用
1AX

(1)累加寄存器。

(2)A就取自英文Accumulator(累加)的首字母。

2BX

(1)设计初衷是存储一个数据的基址,比如数组的首地址,然后基于这个基址,使用偏移访问数组中的元素。因此,被称为基址寄存器。

(2)B取自Base的首字母。
3CX

(1)一个典型用途是作为循环的计数,loop指令就使用了CX作为循环计数。因此,被称为计数寄存器。

(2)C取自英文单词Counter。
4DX

(1)用于算数相关的运算。

(2)D取自英文单词Data的首字母。
5SI

(1)为了访问一块连续的内存,x86设计了寄存器SI,称为源变址寄存器,用于指示内存地址。通过自增SI,就可以方便地实现连续访存。

(2)SI取自Source Index的首字母。
6DI

(1)和SI寄存器演对手戏,用来访问目的内存块,称为目的变址寄存器。

(2)DI取自Destination Index的首字母。
7SP

(1)程序运行时使用栈存储局部变量,因此需要一个寄存器指向栈顶,x86设计了栈指针寄存器SP。

(2)SP取自Stack Pointer的首字母。
8BP

(1)一个栈有栈顶和栈底,BP用于指向一个栈帧的底部,所以称为基指针寄存器,程序可使用BP引用栈中的数据。

(2)BP取自Base Pointer。

1.2 8036的32位通用寄存器

        从80386开始,这些寄存器被扩展为32位,因此相应的名称也增加了一个前缀“e”,取自单词extended的首字母。32位处理器也支持在16位模式下访问32位寄存器。

1.3 64位模式的64位通用寄存器

        在64位模式下,这些寄存器扩展为64位,前缀替换为“r”,取自单词register的首字母。64位x86还引入了另外8个通用寄存器R8~R15,总共16个通用寄存器。      

        事实上,RAX、EAX、AX、AL在处理器器中是一个寄存器,对应同一个ID,只是处理器在运行时会根据指令使用的操作数的宽度使用相应的位数。

二.指令指针寄存器

         代码段的基址存储在代码段寄存器CS中,段内偏移值存储在指令指针寄存器IP中。

        IP寄存器的内容不允许程序直接修改,比如如下指令是非法的:

mov  $0x1000,%ip

        但可通过执行转移指令,如jmp、call、ret等指令间接修改。

三.标志寄存器

        处理器在运行时需要保存很多状态。例如进行加法运算时,处理器需要记录是否有进位;进行减法运算时,需要记录是否有借位等。

        处理器将这些标志组织到一个寄存器中,称为标志寄存器。标志寄存器是由若干D触发器组成的,一个标志由一个或多个D触发器组成。

标志寄存器中的几个标志
序号标志位全称作用
1CFCarry Flag

(1)进/借位标志

(2)在加法时用于记录是否发生了进位;在减法时,用于记录是否发生了借位。

2ZFZero Flag零标志,当两个数相减时,如果结果为0,处理器将设置这一位。
3IFInterrupt enable Flag中断使能标志,用来控制处理器是否响应外部中断信号。

        标志的设置方式:

1.通过指令控制

        例如x86提供了sti和cli指令来打开和关闭中断。

2.指令执行时间接设置

        例如使用指令cmp比较两个寄存器ax和bx中数据的大小,cmp根据2个数的差设置ZF和CF标志:

(1)若ax = bx,则ax – bx = 0,将设置ZF = 1。

(2)若ax > bx,则不会发生借位,将设置CF = 0。

(3)若ax < bx,则一定发生借位,将设置CF = 1。

        有时将CF作为借位标志(Borrow Flag)。计算机不是使用补码将减法转换为加法吗,怎么还会有借位呢?

        没错,计算机使用补码将减法转换为加法,但是Intel为了便于人们直观的理解,当执行减法时,将CF转换为借位标志了。

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

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

相关文章

光伏电池输出功率模型

1.光伏电池输出功率 1.1光伏电池的效率 温度对光伏电池/组件电效率的影响可以追溯到温度对电流I和电压V的影响&#xff0c;因为最大功率表达式为&#xff1a; 其中&#xff0c;Pm为最大输出功率&#xff1b;Vm为最大输出功率点电压&#xff1b;Im为最大输出功率点电流&#xf…

【大模型基础_毛玉仁】1.4 语言模型的采样方法

【大模型基础_毛玉仁】1.4 语言模型的采样方法 1.4 语言模型的采样方法1.4.1 概率最大化方法1&#xff09;贪心搜索&#xff08;GreedySearch&#xff09;2&#xff09;波束搜索&#xff08;BeamSearch&#xff09; 1.4.2 随机采样方法1&#xff09;Top-K 采样2&#xff09;Top…

MyBatis - XML CRUD 其他查询

1. XML 配置文件 使用 MyBatis 操作数据库的方式有两种: 注解 (在注解中定义 SQL 语句)XML 配置文件 (在 XML 文件中定义 SQL 语句) 在上一篇博客中, 已经讲解了如何使用注解操作数据库, 本篇文章来讲解如何使用 XML 进行 MyBatis 开发. 使用 XML 的步骤, 和使用注解的步骤…

DeepSeek + 飞书多维表格搭建你的高效工作流

众所周知&#xff0c;大模型DeepSeek擅长于处理大规模语言模型推理任务&#xff0c;特别是在成本降低和思维链推理方面表现出色‌&#xff0c;我们一般把大模型必做我们的大脑&#xff0c;但是一个人不能只有大脑&#xff0c;还需要其他输入输出以及操作支配的眼耳鼻嘴手足等。…

跨域-告别CORS烦恼

跨域-告别CORS烦恼 文章目录 跨域-告别CORS烦恼[toc]1-参考网址2-思路整理1-核心问题2-个人思考3-脑洞打开4-个人思考-修正版1-个人思考2-脑洞打开 3-知识整理1-什么是跨域一、同源策略简介什么是源什么是同源是否是同源的判断哪些操作不受同源策略限制跨域如何跨域 二、CORS 简…

基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程

一、Django项目初始化 1.创建Django项目 Django-admin startproject 项目名 2.安装 djangorestframework pip install djangorestframework 解释: Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架&#xff0c;提供了多种工具和库来构建 RESTf…

基于多目标向日葵优化算法(Multi-objective Sunflower Optimization,MOSFO)的移动机器人路径规划研究,MATLAB代码

一、机器人路径规划介绍 移动机器人路径规划是机器人研究的重要分支&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量…

cursor使用经验分享(java后端服务开发向)

前言 cursor是一款基于vscode&#xff0c;并集成AI能力的代码编辑器&#xff0c;其功能包括但不限于代码生成及补全、AI对话&#xff08;能够直接将代码环境作为上下文&#xff09;、即时应用建议等等&#xff0c;是一款面向未来的代码编辑器。 对于vscode&#xff0c;最先想…

【Java学习】异常

一、异常的处理过程 异常类的似复刻变量被throw时&#xff0c;会立即中止当前所在的这层方法&#xff0c;即当层方法里throw异常类似复刻变量之后的语句就不会执行了&#xff0c;如果throw异常语句在当层方法中被try{}包裹&#xff0c;则中止就先发生被包裹在了try{}层&#xf…

双足机器狗开发:Rider - Pi

双足机器狗开发:Rider - Pi https://github.com/YahboomTechnology/Rider-Pi-Robot 项目介绍 Rider - Pi是一款为开发者、教育工作者和机器人爱好者设计的桌面双轮腿式机器人,它基于树莓派CM4核心模块构建,具备多种先进功能和特点: 硬件特性 核心模块:采用树莓派CM4核…

vscode 查看3d

目录 1. vscode-3d-preview obj查看ok 2. vscode-obj-viewer 没找到这个插件&#xff1a; 3. 3D Viewer for Vscode 查看obj失败 1. vscode-3d-preview obj查看ok 可以查看obj 显示过程&#xff1a;开始是绿屏&#xff0c;过了1到2秒&#xff0c;后来就正常看了。 2. vsc…

Nginx 本地配置ssl证书

Nginx 本地配置ssl证书 主要为了本地使用https站点访问测试 本地linux 服务器环境为Centos7 本地安装mkcert证书工具 对于 Debian 或 Ubuntu 系统&#xff0c;你可以使用以下命令安装&#xff1a; sudo apt update sudo apt install mkcert # 验证是否安装成功 mkcert --vers…

Redis相关面试题

Redis相关面试题 缓存三剑客 面试官&#xff1a;什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个一定不存在的数据&#xff0c;如果从存储层查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到 DB 去查询&#xff0c;可能导致 DB 挂掉。这种情况…

Android ChatOn-v1.66.536-598-[构建于ChatGPT和GPT-4o之上]

ChatOn 链接&#xff1a;https://pan.xunlei.com/s/VOKYnq-i3C83CK-HJ1gfLf4gA1?pwdwzwc# 添加了最大无限积分 删除了所有调试信息 语言&#xff1a;全语言支持

机器学习(六)

一&#xff0c;决策树&#xff1a; 简介&#xff1a; 决策树是一种通过构建类似树状的结构&#xff08;颠倒的树&#xff09;&#xff0c;从根节点开始逐步对数据进行划分&#xff0c;最终在叶子节点做出预测结果的模型。 结构组成&#xff1a; 根节点&#xff1a;初始的数据集…

求最小公倍数

求最小公倍数 编程实现&#xff1a; 求最小公倍数。 具体要求&#xff1a; 1、小猫询问“请输入第一个数”&#xff0c;并在列表中求出该数的质因数放入列表A&#xff0c;例如输入12&#xff1b; 2、小猫依次询问“请输入第二个数”&#xff0c;并在列表中求出该数的质因数…

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年&#xff0c;人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角&#xff0c;AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型&#xff0c;从技术背景、应用领域、性能、成本效益等多个方…

C/C++蓝桥杯算法真题打卡(Day1)

一、LCR 018. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; class Solution { public:bool isPalindrome(string s) {int n s.size();// 处理一下s为空字符的情况if (n 0) {return true; // 修正拼写错误}// 定义左右指针遍历字符串int left …

SpringUI高保真动态交互元件库:助力产品原型设计

SpringUI 是一个专为Web设计与开发领域打造的高质量、全面且易于使用的交互元件集合。通过提供一系列预制的、高质量的交互组件&#xff0c;帮助设计师快速构建出功能丰富、界面美观的原型。 ————基础元件&#xff1a; ——————按钮 Button&#xff1a;基础按钮、禁用…

vue+neo4j 四大名著知识图谱问答系统

编号: D039 视频 vueneo4j四大名著知识图谱问答系统 技术架构 vuedjangoneo4jmysql技术实现 功能模块图 问答&#xff1a;基于知识图谱检索、支持图多跳、显示推理路径 姜维的师傅的主公的臣是谁&#xff1a; 马谡 知识图谱&#xff1a;四大名著总共4个图谱 红楼梦图谱 …