几种常见寄存器作用

几种常见寄存器作用
几种常见寄存器作用

EAX、ECX、EDX、EBX寄存器的作用

一般寄存器:AX、BX、CX、DX

AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器

索引暂存器:SI、DI

SI:来源索引暂存器,DI:目的索引暂存器

堆叠、基底暂存器:SP、BP

SP:堆叠指标暂存器,BP:基底指标暂存器

EAX、ECX、EDX、EBX:為ax,bx,cx,dx的延伸,各為32位元

ESI、EDI、ESP、EBP:為si,di,sp,bp的延伸,32位元

eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。

比方说:add eax,-2 ; //可以认为是给变量eax加上-2这样的一个值。

这些32位寄存器有多种用途,但每一个都有“专长”,有各自的特别之处。

EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。

EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址。

ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。

EDX 则总是被用来放整数除法产生的余数。

ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),因为在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串.

EBP是"基址指针"(BASE POINTER), 它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一个标准的函数起始代码:

push ebp ;保存当前ebp

mov ebp,esp ;EBP设为当前堆栈指针

sub esp, xxx ;预留xxx字节给函数临时变量.

...

这样一来,EBP 构成了该函数的一个框架, 在EBP上方分别是原来的EBP, 返回地址和参数. EBP下方则是临时变量. 函数返回时作mov esp,ebp/pop ebp/ret 即可.

ESP 专门用作堆栈指针,被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。

386部分寄存器:

状态和控制寄存器组除了EFLAGS、EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3。

这几个寄存器中保存全局性和任务无关的机器状态。

CR0中包含了6个预定义标志,0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1,则保护模式启动,如果PE=0,则在实模式下运行。1位是监控协处理位MP(Moniter coprocessor),它与第3位一起决定:当TS=1时操作码WAIT是否产生一个“协处理器不能使用”的出错信号。第3位是任务转换位(Task Switch),当一个任务转换完成之后,自动将它置1。随着TS=1,就不能使用协处理器。CR0的第2位是模拟协处理器位EM (Emulate coprocessor),如果EM=1,则不能使用协处理器,如果EM=0,则允许使用协处理器。第4位是微处理器的扩展类型位ET(Processor Extension Type),其内保存着处理器扩展类型的信息,如果ET=0,则标识系统使用的是287协处理器,如果ET=1,则表示系统使用的是387浮点协处理器。CR0的第31位是分页允许位(Paging Enable),它表示芯片上的分页部件是否允许工作。

CR1是未定义的控制寄存器,供将来的处理器使用。

CR2是页故障线性地址寄存器,保存最后一次出现页故障的全32位线性地址。

CR3是页目录基址寄存器,保存页目录表的物理地址,页目录表总是放在以4K字节为单位的存储器边界上,因此,它的地址的低12位总为0,不起作用,即使写上内容,也不会被理会。

这几个寄存器是与分页机制密切相关的,因此,在进程管理及虚拟内存管理中会涉及到这几个寄存器,读者要记住CR0、CR2及CR3这三个寄存器的内容。

esp:寄存器存放当前线程的栈顶指针

ebp:寄存器存放当前线程的栈底指针

eip:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP 寄存器中读取下一条指令的内存地址,然后继续执行。

MCS-51系列特殊功能寄存器

MCS-51系列特殊功能寄存器(80H~FFH) 1.P0 (80H) 2.SP 栈指针(81H) 3.DPTR 数据指针(由DPH和DPL组成) DPL 数据指针低八位(82H) DPH 数据指针高八位(83H) 4.PCON 电源管理寄存器(87H) SMOD :波特率倍增位。SMOD=0时,不变;SMOD=1时,倍增。 GF1,GF0 :通用标志位。 PD :掉电方式位。PD=1时,进入掉电方式。 IDL :待机方式位。IDL=1时,进入待机方式。 5.TMOD 定时/记数方式寄存器(89H) GATE :门控位。GATE=0时,直接由TR启动定时器;GATE=1时,须外部INT为1时,且TR启动定时器。 C/T :功能选择位。C/T=0时,为定时器;C/T=1时,为计数器。 M1,M0 :方式选择位。

6.T CON 定时/记数控制寄存器(88H) TF1 :定时器1溢出标志。由硬件置1,并且进入中断;进入中断服务程序后,由硬件清0,查询方式下由软件清0。 TR1 :定时器运行控制位。TR1=0时,关闭T1;TR1=1时,启动T1。 TF0 :定时器0溢出标志。由硬件置1,并且进入中断;进入中断服务程序后,由硬件清0,查询方式下由软件清0。 TR0 :定时器运行控制位。TR0=0时,关闭T0;TR0=1时,启动T0。 IE1 :外部中断1请求标志。 IT1 :外部中断1触发方式。IT1=0时,为低电平触发方式;IT1=1时,为负跳变触发方式(边沿触发)。 IE0 :外部中断0请求标志。 IT0 :外部中断0触发方式。IT0=0时,为低电平触发方式;IT0=1时,为负跳变触发方式(边沿触发)。 7.P1 (90H) SM0,SM1 :串行方式控制。 SM2 :多机通讯控制位。SM2=0时,禁止多机通讯;SM2=1时,允许多机通讯。

