寄存器详解

三、寄存器-计算机基础 1.程序的简要运行流程 程序加载到内存中 --> CPU 找到程序将要执行的指令位置,然后执行程序 问题:那就是CPU如何找到程序即将执行指令的位置? 这里需要使用寄存器 (CS:IP) 寻址来确定即将执行指令位置 什么是寄存器? 寄存器是CPU中的一部分。它是一个高速存贮部件,可以用来暂存指令、数据和地址。每个CPU中有多个寄存器,例如8086CPU中含有14个寄存器。 它的存储量有限 :2个字节(Byte)、4个字节,也就是 16 bit、32 bit。所以所有的寄存器都是16位的。 特点 阅读详情
AX/EAX: 累加器,算术通用寄存器,与端口的通讯也用这个寄存器.
BX/EBX: 基址寄存器.
CX/ECX: 计数器,结合串处理指令使用.
DX/EDX: 算术通用寄存器.和累加器结合表示双字长的数,其中累加器用于存低位数.



[From]http://blog.youkuaiyun.com/huangwei1024/archive/2007/01/29/1496560.aspx

2.1 寄存器组

寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。

寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。

另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。有关“寄存器的分配策略”在后续课程《编译原理》中会有详细的介绍。

由于16位/32位CPU是微机CPU的两个重要代表,所以,在此只介绍它们内部寄存器的名称及其主要功能。

2.1.1 寄存器组

1、16位寄存器组

16位CPU所含有的寄存器有(见图2.1中16位寄存器部分):

4个数据寄存器(AX、BX、CX和DX)

2个变址和指针寄存器(SI和DI)2个指针寄存器(SP和BP)

4个段寄存器(ES、CS、SS和DS)

1个指令指针寄存器(IP)1个标志寄存器(Flags)

2、32位寄存器组

32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指针和标志寄存器从16位扩充成32位之外,还增加了2个16位的段寄存器:FS和GS。

32位CPU所含有的寄存器有(见图2.1中的寄存器):

4个数据寄存器(EAX、EBX、ECX和EDX)

2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)

6个段寄存器(ES、CS、SS、DS、FS和GS)

1个指令指针寄存器(EIP)1个标志寄存器(EFlags)
寄存器详解
寄存器详解
寄存器详解

图2.1 CPU寄存器组的示意图

 

2.1.2、通用寄存器的作用

通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。

表2.1 通用寄存器的主要用途

寄存器的分类寄存器

主 要 用 途

通

用

寄

存

器

数据

 

寄存器

AX

乘、除运算,字的输入输出,中间结果的缓存

AL

字节的乘、除运算,字节的输入输出,十进制算术运算

AH

字节的乘、除运算,存放中断的功能号

BX

存储器指针

CX

串操作、循环控制的计数器

CL

移位操作的计数器

DX

字的乘、除运算,间接的输入输出

变址
寄存器
SI

存储器指针、串指令中的源操作数指针

DI

存储器指针、串指令中的目的操作数指针

变址
寄存器
BP

存储器指针、存取堆栈的指针

SP

堆栈的栈顶指针

指令指针

IP/EIP 
标志位寄存器Flag/EFlag 
32位

CPU的

段寄存器

16位CPU的

段寄存器

ES 附加段寄存器
CS 代码段寄存器
SS 堆栈段寄存器
DS 数据段寄存器
新增加的
段寄存器
FS 附加段寄存器
GS 附加段寄存器

更详细的内容请点击:通用寄存器功能的说明。

2.1.3、专用寄存器的作用

16位CPU内部有一个16位的标志寄存器,它包含9个标志位。这些标志位主要用来反映处理器的状态和运算结果的某些特征。各标志位在标志寄存器内的分布如图2.2所示。

 

 
1514131211109876543210
    OFDFIFTFSFZF AF PF CF

 

31…17161514131211109876543210
……VMRF NTIOPLOFDFIFTFSFZF AF PF CF

图2.2 16位/32位标志寄存器的示意图

上面9个标志位可分为二组:运算结果标志位(有背景色的标志位)和状态控制标志位。前者受算术运算和逻辑运算结果的影响,后者受一些控制指令执行的影响。

