您的位置 首页 IOT

单片机通用寄存器的分类及使用

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

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

寄存器的分类寄存器

首要用处

数据

寄存器

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附加段寄存器

1、数据寄存器

数据寄存器首要用来保存操作数和运算成果等信息,然后节约读取操作数所需占用总线和拜访存储器的时刻。

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器别离命名为:AX、BX、CX和DX,它和从前的CPU中的寄存器相一致。

4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的称号,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵敏地处理字/字节的信息。

·寄存器AX和AL一般称为累加器(Accumulator),用累加器进行的操作或许需求更少时刻。累加器可用于乘、除、输入/输出等操作,它们的运用频率很高;

·寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来运用;

·寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来操控循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来寄存存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不只可传送数据、暂存数据保存算术逻辑运算成果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。详细内容请见第3.8节——32位地址的寻址方法。

2、变址寄存器

32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应从前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们首要用于寄存存储单元在段内的偏移量,用它们可完成多种存储器操作数的寻址方法(在第3章有详细介绍),为以不同的地址方法拜访存储单元提供方便。

变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算成果。

它们可作一般的存储器指针运用。在字符串操作指令的履行过程中,对它们有特定的要求,而且还具有特别的功用。详细描绘请见第5.2.11节。

3、指针寄存器

32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应从前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。

寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),首要用于寄存仓库内存储单元的偏移量,用它们可完成多种存储器操作数的寻址方法(在第3章有详细介绍),为以不同的地址方法拜访存储单元提供方便。

指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算成果。

它们首要用于拜访仓库内的存储单元,而且规则:

·BP为基指针(Base Pointer)寄存器,用它可直接存取仓库中的数据;

·SP为仓库指针(Stack Pointer)寄存器,用它只可拜访栈顶。

4、段寄存器

段寄存器是依据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组组成一个可拜访较大物理空间的内存地址。

CPU内部的段寄存器:

·CS——代码段寄存器(Code Segment Register),其值为代码段的段值;

·DS——数据段寄存器(Data Segment Register),其值为数据段的段值;

·ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;

·SS——仓库段寄存器(Stack Segment Register),其值为仓库段的段值;

·FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;

·GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。

在16位CPU体系中,它只要4个段寄存器,所以,程序在任何时刻至多有4个正在运用的段可直接拜访;在32位微机体系中,它有6个段寄存器,所以,在此环境下开发的程序最多可一起拜访6个段。

32位CPU有两个不同的工作方法:实方法和维护方法。在每种方法下,段寄存器的效果是不同的。有关规则简略描绘如下:

实方法: 前4个段寄存器CS、DS、ES和SS与从前CPU中的所对应的段寄存器的意义完全一致,内存单元的逻辑地址仍为“段值:偏移量”的方法。为拜访某内存段内的数据,有必要运用该段寄存器和存储单元的偏移量。

维护方法: 在此方法下,状况要杂乱得多,装入段寄存器的不再是段值,而是称为“挑选子”(Selector)的某个值。段寄存器的详细效果在此不作进一步介绍了,有爱好的读者可参看其它科技材料

5、指令指针寄存器

32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与从前CPU中的IP效果相同。

指令指针EIP、IP(InstrucTIon Pointer)是寄存下次即将履行的指令在代码段的偏移量。在具有预取指令功用的体系中,下非必须履行的指令一般已被预取到指令行列中,除非产生搬运状况。所以,在了解它们的功用时,不考虑存在指令行列的状况。

在实方法下,因为每个段的最大规模为64K,所以,EIP中的高16位必定都为0,此刻,相当于只用其低16位的IP来反映程序中指令的履行次第。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/347022.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部