寄存器(register)

寄存器 Scope of register: 寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。 1、寄存器- 特点及原理 寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。但同存储器相比,寄存器又有自己独有的特点: ①寄存器位于CPU内部,数量很少,仅十四个; ②寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit数据,对于386/486处理器中的一些寄存器则能存储32bit数据; ③每个内部寄存器都有一个名字,而没有类似存储器的地址编号。 寄存器的功能十分重要,CPU对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处理。外部寄存器是计算机中其它一些部件上用于暂存数据的寄存器,它与CPU之间通过“端口”交换数据,外部寄存器具有寄存器和内存储器双重特点。有些时候我们常把外部寄存器就称为“端口”,这种说法不太严格,但经常这样说。 外部寄存器虽然也用于存放数据,但是它保存的数据具有特殊的用途。某些寄存器中各个位的0、1状态反映了外部设备的工作状态或方式;还有一些寄存器中的各个位可对外部设备进行控制;也有一些端口作为CPU同外部设备交换数据的通路。所以说,端口是CPU和外设间的联系桥梁。CPU对端口(Ports)的访问也是依据端口的“编号”(地址),这一点又和访问存储器一样。不过考虑到机器所联接的外设数量并不多,所以在设计机器的时候仅安排了1024个端口

寄存器简单理解

GPIOB_BASE是一个地址,这个地址是GPIOB一系列寄存器的首地址,后面地址依次是GPIOB 的寄存器,将这个地址转换为结构体形式,并将后面寄存器按顺序定义在结构体里面,这样访问寄存器就可以通过引用结构体的形式了而不必书写寄存器的地址来访问寄存器。 寄存器用途: 1.可将寄存器内的数据执行算术及逻辑运算; 2.存于寄存器内的地址可用来指向内存的某个位置,即寻址; 3.可以用来读写数据到电脑的周边设备。 AX 累加器,得名原因是最初常使用ADD AX,n这样的指令 CX 计数器,得名原因是最常使用CX的值作为重复操作的次数 BX 常用作地址寄存器,如MOV AX,[BX],把BX所指地址中的数取到AX中去 DX 通用寄存器 所讲的寄存器都是以x86为基础的,那么这种CPU内,寄存器可分为以下几种: 1.EAX、EBX、ECX、EDX等通用寄存器——从通用上来讲,它所存储的东西,只要它的容积所容许的话,什么都是可以存储的; 2.CS、SS、ES等段寄存器——它所存储的只能是地址,它的作用是从寻址上可以体现出来; 3.EIP,也称为指令指针 4.EFLAGS寄存器,俗称为标志寄存器——所存储的是与CPU的每一个执行的指令有关。是关系到CPU每一个指令的执行相关内容与特殊的关联,即CPU所执行的指令是否违规,它的指令是否有进位,它的指令是否有溢出,都是在标志寄存器中能表现与表达出来; 5.浮点单元,这里面之所以只浮点单元,是因为在它里面还有一些小的寄存分类,主要是数学上的浮点上的计算 6.MMX指令使用的8个64位寄存器 7.单指令、多数据操作(SIMD,single-instruction,multiple-data)使用的8个128位XMM寄存器

51_52系列单片机特殊功能寄存器及资源映射方式总结

51系列单片机特殊功能寄存器总结 第一节:片内RAM映射: 51:00H_7FH 128B片内(DATA),其中00H-07H: bank0,08H-0FH: bank1, 10H-17H: bank2,18H-1FH:bank3. 20H-2FH: 位寻址区(bdata) 30H-7FH: 堆栈区。 80H-FFH: SFR区 52:增加了80H-FFH间接寻址的片内RAM(IDATA) 第二节:特殊功能寄存器(51) ①TCON,地址:88H,定时器计数器控制,中断控制 IT0/1:外部中断触发方式控制,置0,为低电平触发,置1,为下降沿触发。每个机器周期的S5P2器件多外部触发采样。响应中断需要两个机器 周期。 IE0/1:外部中断请求标志,CPU响应中断后,硬件自动将IE清0 TFx,定时器Tx溢出标志,计数溢出时,硬件将其置位,响应中断后,硬件将其清0,该位可由程序查询。 TRx, 定时器x运行控制,置1则启动定时器,清0则停止定时器。 ②TMOD,地址:89H, 定时器计数器工作方式控制 counter对外部输入外冲计数,计一次数需要两个机器周期。 GATE: 取反后与外部中断输入或运算后再同TCON的TRx位相与控制计数器的启与停,GATE为0时,允许TRx开启或停止计数器,为1时,允许INTx开启或停止计数器。 ③TL0, 地址:8AH, 定时器0低八位 ④TL1, 地址:8BH, 定时器1低八位

