数据寄存器

寄存器与存储器的区别

我们两清 提交于 2019-12-19 00:53:02
1、存储器功能: 存放指令和数据 ,并能由中央处理器(CPU)直接随机存取。 2、寄存器功能: 可将寄存器内的数据 执行算术及逻辑运算 ;存于寄存器内的地址可用来指向内存的某个位置,即寻址;可以用来 读写数据到电脑的周边设备 。 3、区别: 寄存器的速度比主存储器的速度要快很多,由于寄存器的容量有限,所以将 不需要操作的数据存放在主存储器 中,主存储器中的数据必须放入寄存器材能够进行操作。 简单地说: 寄存器 是 操作数据 的地方, 存储器 是 存放数据 的地方。 寄存器一般是指由基本的 RS触发器 结构衍生出来的D触发,就是一些 与非门 构成的结构,一般整合在CPU内,其读写速度跟CPU的运行速度基本匹配,但因为性能优越,所以造价昂贵,一般好的CPU也就只有几MB的2级缓存,1级缓存更小。 存储器 在CPU外,一般指 硬盘 , U盘 等可以在切断电源后保存资料的设备,容量一般比较大,缺点是 读写速度都很慢 ,普通的机械硬盘读写速度一般是50MB/S左右。内存和寄存器就是为了解决存储器读写速度慢而产生的多级存储机制。 来源: CSDN 作者: l羊羊a 链接: https://blog.csdn.net/weixin_43444901/article/details/103605080

ARM装配说明MCR/MRC学习

走远了吗. 提交于 2019-12-18 13:50:36
MCR指令ARM数据寄存器传送到协处理器寄存器。假设协处理器不能成功运行操作。会产生未定义指令中止。 语法教学格式: MCR{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>} MCR2 p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>} 当中。<cond>为指令运行的条件码。当<cond>忽略时指令为无条件运行。MCR2中,<cond>为Ob1111,指令为无条件运行指令。 <opcode_1>为协处理器将运行的操作的操作码。 对于CP15协处理器来说, <opcode_1>永远为0b000,当<opcode_1>不为0b000时,该指令操作结果不可预知。 <Rd>作为元寄存器的ARM寄存器。其值被传送到得协处理器寄存器中。 <Rd>不能为PC。当其为PC时。指令操作结果不可预知。 <CRn>作为目标寄存器的协处理器寄存器,其编号可能为C0,C1....C15。 <CRm>附加的目标寄存器或者原操作数寄存器。用于区分同一个编号的不同物理寄存器。当指令中不须要提供附加信息时,将C0指定为<CRm>,否则指令操作结果不可预知。 <opcode_2>提供附加信息,用于差别同一个编号的不同物理寄存器。当指令中指定附加信息时,省略<opcode_2>或者将其指定为0,否则指令操作结果不可预知。

寄存器,存储器,内存的区分

て烟熏妆下的殇ゞ 提交于 2019-12-18 11:00:48
从范围来看,它们所指的范畴不一样。 寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。 存储器范围最大,它几乎涵盖了所有关于存储的范畴。寄存器,内存,都是存储器里面的一种。凡是有存储能力的硬件,都可以称之为存储器,这是自然,硬盘更加明显了,它归入外存储器行列,由此可见——。 内存既专业名上的内存储器,它不是个什么神秘的东西,它也只是存储器中的沧海一粟,它包涵的范围也很大,一般分为只读存储器和随即存储器,以及最强悍的高速缓冲存储器(CACHE),只读存储器应用广泛,它通常是一块在硬件上集成的可读芯片,作用是识别与控制硬件,它的特点是只可读取,不能写入。随机存储器的特点是可读可写,断电后一切数据都消失,我们所说的内存条就是指它了。 CACHE是在CPU中速度非常块,而容量却很小的一种存储器,它是计算机存储器中最强悍的存储器。由于技术限制,容量很难提升,一般都不过兆。 ———————————————— 版权声明:本文为CSDN博主「白手起家的亿万富翁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn

汇编语言常见的错误