更详细的内容请点击:标志位的说明。

有些指令的执行会改变标志位(如:算术运算指令等),不同的指令会影响不同的标志位,有些指令的执行不改变任何标志位(如:MOV指令等),有些指令的执行会受标志位的影响(如:条件转移指令等),也有指令的执行不受其影响。

程序员要想熟练运用这些标志位,就必须掌握每个标志位的含义、每条指令的执行条件和执行结果对标志位的作用。

注意:虽然知道每个标志位在标志寄存器内的具体位置是有好处的,但通常情况下,没有这个必要。在使用第5.2.9节中的“条件转移指令”时,系统会自动引用相应标志位的值来决定是否需要“转移”的,所以,不必过分强调标志位在标志寄存器内的具体位置。

第四章 什么是寄存器 但有一点我们要注意的是, FSMC 只能扩展静态的内存,即名称里面的S: static,不能是动态的内存,比如 SDRAM 就不能扩展。也就是说,我们定义的这个 GPIO_TypeDef ,假如这个结构体的首地址为 0x4001 0C00(这也是第一个成员变量 CRL 的地址),那么结构体中第二个成员变量 CRH 的地址即为 0x4001 0C00 +0x04,加上的这个 0x04,正是代表 CRL 所占用的 4 个字节地址的偏移量,其它成员变量相对于结构体首地址的偏移,在上述代码右侧注释已给。 阅读详情

相关推荐

寄存器(CPU工作原理)

可以将长度为 N( N≤64KB )的一组代码,存在一组地址连续、起始地址为 16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。2)偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。

我的博客 4040

数字电路基础---寄存器

寄存器是构成时序逻辑最重要的一个单元,可以说没有寄存器就没有时序逻辑。寄存器是由触发器组成的,一个触发器可以组成一个一位的寄存器(一个触发器其实可以看作一个寄存器),多个触发器可以组成一个多位的寄存器,多位的寄存器可以存储多 bit 的二进制数据。。。如果多个触发器组成的寄存器输入都是相同信号,那么寄存器的输出也都是相同的信号,这种属于触发器并联。如果多个触发器组成的寄存器输入是互相传递的(下一个触发器的输入是上一个触发器的输出),那么寄存器的输出也都是不相同的信号,这种属于触发器串联。

yishuihanq的博客 3万+

汇编学习笔记1 通用寄存器和段寄存器详解

一、通用寄存器 寄存器 编号(二进制) 编号(十进制) 64位 32位 16位 8位 累加寄存器 RAX EAX AX AL 000 0 计数寄存器 RCX ECX CX CL 001 1 数据寄存器 R...

hallyz的博客 1万+

计算机组成原理——寄存器

计算机组成原理——寄存器

TENET123的博客 5132

寄存器和移位寄存器详解

文章目录寄存器的定义寄存器的分类寄存器的工作原理移位寄存器的定义和分类多功能双向移位寄存器典型的集成电路 寄存器的定义 寄存器的分类 寄存器的工作原理 移位寄存器的定义和分类 多功能双向移位寄存器 典型的集成电路 ...

weixin_43342105的博客 1万+

ARMv8寄存器详解

本文我来给大家介绍一下ARMv8的寄存器部分,ARMv8中有34个寄存器,包括31个通用寄存器、一个栈指针寄存器SP(X31),一个程序计数器寄存器PC,一个处理器状态寄存器PSTATE(在ARMv7架构中使用程序状态寄存器(Current Program Status Register,CPSR)来表示当前的处理器状态(processor stste),而在ARMv8里使用PSTATE寄存器来表示)。寄存器位数描述X0-X3064bit通用寄存器,如果有需要可以当作32bit使用:W0-W30。

代码背包客的博客 4082

ARM寄存器详解

ARM寄存器 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个状态寄存器都是可访问的。ARM状态下的通用寄存器与程序计数器 ARM状态下的程序寄存器 通用寄存器R0~R15 R13_svc、R1

Super的博客 3万+

ARM 寄存器 详解