⑤TH0, 地址:8CH, 定时器0高八位 ⑥TH1, 地址:8DH, 定时器1高八位1 ⑦SCON, 地址:98H,串行通信控制寄存器 S M2:方式2和方式3的多机通信控制位,在方式0中,SM2应置0。 REN:允许串行接收位,由软件置1时,允许接收,清0时。禁止接收 TB8:方式2和方式3中,发送的第9位数据,需要时由软件置位或复位。 RB8: 方式2和方式3中,接收到的第9位数据,在方式1时,RB是接收到停止位,在方式0时,不使用RB8. TI:接收中断标志,由硬件置1,在方式0时,串行发送到第8位结束时置1;在其他方式,串行口发送停止位时置1。TI必须由软件清0。 RI:接收中断标志,由硬件置1。在方式0时(SM2应置0),接收到第8位结束时置1,当SM2=0的其他方式(方式0,1,3)时,接收到停止位置位“1”,当SM2=1时,若串口工作在方式2和3,接收到的第9位数据(RB8)为1时,才激活RI。在方式1时,只有接收到有效的停止位时才会激活RI。RI必须由软件清0 ⑧SBUF, 地址:99H,串行通信数据缓冲器 ⑨IE, 地址:A8H,中断使能控制寄存器 EA: globle interuption Enable, 1: Enable, 0: Disable ET2: timers2 flowover interuption Enable for52, 1: Enable, 0: Disable ES: serrial port interuption Enable, 1: Enable, 0: Disable ET1/0: timers1/0 flowover interuption Enable, 1: Enable, 0: Disable EX1/0: external interuption Enable, 1: Enable, 0: Disable

ARM寄存器详解

ARM 处理器有二十七个寄存器,其中一些是在一定条件下使用的,所以一次只能使用十六 个。 R0~R7:是通用寄存器并可以用做任何目的。 R8~R12:是通用寄存器,但是在切换到FIQ模式的时候,使用它们的影子(shadow)寄存器。 R13:被称为栈指针寄存器,常用来保存栈指针。 R14:链接寄存器,常用来保存函数返回地址 R15:是程序指针PC CPSR:(Current Program Status Register)当前程序状态寄存器,CPSR 寄存期保存当前程序运行的状态。 0 0 0 0 0 User26 模式 0 0 0 0 1 FIQ26 模式 0 0 0 1 0 IRQ26 模式 0 0 0 1 1 SVC26 模式 1 0 0 0 0 User 模式 1 0 0 0 1 FIQ 模式 1 0 0 1 0 IRQ 模式 1 0 0 1 1 SVC 模式 1 0 1 1 1 ABT 模式 1 1 0 1 1 UND 模式

ARM寻址方式 1.立即数寻址 ARM 指令的立即数寻址是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数。ADD R0,R0,#1 ;R0←R0 + 1 ADD R0,R0,#0x3A ;R0←R0 + 0x3A 在以上 2 条指令中,第2个源操作数即为立即数,实际使用时以“#”符