喜你入骨 提交于 2019-12-18 08:09:59
一些常见的错误描述 错误编号 错误描述 0 Block nesting error 嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无 内层的结束语局 1 Extra characters on line 一语句行有多余字符,可能是语句中给出的参数太多 2 Internal error-Register already defined 这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与 Microsoft公司联系 3 Unkown type specifer 未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等 4 Redefinition of symbol 符号重定义.同一标识符在两个位置上定义.在汇编第一遍扫描时,在这个标识符的第二个定义位置上给出 这个错误 5 Symbol is multidefined 符号多重定义.同一标识符在两个位置上定义.在汇编第二遍扫描时,每当遇到这个标识符都给出这个错误 6 Phase error between passes 两次扫描间的遍错.一个标号在二次扫描时得到不同的地址值,就会给出这种错误.若在启动MASM时使用/D 任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误 7 Already

汇编语言程序设计学习笔记(第一遍学习)-第1节:机器语言编程到汇编语言的产生

柔情痞子 提交于 2019-12-18 08:09:39
  大家好!今天是我学习汇编语言的第一课。我感觉汇编好好玩啊! 机器码编程   哇! 一上来就写程序了啊,还是用机器码的啊!是呢!嘿嘿!我们去下载1个二进制编辑器,我也不知道哪款好用点,我下载的是FlexHEX。然后我们打开它,并写入一下代码:CD 00 以前我学C语言的时候,我知道CD 00 其实就是1100 1101 0000 0000啦!然后我们保存它为1个文件。关于文件名随便取啦!然后我们运行打开cmd,我们把刚才编辑保存好的文件拖到cmd中然后再运行! 哇!程序输出了Divide overflow 好棒啊!一上来就可以机器码编程啦!而且只有2字节呀!看起来也不是那么的复杂啊!但是我看下面的程序,下面的程序是welcome to masm的机器码: 大家看到了吗?!好多的01011001啊,要是我们写二进制机器码的时候1个被错误的写成0了,那如何去调试查找啊,所以汇编语言产生了哦!汇编语言它的主题是汇编指令,汇编指令呢只是机器指令便于书写记忆的一种格式。比如:机器指令1000100111011000 它的意思是寄存器BX的内容送到AX中,对于的汇编指令是:MOV AX,BX。大家看,这样的写法是不是更接近人类语言呀!(咦!什么是寄存器啊,这里怎么冒出来个寄存器,寄存器是CPU中可以存储数据的器件,一个CPU中有多个寄存器,AX,BX就是其中2个寄存器的代号)

volatile的作用

前提是你 提交于 2019-12-17 11:08:41
[转] http://blog.21ic.com/user1/2949/archives/2007/35599.html   一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。 假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。 1). 一个参数既可以是const还可以是volatile吗?解释为什么。 2). 一个指针可以是volatile 吗?解释为什么。 3). 下面的函数有什么错误: int square(volatile int *ptr) { return *ptr * *ptr; }

《30天自制操作系统》笔记(12)——多任务入门