From(ARM 寄存器详解 ):https://blog.youkuaiyun.com/sandeldeng/article/details/52954781 ARM 汇编基础教程:2.数据类型和寄存器:https://www.52pojie.cn/thread-797306-1-1.html ARM的寄存器 ARM工作状态 和工作模式 工作状态...

墨鱼菜鸡 5586

ARM寄存器组详解

ARM架构的寄存器组是其处理器性能的核心,主要包括通用寄存器、特殊用途寄存器、程序状态寄存器和浮点寄存器。通用寄存器在32位架构中有16个32位寄存器,而在64位架构中扩展为31个64位寄存器。特殊用途寄存器如程序计数器(PC)、链接寄存器(LR)和栈指针(SP)分别用于指令执行、函数返回和栈操作。程序状态寄存器(CPSR和SPSR)存储处理器状态信息,如条件标志、中断禁用标志和处理器模式。浮点寄存器支持IEEE 754标准的浮点运算,NEON寄存器和高级SIMD技术则提供了高效的并行数据处理能力。这些寄存

2401_88534745的博客 2609

8086CPU中14个寄存器的详解

CPU中的寄存器 在执行单元EU和总线接口单元BIU中一共有14个寄存器,其中通用寄存器8个、标志寄存器FLAGS一个、控制寄存器5个。 通用寄存器 8个通用寄存器再进行细分,又可划分为数据寄存器(AX~DX)、栈顶指针寄存器(SP)、基址寄存器(BP)、DI(目标变址寄存器)、SI(源变址寄存器)。 1. 数据寄存器(AX、BX、CX、DX) 16位的数据寄存器可以拆成2个8位寄存器(例如:AX->AH+AL等)来使用,但是一定要注意“8086为16位寄存器,8位寄存器中存放的一定是数

超级霸霸强的博客 2万+

STM32 寄存器位操作详解

在对STM32寄存器操作时,我们经常会对寄存器的某一位或几位进行修改并且保持其他位不变,这时候就会用到C语言的位操作方法。那么如何进行位操作,以及位操作的原理是什么呢?话不多说直接开冲: 1、把变量的某位清零 //先定义一个随机变量a unsigned char a = 0x9f; //对bit2位进行清零操作 a &= ~(1 << 2); 首先,随便给一个变量,为了跟32的代码接近点,我们也用16进制,然后0x9f就是1001 1111 b(二进制) 要求对bit2位清零,也就是说

qq_36535414的博客 8195

UART寄存器详解

1.UART行控制寄存器ULCONn(ULCON0, R/W, Address = 0xEC00_0000) ULCONn的含义如表8-2所示。 表8-2  ULCONn的含义 ULCONn 位 描述 初始状态 Reserved [7]   0 Infra-Red Mode [6] 是否使

杜恒其的博客 1万+

Linux详解寄存器

操作系统的设计者必须在硬件相关的代码与硬件无关的代码之间划出清楚的界限,以便将一个操作系统很容易地移植到不同的平台。 在X86系列中,8086和8088是16位的处理器,而从80386开始为 32 位处理器。这种变化看起来是处理器位数的变化,但实质上是处理器体系结构的变化,从寻址方式上说,就是从“实模式”到“保护模式”的变化。 从80386以后,Intel的CPU 经历了80486、Pentium、 Pentium II、Pentium III 等型号,虽然它们在速度上提高了好几个数量级,功能

程序员乌拉的博客! 2727

详解wm8371音频采集芯片的寄存器

本文详细介绍了WM8731编解码器的寄存器配置和电路设计。WM8731具有24位ADC和DAC,支持16至32位音频输入字长和8kHz至96kHz采样率。阐述了如何通过I2C或三线模式配置内部寄存器,并详细讲解了11个寄存器的功能,包括左右声道线路、耳机放大器、模拟音频路径控制、数字音频路径控制、省电模式、数字音频接口格式和复位寄存器。强调了省电模式、音频输入和DAC输出静音设置、I2S协议模式和格式设置、采样率设置的重要性。文档内容基于WM8731手册,提供了设计思路和配置参考。

详解FPGA及硬件电路开发 3043

五、2K0300 久久派开发板的GPIO控制与Shell脚本自动化实战