号为前缀。 2.寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采 用的一种方式,也是一种执行效率较高的寻址方式。如以下的指令。 ADD R0,R1,R2 ;R0←R1 + R2 该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。 3.寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器 中。例如以下指令。 ADD R0,R1,[R2] ;R0←R1 + [R2] LDR R0,[R1] ;R0←[R1] 在第1 条指令中,以寄存器R2 的内容作为操作数的地址,然后与R1相加,其结果存入 寄存器R0中。 第2条指令将以 R1 的值为地址的存储器中的内容送到寄存器R0中。 4.基址变址寻址 基址变址的寻址方式就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给 出的地址偏移量相加,从而得到一个操作数的有效地址。如下面的几条指令所示。 LDR R0,[R1,#0x0A] ;R0←[R1 + 0x0A] LDR R0,[R1,#0x0A]!;R0←[R1 + 0x0A]、R1←R1 + 0x0A 在第1条指令中,将寄存器R1 的内容加上0x3A 形成操作数的有效地址,将该地址处的 操作数送到寄存器R0中。 在第2条指令中,将寄存器R1的内容加上0x0A形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增0x0A个字节。 5.多寄存器寻址 采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用 一条指令完成传送最多 16 个通用寄存器的值。比如下面的指令。LDMIA R0,{R1,R2,R3,R4} ;R1←[R0] ;R2←[R0 + 4]

51单片机特殊功能寄存器功能一览表

51单片机特殊功能寄存器功能一览表 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。 8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY =0 例:78H+97H(01111000+10010111) AC:辅助进、借位(高半字节与低半字节间的进、借位)。

实验二 通用寄存器实验

实验二通用寄存器实验 一、实验目的 1.熟悉通用寄存器的数据通路。 2.了解通用寄存器的构成和运用。 二、实验要求 掌握通用寄存器R3~R0的读写操作。 三、实验原理 实验中所用的通用寄存器数据通路如下图所示。由四片8位字长的74LS574组成R1 R0(CX)、R3 R2(DX)通用寄存器组。图中X2 X1 X0定义输出选通使能,SI、XP控制位为源选通控制。RWR为寄存器数据写入使能,DI、OP为目的寄存器写选通。DRCK信号为寄存器组打入脉冲,上升沿有效。准双向I/O输入输出端口用于置数操作,经2片74LS245三态门与数据总线相连。 图2-3-3 通用寄存器数据通路

四、实验内容 1. 实验连线 K23~K0置“1”,灭M23~M0控位显示灯。然后按下表要求“搭接”部件控制电路。 连线 信号孔 接入孔 作用 有效电平 1 DRCK CLOCK 单元手动实验状态的时钟来源 上升沿打入 2 X2 K10(M10) 源部件译码输入端X2 三八译码 八中选一 低电平有效 3 X1 K9(M9) 源部件译码输入端X1 4 X0 K8(M8) 源部件译码输入端X0 5 XP K7(M7) 源部件奇偶标志:0=偶寻址,1=奇寻址 6 SI K20(M20) 源寄存器地址:0=CX ,1=DX 7 RWR K18(M18) 通用寄存器写使能 低电平有效 8 DI K17(M17) 目标寄存器地址:0=CX ,1=DX 9 OP K16(M16) 目标部件奇偶标志:0=偶寻址,1=奇寻址 2. 寄存器的读写操作 ① 目的通路 当RWR=0时,由DI 、OP 编码产生目的寄存器地址,详见下表。 通用寄存器“手动/搭接”目的编码 目标使能 通用寄存器目的编址 功能说明 RW(K18) DI(K17) OP(K16) T 0 0 0 ↑ R0写 0 0 1 ↑ R1写 0 1 0 ↑ R2写 0 1 1 ↑ R3写 ② 通用寄存器的写入 通过“I/O 输入输出单元”向R0、R1寄存器分别置数27h 、37h ,操作步骤如下: 通过“I/O 输入输出单元”向R2、R3寄存器分别置数47h 、57h ,操作步骤如下: ③ 源通路 当X2~X0=001时,由SI 、XP 编码产生源寄存器,详见下表。 通用寄存器“手动/搭接”源编码 置数 I/O=XX01h 数据来源 I/O 单元 寄存器 R0=01h K10~K7=1000 按【单拍】按钮 置数 I/O=XX11h 寄存器 R1=11h 按【单拍】按钮 K18~K16=000 K18~K16=001 置数 I/O=XX21h 数据来源 I/O 单元 寄存器 R2=21h K10~K7=1000 按【单拍】按钮 置数 I/O=XX31h 寄存器 R3=31h 按【单拍】按钮 K18~K16=010 K18~K16=011

特殊功能寄存器地址与控制位

/************************************************************ * 特殊功能寄存器地址和控制位 ************************************************************/ /*中断使能1*/ #define IE1_ 0x0000 sfrb IE1 = IE1_; #define WDTIE 0x01 /*看门狗中断使能*/ #define OFIE 0x02 /*外部晶振故障中断使能*/ #define NMIIE 0x10 /*非屏蔽中断使能*/ #define ACCVIE 0x20 /*可屏蔽中断使能/flash写中断错误*/ #define URXIE0 0x40 /*串口0接收中断使能*/ #define UTXIE0 0x80 /*串口0发送中断使能*/ /*中断标志1*/ #define IFG1_ 0x0002 sfrb IFG1 = IFG1_; #define WDTIFG 0x01 /*看门狗中断标志*/ #define OFIFG 0x02 /*外部晶振故障中断标志*/ #define NMIIFG 0x10 /*非屏蔽中断标志*/ #define URXIFG0 0x40 /*串口0接收中断标志*/ #define UTXIFG0 0x80 /*串口0发送中断标志*/ /* 中断模式使能1 */ #define ME1_ 0x0004 sfrb ME1 = ME1_; #define URXE0 0x40 /* 串口0接收中断模式使能 */ #define USPIE0 0x40 /* 同步中断模式使能 */ #define UTXE0 0x80 /* 串口0发送中断模式使能 */ /* 中断使能2 */ #define IE2_ 0x0001 sfrb IE2 = IE2_; #define URXIE1 0x10 /* 串口1接收中断使能 */ #define UTXIE1 0x20 /* 串口1发送中断使能 */ /* 中断标志2 */ #define IFG2_ 0x0003 sfrb IFG2 = IFG2_; #define URXIFG1 0x10 /* 串口1接收中断标志 */ #define UTXIFG1 0x20 /* 串口1发送中断标志 */ /* 中断模式使能2 */ #define ME2_ 0x0005 sfrb ME2 = ME2_; #define URXE1 0x10 /* 串口1接收中断模式使能 */ #define USPIE1 0x10 /* 同步中断模式使能 */ #define UTXE1 0x20 /* 串口1发送中断模式使能 */ /************************************************************

《计算机组成原理》典型例题讲解

分析设计计算: 1.CPU 结构如图1所示,其中有一个累加寄存器AC ,一个状态条件寄存器,各部分之间的连线表示数据通路,箭头表示信息传送方向。 (1) 标明图中四个寄存器的名称。 (2) 简述指令从主存取到控制器的数据通路。 (3) 简述数据在运算器和主存之间进行存 / 取访问的数据通路。 图1 解: (1) a 为数据缓冲寄存器 DR ,b 为指令寄存器 IR ,c 为主存地址寄存器, d 为程序计数器PC 。 (2) 主存 M →缓冲寄存器 DR →指令寄存器 IR →操作控制器。 (3) 存贮器读 :M →缓冲寄存器DR →ALU →AC 存贮器写 :AC →缓冲寄存器DR →M 2. 某机器中,配有一个ROM 芯片,地址空间0000H —3FFFH 。现在再用几个16K ×8的芯片构成一个32K ×8的RAM 区域,使其地址空间为8000H —FFFFH 。假设此RAM 芯片有/CS 和/WE 信号控制端。CPU 地址总线为A15—A0,数据总线为D7—D0,控制信号为R//W ,MREQ(存储器请求),当且仅当MREQ 和R//W 同时有效时,CPU 才能对有存储器进行读(或写)。 (1)满足已知条件的存储器,画出地址码方案。 (2)画出此CPU 与上述ROM 芯片和RAM 芯片的连接图。 解:存储器地址空间分布如图1所示,分三组,每组16K ×8位。 由此可得存储器方案要点如下: (1) 用两片16K*8 RAM 芯片位进行串联连接,构成32K*8的RAM 区域。 片内地址 :A 0 ——A 13 ,片选地址为:A 14——A 15; (2) 译码使用2 :4 译码器; (3) 用 /MREQ 作为2 :4译码器使能控制端,该信号低电平(有效) 时,译码器工作。

arm通用寄存器及其别名

AMR寄存器的别名+ APCS 默认情况下,arm处理器中的通用寄存器被称为:r0、r1...r14等,在APCS中为arm通用寄存器定义了别名。 在某些情况下(比如多人协作编辑汇编代码,或需要修改其它人所写的汇编代码时),使用APCS所定义的别名有助于提高代码的可读性和兼容性。 arm通用寄存器及其别名对照表:

The following register names are predeclared: r0-r15 and R0-R15 a1-a4 (argument, result, or scratch registers, synonyms for r0 to r3) v1-v8 (variable registers, r4 to r11) sb and SB (static base, r9) ip and IP (intra-procedure-call scratch register, r12) sp and SP (stack pointer, r13) lr and LR (link register, r14) pc and PC (program counter, r15). arm中r12的用途 原文作者在维护1个以前的程序,该程序包括应用、库文件以及linux device driver。该程序原来使用arm-linux-gcc 3.4.3编译,现在改用arm-linux-gcc 4.1.1进行编译时发现程序无法运行。 经原文作者测试,发现当使用shared library形式编译程序后无法运行,而使用static linking形式编译程序后可正常运行。

寄存器与7种寻址方式

一、寄存器 总共有14个16位寄存器,8个8位寄存器 通用寄存器: 数据寄存器: AH(8位) AL(8位) AX(16位) (AX和AL又称累加器) BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器) CH(8位) CL(8位) CX(16位) (CX用于字符串操作,控制循环的次数,CL 用于移位) DH(8位) DL(8位) DX(16位) (DX一般用来做32位的乘除法时存放被除数或者保留余数) 指针寄存器: SP 堆栈指针(存放栈顶地址) BP 基址指针(存放堆栈基址偏移) 变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移, 即作为存储器(短)指针使用。作为通用寄存器,它们可以保存16位算术逻辑运算中的操 作数和运算结果,有时运算结果就是需要的存储单元地址的偏移. SI 源地址(源变址寄存器) DI 目的地址(目的变址寄存器) 控制寄存器: IP 指令指针 FLAG 标志寄存器 ①进位标志CF,记录运算时最高有效位产生的进位值。

