电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

汇编寄存器的效果

2017-07-13 19:04分类:电子技术 阅读:

 

汇编寄存器的效果
寄存器   英文称谓:Register
寄存器界说
  寄存器是基地处理器内的构成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在基地处理器的操控部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在基地处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
  寄存器是内存阶级中的最顶端,也是体系取得操作材料的最活络路径。寄存器一般都是以他们能够保留的位元数量来估计,举例来说,一个 “8 位元寄存器”或 “32 位元寄存器”。寄存器如今都以寄存器档案的方法来实作,可是他们也或许运用独自的正反器、高速的基地内存、薄膜内存以及在数种机器上的别的方法来实作出来。
  寄存器一般都用来意指由一个指令之输出或输入能够直接索引到的暂存器群组。更恰当的是称他们为 “架构寄存器”。
  例如,x86 指令及界说八个 32 位元寄存器的集结,但一个实作 x86 指令集的 CPU 能够包含比八个更多的寄存器。
  寄存器是CPU内部的元件,寄存用具有十分高的读写速度,所以在寄存器之间的数据传送十分快。
寄存器用处
  1.可将寄存器内的数据施行算术及逻辑运算;
  2.存于寄存器内的地址可用来指向内存的某个方位,即寻址;
  3.能够用来读写数据到电脑的周边设备。