本文详细介绍了基于龙芯2K0300处理器的久久派开发板的GPIO控制方法,通过sysfs文件系统实现LED控制和传感器读取。重点讲解了Shell脚本自动化实战,包括LED闪烁、流水灯效果和传感器数据采集,为物联网项目开发提供完整解决方案。

silver的专栏 689

MT4/MT5数据源接入全攻略:从买服务、自研API到低成本DDE,哪种方案适合你?

本文全面解析MT4/MT5数据源接入的三种主流方案:商业服务、自研API和低成本DDE,详细对比其技术参数、成本结构和适用场景。帮助技术团队根据业务需求选择最优方案,确保外汇交易系统的数据流稳定性和实时性,提升交易体验和业务连续性。

weixin_42568801的博客 173

X86寄存器详解

寄存器是CPU内部用来放置数据和地址的存储单元,各种32位CPU中与微机原理有关的寄存器(编程可见)是一样的。本节仍以80486为例机来讨论,但结论可以不加修改地用于其它32位CPU。 位于CPU内部不同部件的寄存器有不同的作用,每个寄存器都有自己的功能。根据寄存器的性质,把编程可见的寄存器分成9组,并给每个编程可见的寄存器(以后简称寄存器)取一个名称 1 通用寄存器 通用寄存器中,32位寄

ctrloep的专栏 3340

SAP SD模块进阶:VA31和VA01底层竟是同一个BAPI?揭秘销售单据创建的统一逻辑

本文深入解析SAP SD模块中VA31和VA01的底层统一架构设计,揭示两者如何通过同一个BAPI `SD_SALESDOCUMENT_CREATE`实现销售单据创建。通过ABAP调试和参数化设计分析,展示了SAP如何利用单据类型(doc_type)等关键字段实现业务逻辑复用,为开发者提供配置化设计的重要启示。

weixin_30561177的博客 244

ARM的37个寄存器详解

ARM的37个寄存器 1、ARM CPU内部寄存器: 2、shadow register(影子寄存器) ARM总共有37个寄存器,每种工作模式下最多有18个可见,我们把上图中那些名称和黑色框中的名称相同,但颜色不同且不为黑色的寄存器称为左侧黑色框中同名寄存器的影子寄存器。(cpsr和spsr例外,但spsr也是cpsr的影子寄存器) ARM核是一个非常紧凑的设计,影子寄存器的引入就是这种设计的...

qq_28816873的博客 6202

华为海思:大小海思的双轮驱动战略分析

大海思的定位清晰明确,即专注于为华为内部提供高性能、高集成度的芯片解决方案,以支持华为终端、服务器等业务的快速发展。小海思的产品线广泛,涵盖了广域物联、短距物联、手机穿戴、显示交互、智慧视觉、智慧媒体、MCU、模拟以及光模块等多个领域。通过提供多样化的芯片解决方案,小海思旨在满足外部客户的不同需求,拓展华为海思在芯片市场的份额和影响力。大海思的产品布局主要围绕华为的内部需求展开。在智能手机应用处理器方面,大海思的麒麟系列芯片已经成为华为手机的标志性产品,以其出色的性能和能效比赢得了市场的广泛认可。

dream it possible 2924

【原创教程】AB上位机FactoryTalk View的使用教程

条形图主要的作用就是根据绑定的变量中数字大小的变化来反映到图形中,随着数字的增加填充的颜色不断上升或随着数字的减小填充的颜色不断下降。绘图功能中常用的功能主要是:数字输入,数字输出,字符输入,字符输出,各种类型的的按钮,条状图,各类控件,系统自带的图形库。颜色指的是根据PLC变量的变化来改变图形的颜色,可以绑定BOOL量来显示两种颜色,也可以绑定字节,字,双字等来显示多种颜色。打开软件后右键点击画面选项然后点击新建则新建出一个画面,画面画好后点击保存并更改标题后新建的画面则会出现在画面选项的文件夹下。

Qinmingyue13的博客 4681
上一篇: BIOS中断
下一篇: ubuntu内核源码树的建立
lq.kr
博客等级 码龄14年 9粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值