②符号标志SF,记录运算结果的符号。结果为负时置1,否则置0。 ③零标志ZF,运算结果为0时ZF位置1,否则置0。 ④溢出标志OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。 ⑤辅助进位标志AF,记录运算时第3位(半个字节)产生的进位值。 ⑥奇偶标志PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。 段寄存器 CS 代码段IP DS 数据段 SS 堆栈段SP BP ES 附加段 二、七种寻址方式: 1、立即寻址方式: 操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。 这种操作数成为立即数。立即数可以是8位的,也可以是16位的。 例如: 指令: MOV AX,1234H 则: AX = 1234H 2、寄存器寻址方式: 操作数在CPU内部的寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。 这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数 因而可以取得较高的运算数度。

51单片机特殊功能寄存器详细说明

/*-------------------------------------------------------------------------- REG51.H Header file for generic 80C51 and 80C31 microcontroller. Copyright (c 1988-2001 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. --------------------------------------------------------------------------*/ /* BYTE Register */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; 程序状态字 sfr ACC = 0xE0; 累加器 sfr B = 0xF0; B寄存器 sfr SP = 0x81; 堆栈指针 sfr DPL = 0x82; 数据指针低八位 sfr DPH = 0x83; 数据指针高八位 sfr PCON = 0x87; 波特率选择寄存器 sfr TCON = 0x88; 定时器/计数器控制寄存器