数据寄存器
  8086 有14个16位寄存器,这14个寄存器按其用处可分为(1)通用寄存器、(2)指令指针、(3)象征寄存器和(4)段寄存器等4类。
  (1)通用寄存器有8个, 又能够分红2组,一组是数据寄存器(4个),另一组是指针寄存器及变址寄存器(4个).
  数据寄存器分为:
  AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来寄存操作数,别的,悉数的I/O指令都运用这一寄存器与外界设备传送数据.
  BH&BL=BX(base):基址寄存器,常用于地址索引;
  CH&CL=CX(count):计数寄存器,常用于计数;常用于保留核算值,如在移位指令,循环(loop)和串处理指令顶用作隐含的计数器.
  DH&DL=DX(data):数据寄存器,常用于数据传递。
  他们的特征是,这4个16位的寄存器能够分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器能够别离寻址,并独自运用。
  另一组是指针寄存器和变址寄存器,包含:
  SP(Stack Pointer):库房指针,与SS协作运用,可指向如今的库房方位;
  BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址方位;
  SI(Source Index):源变址寄存器可用来寄存有关于DS段之源变址指针;
  DI(Destination Index):意图变址寄存器,可用来寄存有关于 ES 段之意图变址指针。
  这4个16位寄存器只能按16位进行存取操作,首要用来构成操作数的地址,用于库房操作和变址运算中核算操作数的有用地址。
  (2) 指令指针IP(Instruction Pointer)
  指令指针IP是一个16位专用寄存器,它指向其时需求取出的指令字节,当BIU从内存中取出一个指令字节后,IP就主动加1,指向下一个指令字节。留心,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有用地址(EA,Effective Address)。
  (3)象征寄存器FR(Flag Register)
  8086有一个18位的象征寄存器FR,在FR中有意义的有9位,其间6位是状况位,3位是操控位。
  OF: 溢出象征位OF用于反映有符号数加减运算所得效果是不是溢出。假定运算效果逾越其时运算位数所能标明的计划,则称为溢出,OF的值被置为1,不然,OF的值被清为0。
  DF:方向象征DF位用来抉择在串操作指令施行时有关指针寄存器发作调整的方向。
  IF:接连容许象征IF位用来抉择CPU是不是照应CPU外部的可屏蔽接连宣告的接连恳求。但不论该象征为何值,CPU都有必要照应CPU外部的不行屏蔽接连所宣告的接连恳求,以及CPU内部发作的接连恳求。具体规矩如下:
  (1)、当IF=1时,CPU能够照应CPU外部的可屏蔽接连宣告的接连恳求;
  (2)、当IF=0时,CPU不照应CPU外部的可屏蔽接连宣告的接连恳求。
  TF:盯梢象征TF。该象征可用于程序调试。TF象征没有专门的指令来设置或了解。
  (1)假定TF=1,则CPU处于单步施行指令的作业方法,此刻每施行完一条指令,就闪现CPU内各个寄存器的其时值及CPU行将施行的下一条指令。
  (2)假定TF=0,则处于接连作业方法。
  SF:符号象征SF用来反映运算效果的符号位,它与运算效果的最高位一样。在微机体系中,有符号数选用补码标明法,所以,SF也就反映运算效果的正负号。运算效果为正数时,SF的值为0,不然其值为1。
  ZF: 零象征ZF用来反映运算效果是不是为0。假定运算效果为0,则其值为1,不然其值为0。在差异运算效果是不是为0时,可运用此象征位。
  AF:下列状况下,辅佐进位象征AF的值被置为1,不然其值为0:
  (1)、在字操作时,发作低字节向高字节进位或借位时;
  (2)、在字节操作时,发作低4位向高4位进位或借位时。
  PF:奇偶象征PF用于反映运算效果中“1”的个数的奇偶性。假定“1”的个数为偶数,则PF的值为1,不然其值为0。
  CF:进位象征CF首要用来反映运算是不是发作进位或借位。假定运算效果的最高位发作了一个进位或借位,那么,其值为1,不然其值为0。)
  4)段寄存器(Segment Register)
  为了运用悉数的内存空间,8086设定了四个段寄存器,专门用来保留段地址:
  CS(Code Segment):代码段寄存器;
  DS(Data Segment):数据段寄存器;
  SS(Stack Segment):库房段寄存器;
  ES(Extra Segment):附加段寄存器。
  当一个程序要施行时,就要抉择程序代码、数据和库房各要用到内存的哪些方位,通过设定段寄存器 CS,DS,SS 来指向这些开端方位。一般是将DS固定,而依据需求批改CS。所以,程序能够在可寻址空间小于64K的状况下被写成恣意巨细。 所以,程序和其数据组合起来的巨细,绑缚在DS 所指的64K内,这便是COM文件不得大于64K的要素。8086以内存做为战场,用寄存器做为军事基地,以加快作业。
  以上是8086寄存器的全体概略, 自80386开端,PC进入32bit年代,其寻址方法,寄存器巨细, 功用等都发作了改动:
  =============================以下是80386的寄存器的一些材料======================================
  寄存器都是32-bits宽。
  A、通用寄存器
  下面介绍通用寄存器及其习气用法。望文生义,通用寄存器是那些你能够依据自个的志愿运用的寄存器,批改他们的值一般不会对核算机的作业构成很大的影响。通用寄存器最多的用处是核算。
  EAX:通用寄存器。相对别的寄存器,在进行运算方面比照常用。在维护方法中,也能够作为内存偏移指针(此刻,DS作为段 寄存器或挑选器)
  EBX:通用寄存器。一般作为内存偏移指针运用(有关于EAX、ECX、EDX),DS是默许的段寄存器或挑选器。在维护方法中,一样能够起这个效果。
  ECX:通用寄存器。一般用于特定指令的计数。在维护方法中,也能够作为内存偏移指针(此刻,DS作为 寄存器或段挑选器)。
  EDX:通用寄存器。在某些运算中作为EAX的溢出寄存器(例如乘、除)。在维护方法中,也能够作为内存偏移指针(此刻,DS作为段 寄存器或挑选器)。
  同AX分为AH&AL一样,上述寄存器包含对应的16-bit分组和8-bit分组。
  B、用作内存指针的分外寄存器
  ESI:一般在内存操作指令中作为“源地址指针”运用。当然,ESI能够被装入恣意的数值,但一般没有人把它当作通用寄存器来用。DS是默许段寄存器或挑选器。
  EDI:一般在内存操作指令中作为“意图地址指针”运用。当然,EDI也能够被装入恣意的数值,但一般没有人把它当作通用寄存器来用。DS是默许段寄存器或挑选器。
  EBP:这也是一个作为指针的寄存器。一般,它被高档言语编译器用以缔造‘库房帧'来保留函数或进程的有些变量,不过,仍是那句话,你能够在其间保留你希望的任何数据。SS是它的默许段寄存器或挑选器。
  留心,这三个寄存器没有对应的8-bit分组。换言之,你能够通过SI、DI、BP作为别号拜访他们的低16位,却没有方法直接拜访他们的低8位。
  C、段挑选器:
  实方法下的段寄存器到维护方法下摇身一变就成了挑选器。纷歧样的是,实方法下的“段寄存器”是16-bit的,而维护方法下的挑选器是32-bit的。
  CS 代码段,或代码挑选器。同IP寄存器(稍后介绍)一起指向其时正在施行的那个地址。处理器施行时从这个寄存器指向的段(实方法)或内存(维护方法)中获取指令。除了跳转或别的分支指令以外,你无法批改这个寄存器的内容。
  DS 数据段,或数据挑选器。这个寄存器的低16 bit连同ESI一起指向的指令行将处理的内存。一起,悉数的内存操作指令 默许状况下都用它指定操作段(实方法)或内存(作为挑选器,在维护方法。这个寄存器能够被装入恣意数值,可是在这么做的时分需求留神一些。方法是,首要把数据送给AX,然后再把它从AX传送给DS(当然,也能够通过库房来做).
  ES 附加段,或附加挑选器。这个寄存器的低16 bit连同EDI一起指向的指令行将处理的内存。一样的,这个寄存器能够被装入恣意数值,方法和DS相似。
  FS F段或F挑选器(估测F或许是Free?)。能够用这个寄存器作为默许段寄存器或挑选器的一个代替品。它能够被装入任何数值,方法和DS相似。
  GS G段或G挑选器(G的意义和F一样,没有在Intel的文档中阐明)。它和FS简直彻底一样。
  SS 库房段或库房挑选器。这个寄存器的低16 bit连同ESP一起指向下一次库房操作(push和pop)所要运用的库房地址。这个寄存器也能够被装入恣意数值,你能够通过入栈和出栈操作来给他赋值,不过由于库房关于许多操作有很首要的意义,因而,禁绝确的批改有或许构成对库房的损坏。
  * 留心 必定不要在初学汇编的时期把这些寄存器弄混。他们十分首要,而一旦你把握了他们,你就能够对他们做恣意的操作了。段寄存器,或挑选器,在没有指定的状况下都是运用默许的那个。这句话在如今看来或许有点稀里迷糊,不过你很快就会在后边知道怎么去做。
  指令指针寄存器:
  EIP 这个寄存器十分的首要。这是一个32位宽的寄存器 ,同CS一起指向行将施行的那条指令的地址。不能够直接批改这个寄存器的值,批改它的仅有方法是跳转或分支指令。(CS是默许的段或挑选器)
  上面是最根柢的寄存器。下面是一些别的的寄存器,你乃至或许没有风闻过它们。(都是32位宽):
  CR0, CR2, CR3(操控寄存器)。举一个比方,CR0的效果是切换实方法和维护方法。
  还有别的一些寄存器,D0, D1, D2, D3, D6和D7(调试寄存器)。他们能够作为调试器的硬件支撑来设置条件断点。
  TR3, TR4, TR5, TR6 和 TR? 寄存器(查验寄存器)用于某些条件查验

4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指针寄存器(EIP) 1个象征寄存器(EFlags)

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来指明移位的位数;
寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默许的操作数参加运算,也可用于寄存I/O的端口地址。在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来寄存存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不只可传送数据、暂存数据保留算术逻辑运算效果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
2、变址寄存器
32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应早年CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们首要用于寄存存储单元在段内的偏移量,用它们可完毕多种存储器操作数的寻址方法,为以纷歧样的地址方法拜访存储单元供应便当。变址寄存器不行切开成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算效果。它们可作一般的存储器指针运用。在字符串操作指令的施行进程中,对它们有特定的恳求,而且还具有分外的功用。
3、指针寄存器
32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应早年CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。
寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),首要用于寄存库房内存储单元的偏移量,用它们可完毕多种存储器操作数的寻址方法,为以纷歧样的地址方法拜访存储单元供应便当。指针寄存器不行切开成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来反映程序中指令的施行次第。
6、象征寄存器
一、运算效果象征位
1、进位象征CF(Carry Flag)
进位象征CF首要用来反映运算是不是发作进位或借位。假定运算效果的最高位发作了一个进位或借位,那么,其值为1,不然其值为0。运用该象征位的状况有:多字(字节)数的加减运算,无符号数的巨细比照运算,移位操作,字(字节)之间移位,专门改动CF值的指令等。
2、奇偶象征PF(Parity Flag)
奇偶象征PF用于反映运算效果中”1〃的个数的奇偶性。假定”1〃的个数为偶数,则PF的值为1,不然其值为0。
运用PF可进行奇偶校验查看,或发作奇偶校验位。在数据传送进程中,为了供应传送的牢靠性,假定选用奇偶校验的方法,就可运用该象征位。
3、辅佐进位象征AF(Auxiliary Carry Flag)
在发作下列状况时,辅佐进位象征AF的值被置为1,不然其值为0:
(1)、在字操作时,发作低字节向高字节进位或借位时;
(2)、在字节操作时,发作低4位向高4位进位或借位时。
对以上6个运算效果象征位,在一般编程状况下,象征位CF、ZF、SF和OF的运用频率较高,而象征位PF和AF的运用频率较低。
4、零象征ZF(Zero Flag)
零象征ZF用来反映运算效果是不是为0。假定运算效果为0,则其值为1,不然其值为0。在差异运算效果是不是为0时,可运用此象征位。
5、符号象征SF(Sign Flag)
符号象征SF用来反映运算效果的符号位,它与运算效果的最高位一样。在微机体系中,有符号数选用补码标明法,所以,SF也就反映运算效果的正负号。运算效果为正数时,SF的值为0,不然其值为1。
6、溢出象征OF(Overflow Flag)
溢出象征OF用于反映有符号数加减运算所得效果是不是溢出。假定运算效果逾越其时运算位数所能标明的计划,则称为溢出,OF的值被置为1,不然,OF的值被清为0。”溢出”和”进位”是两个纷歧样意义的概念,不要混杂。假定不太了解的话,请查阅《核算安排成原理》课程中的有关章节。
二、状况操控象征位
状况操控象征位是用来操控CPU操作的,它们要通过专门的指令才华使之发作改动。
1、追寻象征TF(Trap Flag)
当追寻象征TF被置为1时,CPU进入单步施行方法,即每施行一条指令,发作一个单步接连恳求。这种方法首要用于程序的调试。指令体系中没有专门的指令来改动象征位TF的值,但程序员可用其它方法来改动其值。
2、接连容许象征IF(Interrupt-enable Flag)
接连容许象征IF是用来抉择CPU是不是照应CPU外部的可屏蔽接连宣告的接连恳求。但不论该象征为何值,CPU都有必要照应CPU外部的不行屏蔽接连所宣告的接连恳求,以及CPU内部发作的接连恳求。具体规矩如下:
(1)、当IF=1时,CPU能够照应CPU外部的可屏蔽接连宣告的接连恳求;
(2)、当IF=0时,CPU不照应CPU外部的可屏蔽接连宣告的接连恳求。
CPU的指令体系中也有专门的指令来改动象征位IF的值。
3、方向象征DF(Direction Flag)
方向象征DF用来抉择在串操作指令施行时有关指针寄存器发作调整的方向。具体规矩在第5.2.11节——字符串操作指令——中给出。在微机的指令体系中,还供应了专门的指令来改动象征位DF的值。
三、32位象征寄存器添加的象征位
1、I/O特权象征IOPL(I/O Privilege Level)
I/O特权象征用两位二进制位来标明,也称为I/O特权级字段。该字段指定了恳求施行I/O指令的特权级。假定其时的特权等级在数值上小于等于IOPL的值,那么,该I/O指令可施行,不然将发作一个维护反常。
2、嵌套使命象征NT(Nested Task)
嵌套使命象征NT用来操控接连回来指令IRET的施行。具体规矩如下:
(1)、当NT=0,用库房中保留的值康复EFLAGS、CS和EIP,施行惯例的接连回来操作;
(2)、当NT=1,通过使命改换完毕接连回来。
3、重主张象征RF(Restart Flag)
重主张象征RF用来操控是不是接受调试缺陷。规矩:RF=0时,标明”接受”调试缺陷,不然回绝之。在成功施行完一条指令后,处理机把RF置为0,当接遭到一个非调试缺陷时,处理机就把它置为1。
4、虚拟8086方法象征VM(Virtual 8086 Mode)
假定该象征的值为1,则标明处理机处于虚拟的8086方法下的作业状况,不然,处理机处于一般维护方法下的作业状况

上一篇:热电偶测温过错批改办法

下一篇:led芯片制作技能流程图

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部