大兔子大兔子 提交于 2019-12-16 23:42:14
《30天自制操作系统》笔记(12)——多任务入门 进度回顾 上一篇 介绍了设置显示器高分辨率的方法。本篇讲一下操作系统实现多任务的方法。 什么是多任务 对程序员来说,也许这是废话,不过还是说清楚比较好。 多任务就是让电脑 同时 运行多个程序(如一边写代码一边听音乐一边下载电影)。 电脑的CPU只有固定有限的那么一个或几个, 不可能 真的同时运行多个程序。所以就用近似的方式,让多个程序 轮换 着运行。当轮换速度够快(0.01秒),给人的 感觉 就是"同时"运行了。 多任务之不实用版 我们首先从最基本的想法开始,做一个不实用版的多任务作为例子。在学习这个例子的过程中引入真正的多任务必须的TSS、TR、far模式JMP的概念,为后续内容打基础。 当你向CPU发出任务切换的指令时,CPU会先把寄存器中的值全部 写入 内存某处;然后,从内存另一位置把所有寄存器的值 读取 出来。这就完成了一次任务切换。 任务切换消耗的时间就是读写内存消耗的时间,大概为 0.0001秒 。 任务状态段TSS 存取全部寄存器的值这件事,当然需要有一个数据结构,这就是 "任务状态段" (Task Status Segment)简称TSS。 1 struct TSS32 2 { 3 int backlink, esp0, ss0, esp1, ss1, esp2, ss2, cr3; 4 int eip,

以太网自协商原理

陌路散爱 提交于 2019-12-16 00:43:15
自协商原理: 自协商是通过一种叫做快速连接脉冲(Fast Link Pulse)的信号实现的,简称FLP。自协商的双方通过FLP来交换数据。 在具备自协商能力的端口没有Link的情况下,端口一直发送FLP,在FLP中包含着自己的连接能力信息,包括支持的速率能力、双工能力、流控能力等。这个连接能力是从自协商能力寄存器中得到的(Auto-Negotiation Advertisement Register ,PHY标准寄存器地址4 )。FLP中的编码方式如图。依靠脉冲位置编码携带数据。一个FLP突发包含33个脉冲位置。17个奇数位置脉冲为时钟脉冲,时钟脉冲总是存在的;16个偶数位置脉冲用来表示数据:此位置有脉冲表示1,此位置没有脉冲表示0。这样1个FPL的突发就可以传输16bit的数据。自协商交互数据就这样通过物理线路被传输。 如果两端都支持自协商,则都会接收到对方的FLP,并且把FLP中的信息解码出来。得到对方的连接能力。并且把对端的自协商能力值记录在自协商对端能力寄存器中(Auto-Negotiation Link Partner Ability Register , PHY标准寄存器地址5 )。同时把状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)置成1。在自协商未完成的情况下,这个bit一直为0。然后各自根据自己和对方的最大连接能力,选择最好的连接方式Link

C51学习笔记

筅森魡賤 提交于 2019-12-15 21:03:36
一, C51内存结构深度剖析 二, reg51.头文件剖析 三, 浅淡变量类型及其作用域 四, C51常用头文件 五, 浅谈中断 六, C51编译器的限制 七, 小淡C51指针 八, 预处理命令 一,C51内存结构深度剖析 在编写应用程序时,定义一个变量,一个数组,或是说一个固定表格,到底存储在什么地方; 当定义变量大小超过MCU的内存范围时怎么办; 如何控制变量定义不超过存储范围; 以及如何定义变量才能使得变量访问速度最快,写出的程序运行效率最高。以下将一一解答。 1 六类关键字(六类存储类型) data idata xdata pdata code bdata code: code memory (程序存储器也即只读存储器)用来保存常量或是程序。code memory 采用16位地址线编码,可以是在片内,或是片外,大小被限制在64KB 作用:定义常量,如八段数码表或是编程使用的常,在定义时加上code 或明确指明定义的常量保存到code memory(只读) 使用方法: char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 此关键字的使用方法等同于const data data memory (数据存储区)只能用于声明变量,不能用来声明函数,该区域位于片内,采用8位地址线编码

STM32 GPIO口的配置和应用

*爱你&永不变心* 提交于 2019-12-14 09:33:31
STM32F103ZET6 一共有7组IO口(有FT的标识是可以识别5v的) 每组IO口有16个IO 一共16*7=112个IO 4种输入模式: (1) GPIO_Mode_AIN 模拟输入 (2) GPIO_Mode_IN_FLOATING 浮空输入 (3) GPIO_Mode_IPD 下拉输入 (4) GPIO_Mode_IPU 上拉输入 4种输出模式: (5) GPIO_Mode_Out_OD 开漏输出 (6) GPIO_Mode_Out_PP 推挽输出 (7) GPIO_Mode_AF_OD 复用开漏输出 (8) GPIO_Mode_AF_PP 复用推挽输出 四种输入模式: 1、一图记住上拉、下拉、浮空输入模式: 原理分析:图中箭头表示信号流动方向。从I/O引脚向左沿着箭头方向,首先遇到两个开关和电阻,与VDD相连的称为上拉电阻,与Vss相连的称为下拉电阻,再连接到施密特触发器(信号转换)把电压信号转化为0、1的数字信号,存储在输入数据寄存器(IDR)。然后通过设置配置寄存器(CRL、CRH)控制这两个开关,于是就可以得到GPIO的上拉输入、下拉输入模式和浮空输入模式,浮空就是既不接上拉也不接下拉。在上拉/下拉/浮空输入模式中,输出缓冲器被禁止(P-MOS和N-MOS),施密特触发器输入被激活,根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接