sfr TMOD = 0x89; 定时器方式选择寄存器 sfr TL0 = 0x8A; 定时器0低八位 sfr TL1 = 0x8B; 定时器1低八位 sfr TH0 = 0x8C; 定时器0高八位 sfr TH1 = 0x8D; 定时器1高八位 sfr IE = 0xA8; 中断允许寄存器 sfr IP = 0xB8; 中断优先级寄存器 sfr SCON = 0x98; 串行控制寄存器 sfr SBUF = 0x99; 串行数据缓冲器 /* BIT Register */ /* PSW */ 程序状态字 sbit CY = 0xD7; 有无进位或者借位 sbit AC = 0xD6; Auxiliary Carry有无低四位向高四位的进位或借位 sbit F0 = 0xD5; 用户管理的标志位,可根据自己的需求设定 sbit RS1 = 0xD4; 这两位用于选择当前工作寄存器区。8051有8个8位寄存器R0~R7,它 们在RAM中的地址可以根据用户需要来确定。 sbit RS0 = 0xD3; RS1 RS0:R0~R7的地址0 0:00H~07H 0 1:08H~0FH 1 0:10H~17H 1 1:18H~1FH

32位PowerPC构架通用寄存器分析及总结一

32位PowerPC构架通用寄存器分析及总结一 第一部分 32位 PowerPC构架下寄存器概述 32 位PowerPC构架寄存器模型可以分成三个类级别:UISA,VEA,OEA,我们根据这三个级别把PowerPC所使用的所有寄存器分为三类: 第一类:用户指令集构架(UISA-User Instruction Set Architecture)下所使用的寄存器;第二类:虚拟环境构架(VEA-Virtual Environment Architecture)下所使用的寄存器;第三类:操作系统环境(OEA-Operating Environment Architecture)下所使用的寄存器;PowerPC指令集构架为所有的算术逻辑运算指令定义了“寄存器到寄存器”格式的指令,这些指令的操作数来自或者来自于寄存器,或者来自于指令中的立即数。而对于“三寄存器”格式的指令,PowerPC指令集定义其中一个寄存器用来存目的操作数,另外两个寄存器用来存放源操作数。这样的话,存放源操作数的寄存器还可以被其它指令使用,从而减少了某些操作的指令数目。并且对于访问寄存器,PowerPC构架定义了明确的load和store访存指令(这是RISC指令集的典型特点)。 备注:寄存器中的保留位允许软件写任何值(其实就是0或者1),但是读出来的值,未必是我们写出来的值。它的值依赖于具体的执行系统。 接下来,我们分别来介绍这三类寄存器。 第二部分 UISA寄存器集合 用户模式下的寄存器可以被所有的用户级软件和特权级软件所使用,它包含以下的寄存器:32个通用寄存器GPRs(General-purpose registers):GPR0-GPR31; 32个浮点寄存器FRPs(Floating-point registers):FPR0-FPR31; 1个条件寄存器:CR(Condition register); 1个XER寄存器; 1个LR(Link register)寄存器; 1个CTR(Count register)寄存器; 1个浮点状态控制寄存器:FPSCR(Floating-point status and control register); 备注:不管是单精度数还是双精度数,在浮点寄存器中都是以双精度格式存储。 示意图如下:

ARM处理器共有37个寄存器其中包括.

ARM处理器共有37个寄存器。其中包括: **31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。 **6个状态寄存器。这些寄存器都是32位寄存器。 ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。 **************************************************** 通用寄存器 ***************************************************8 通用寄存器分为以下三类:备份寄存器、未备份寄存器、程序计数器PC 未备份寄存器 未备份寄存器包括R0-R7。对于每一个未备份寄存器来说,所有处理器模式下都是使用同一个物理寄存器。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的场合都可以使用未备份寄存器。 备份寄存器 对于R8-R12备份寄存器来说,每个寄存器对应两个不同的物理寄存器。系统为将备份寄存器用于任何的特殊用途,但是当中断处理非常简单,仅仅使用R8-R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理非常迅速。 对于R13,R14备份寄存器来说,每个寄存器对应六个不同的物理寄存器,其中的一个是系统模式和用户模式共用的;另外的五个对应于其他的五种处理器模式。采用下面的记号来区分各个物理寄存器: R13_ 其中MODE可以是下面几种模式之一:usr,svc,abt,und,irq,fiq 程序计数器PC 可以作为一般的通用寄存器使用,但有一些指令在使用R15时有一些限制。由于ARM采用了流水线处理器机制,当正确读取了PC的值时,该值为当前指令地址值加上8个字节。也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。由于ARM指令是字对齐的,PC值的第0位和第一位总为0。

51单片机的特殊功能寄存器

51单片机的特殊功能寄存器 通过前面课程的学习,我们已知道了单片机的内部有ROM、有RAM、有并行I/O 口,那么,除了这些东西之外,单片机内部究竟还有些什么?这些个零碎的东西怎么连在一起的? 下面就让我们来对单片机内部作一个完整的分析吧! 从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、 P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机 的内部包含了这么多的东西。 对图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O口的锁存器就可以了,那么对于定时 /计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。事实上,我们已接触过P1 这个特殊功能寄存器了,还有哪些呢?看下表 符号地址功能介绍 B F0H B寄存器 ACC E0H 累加器 PSW D0H 程序状态字 IP B8H 中断优先级控制寄存器 P3 B0H P3口锁存器 IE A8H 中断允许控制寄存器

P2 A0H P2口锁存器 SBUF 99H串行口锁存器 SCON 98H串行口控制寄存器 P1 90H P1口锁存器 TH1 8DH定时器/计数器1(高8位) TH0 8CH 定时器/计数器1(低8位) TL1 8BH 定时器/计数器0(高8位) TL0 8AH 定时器/计数器0(低8位) TMOD 89H定时器/计数器方式控制寄存器 TCON 88H 定时器/计数器控制寄存器 DPH 83H 数据地址指针(高8位) DPL 82H 数据地址指针(低8位) SP 81H 堆栈指针 P0 80H P0口锁存器 PCON 87H电源控制寄存器 下面,我们介绍一下几个常用的SFR。 1、ACC---是累加器,通常用A表示。 这 是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在 ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则 Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器。 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。8051中的运算器是一种8位的运算器,我们知道,8位运算器只

汇编语言学习笔记之通用寄存器

汇编语言学习笔记之通用寄存器 从昨天开始,正式拉开了学习汇编语言的序幕,对于汇编语言的一些特点以及数据的表示及类型做了一番了解,由于这些东西每一种语言里都要介绍,而且一时半会也真弄不太明白它们的具体使用,也就粗略的看了一下,留待在今后的学习中结合实例加以体会吧。 而通用寄存器应该说是CPU内部重要的数据存储资源,学习汇编语言必须要掌握清它们的功能。因此汇编语言学习的第一篇学习笔记就从通用寄存器开始了。以下内容摘自汇编教程中。 寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。 寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。 另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。有关“寄存器的分配策略”在后续课程《编译原理》中会有详细的介绍。 由于16位/32位CPU是微机CPU的两个重要代表,所以,在此只介绍它们内部寄存器的名称及其主要功能。 1、16位寄存器组 16位CPU所含有的寄存器有: 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所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX), 2个变址和指针寄存器(ESI和EDI), 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS),

通用寄存器实验报告

6.9 通用寄存器实验报告 一、实验目的: 1、了解通用寄存器组的用途及对CPU的重要性。 2、掌握通用寄存器组的设计方法。 二、实验内容: 1、通用寄存器组的作用 通用寄存器组是CPU的重要组成部分。 (1)从存储器和外部设备(除DMA方式外)取来的数据要放在通用寄存器中; (2)向存储器和外部设备(除DMA方式外)输出的数据从通用寄存器中取出; (3)参加算术运算和逻辑运算的数据从通用寄存器组中取出,同时通用寄存器也是运算结果的暂存地。 (4)通用寄存器组有两个读端口,负责提供进行算术逻辑单元需要的源操作数和目的操作数;有一个写端口,负责将运算结果保存到指定的寄存器内。 2、通用寄存器组功能实现 根据通用寄存器组的功能要求,一个只有四个16位寄存器的通用寄存器组的框图如下图所示: ⑴寄存器部分: 当reset为低电平时,将四个16位寄存器R0-R3复位为0;当寄存器的write和sel

为高电平时,在时钟信号clk的上升沿将D端的输入D[15-0]写入寄存器,然后送到寄存器的输出Q[15-0]。4个寄存器的允许写信号write和外部产生的目的寄存器写信号DRWr 直接相连。每个寄存器还有另一个选择信号sel,它决定哪一个寄存器进行写操作。4个寄存器的选择信号分别和2-4译码器产生的sel00、sel01、sel10、sel11相连。只有当一个寄存器被选中(sel为高电平时),才允许对该寄存器进行写操作。 ⑵ 2-4译码器: 2-4译码器的输入sel[1-0]接DR[1-0],2-4译码器对2位的输入信号sel[1-0]进行2-4译码,产生4个输出sel00、sel01、sel10、sel11,分别送往4个寄存器R0、R1、R2和R3的选择端sel。 ⑶ 4选1多路器 4选1多路选择器1从4个寄存器R0、R1、R2和R3的输出Q[15-0]选择1路送到DR_data[15-0],给算术逻辑单元提供目的操作数;选择信号sel[1-0]接DR[1-0]。4选1多路选择器2从4个寄存器R0、R1、R2和R3的输出Q[15-0]选择1路送到SR_data[15-0],给算术逻辑单元提供源操作数;选择信号sel[1-0]接SR[1-0]。 三、实验要求: 1、实验设计目标 设计一个通用寄存器组满足以下要求: (1)通用寄存器组中有4个16位的寄存器。 (2)当复位信号reset=0时,将通用寄存器组中的4个寄存器清零。 (3)通用寄存器组中有1个写入信号,当DRWr=1时,在时钟clk的上升沿将数据总线上的数写入DR[1-0]指定的寄存器。 (4)通用寄存器组中有两个读出端口,一个对应算术逻辑单元的目的操作数DR,另一个对应算术逻辑单元的源操作数SR。DR[1-0]选择目的操作数;SR[1-0]选择源操作数。 (5)设计要求层次设计。底层的设计实体有三个:16位寄存器,具有复位功能和允许写功能;一个2-4译码器,对应寄存器写选择;一个4选1多路开关,负责选择寄存器的读出。顶层设计构成一个完整的通用寄存器组。 2、顶层设计实体的引脚要求 引脚要求对应关系如下: (1)clk对应试验台上的时钟(单脉冲)。 (2)reset对应实验台上的CPU复位信号CPU_RST。 (3)SR[1-0]对应实验台开关SA1,SA0。

实验CPU通用寄存器组 计算机组成原理

实验CPU 通用寄存器组 一、实验目的 (1)了解通用寄存器组的用途及对CPU的重要性。 (2)掌握通用寄存器组的设计方法。 二、实验原理 通用寄存器组是CPU的重要组成部分。从存储器取来的数据要放在通用寄存器中;从外部设备取来的数据除DMA方式外,要放在通用寄存器中。向存储器输出的数据也是从通用寄存器中取出;向外部设备输出的数据除DMA方式外也是从通用寄存器中取出来的。由于从通用寄存器组中取数据比从存储器或者外部设备取数据快得多,因此参加算术运算和逻辑运算的数据一般是从通用寄存器组中取出,它向算术逻辑单元ALU提供了进行算术运算和逻辑运算所需要的两个操作数,同时又是运算结果的暂存地。通用寄存器组内寄存器的数目与CPU性能有关,CPU性能预告,通用寄存器组内的寄存器数目越多。由于算术逻辑运算需要两个操作数,因此通用寄存器组有两个读端口,负责提供进行算术逻辑单元需要的源操作数和目的操作数。通用寄存器组有1个写端口,负责将运算结果保存到指定的寄存器内。根据通用寄存器组的功能要求,一个只有4个16位寄存器的通用寄存器组的框图如下图所示。 在上图所示的电路中,当reset为低电平时,将4个16位寄存器R0~R3复位为0。当寄存器的write和sel为高电平时,在时钟信号clk的上升沿将D端的输入D[15..0]写入寄存器,然后送到寄存器的输出Q[15..0]。4个寄存器的允许写信号write和外部产生的目的寄存器写信号DRWr直接相连。每个寄存器还有另一个选择信号sel,它决定哪一个寄存器进行写操作。4个寄存器的选择信号分别和2-4译码器产生的sel00、sel01、sel10和sel11相连。只有当1个寄存器被选中时,才允许对该寄存器进行写操作。2-4译码器的输入sel[1..0]接DR[1..0],

相关文档
最新文档