数据寄存器

80C51存储器与C51内存优化

一个人想着一个人 提交于 2020-04-07 12:13:32
80C51在物理结构上有四个存储空间:片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。但在逻辑上,即从用户使用的角度上,80C51有三个存储空间:片内外统一编址的64KB的程序存储器地址空间(用16位地址)、256B的片内数据存储器的地址空间(用8位地址,其中128B的专用寄存器地址空间仅有21个字节有实际意义)以及64KB片外存储器地址空间。 1、程序存储器 程序存储器用于存放编好的程序和表格常数。80C51片内有4KB ROM,片外16位地址线最多可扩展64KB ROM,两者是统一编址的。如果EA端保持高电平,80C51的程序计数器PC在0000H——0FFFH范围内(即前4KB地址)是执行片内ROM的程序。当寻址范围在1000H——FFFFH时,则从片外存储器取指令。当EA端保持低电平时,80C51的所有取指令操作均在片外程序存储器中进行,这时片外存储器可以从0000H开始编址。 程序存储器中,以下6个单元具有特殊功能。 0000H:80C51复位后,PC=0000H,即程序从0000H开始执行指令。 0003H:外部中断0入口。 000BH:定时器0溢出中断入口。 0013H:外部中断1入口。 001BH:定时器1溢出中断入口。 0023H:串行口中断入口。 2、数据存储器 数据存储器用于存放中间运算结果、数据暂存和缓冲、标志位等。80C51片内有256B

ARM指令集----杂项指令

纵然是瞬间 提交于 2020-04-07 05:35:59
ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load、Store指令,协处理器指令和异常中断指令 跳转指令: 在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种是直接向PC寄存器写入目标地址的值 通过直接向PC寄存器写入目标寄存器的数字可以实现在4GB 地址空间的任意跳转,这种跳转又称为长跳转,如果在残肢令前面使用MOV LR,PC等指令,可以保存返回来的地址值,这样就实现了在4GB空间中的子程序调用 ARM的跳转指令可以从当前指令向前或者是向后的32位的地址进行空间跳转,这类跳转指令有一下4种 B 跳转指令 BL带换回的跳转指令 BLX 带返回的跳转和切换指令 BX 带状态切换的跳转指令 B和BL的区别在于,L决定是否将PC寄存器的数字保存到LR寄存器中, BL指令用于实现子程序的调用,子程序的返回地址可以将LR寄存器的值复制到PC寄存器来实现 数据处理指令 数据处理指令包括如下指令   MOV 数据传送指令   MVN 数据求反传送指令:MVN指令有以下用途:先寄存器传递一个负数,生成位的掩码,求一个数的反码   CMP 比较指令:   CMN 基于相反数的比较指令   TST 位测试指令 :TST指令通常是用于测试寄存器中某些位是1还是0   TEQ 测试相等指令:TEQ用来比较两个数是否相等ORR指令   ADD 加法指令

汇编

青春壹個敷衍的年華 提交于 2020-04-06 22:00:40
一、介绍 汇编语言是一种面向机器的低级程序设计语言 汇编语言以助记符形式表示每一条计算机指令 助记符是便于人们记忆、并能描述指令功能和指令操作数的符号 助记符一般就是表明指令功能的英语单词或其缩写 MOV AX , 30H ADD AX , 50H MOV [2100H] , BX HLT 汇编语言的主要特点: 汇编语言程序与处理器指令系统密切相关 程序员可直接、有效的控制硬件系统 形成的可执行文件运行速度快、占用主存容量少 汇编语言程序中可以出现不同进制的数,但一定要有标识字母加以区别 数据的组织形式:位(bit)、字节(Byte)、字(Word)、双字(Dword) 无论是数据还是指令在计算机中都是以二进制形式存放的 无符号整数——所有有效位都当作数值处理,当然这样的数全部都是正数,故不保留符号位,常用于表示地址,或运算中表示计数值等 ASCII编码——在内存中使用一个字节(8位二进制数)存放一个字符(它的ASCII码),最高位没用(写0).在通信过程中最高位有时用于奇偶校验 数码0~9:30H~39H 大写字母A~Z:41H~5AH 小写字母a~z:61H~7AH 空格:20H 带符号数的表示方法——采用补码表示法(补码存储、补码运算) 与、或、异或、非运算 二、计算机硬件相关知识 1、硬件 中央处理单元CPU 控制器、运算器、寄存器 存储器 主存储器:RAM和ROM

KEIL中程序优化说明

时间秒杀一切 提交于 2020-04-06 04:08:31
优化级别说明(仅供参考) : 则其中的 Code Optimization 栏就是用来设置 C51 的优化级别。共有 9 个优化 级别(书上这么写的) ,高优化级别中包含了前面所有的优化级别。现将各个级 别说明如下: 0 级优化: 1 、 常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中 包括运行地址的计算。 2 、 简单访问优化:对 8051 系统的内部数据和位地址进行访问优化。 3 、 跳转优化:编译器总是将跳转延至最终目标上,因此跳转到跳转之间的命令 被删除。 1 级优化: 1 、 死码消除:无用的代码段被消除。 2 、 跳转否决:根据一个测试回溯,条件跳转被仔细检查,以决定是否能够简化 或删除。 2 级优化: 1 、 数据覆盖:适于静态覆盖的数据和位段被鉴别并标记出来。连接定位器 BL51 通过对全局数据流的分析,选择可静态覆盖的段。 3 级优化: 1 、 “ 窥孔 ” 优化:将冗余的 MOV 命令去掉,包括不必要的从存储器装入对象及 装入常数的操作。另外如果能节省存储空间或者程序执行时间,复杂操作将由简 单操作所代替。 4 级优化: 1 、 寄存器变量:使自动变量和函数参数尽可能位于工作寄存器中,只要有可能, 将不为这些变量保留数据存储器空间。 2 、扩展访问优化:来自 IDATA 、 XDATA 、 PDATA 和 CODE 区域的变量直接包

c语言中的代码优化《转》

痴心易碎 提交于 2020-04-06 03:03:44
在性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。 第一招:以空间换时间   计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值: 方法A:通常的办法 #define LEN 32 char string1 [LEN]; memset (string1,0,LEN); strcpy (string1,"This is a example!!"); 方法B: const char string2[LEN] ="This is a example!"; char * cp; cp = string2 使用的时候可以直接用指针来操作。 从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活 性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执 行的高效率。 如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。 第二招: 使用宏而不是函数。   这也是第一招的变招

单片机的组成、工作原理、分类、特点以及发展趋势

白昼怎懂夜的黑 提交于 2020-04-05 16:18:13
芯片在没有开发前,单片机只是具备功能极强的超大规模集成电路,如果赋予它特定的程序,它便是一个最小的、完整的微型计算机控制系统,它与个人电脑(PC机)有着本质的区别,单片机的应用属于芯片级应用,需要用户了解单片机芯片的结构和指令系统以及其它集成电路应用技术和系统设计所需要的理论和技术,用这样特定的芯片设计应用程序,从而使该芯片具备特定的功能。 不同的单片机有着不同的硬件特征和软件特征,即它们的技术特征均不尽相同,硬件特征取决于单片机芯片的内部结构,用户要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标。这里的技术特征包括功能特性、控制特性和电气特性等等,这些信息需要从生产厂商的技术手册中得到。软件特征是指指令系统特性和开发支持环境,指令特性即我们熟悉的单片机的寻址方式,数据处理和逻辑处理方式,输入输出特性及对电源的要求等等。开发支持的环境包括指令的兼容及可移植性,支持软件(包含可支持开发应用程序的软件资源)及硬件资源。要利用某型号单片机开发自己的应用系统,掌握其结构特征和技术特征是必须的。 单片机控制系统能够取代以前利用复杂电子线路或数字电路构成的控制系统,可以软件控制来实现,并能够实现智能化,现在单片机控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。诚然

keil优化等级设置

回眸只為那壹抹淺笑 提交于 2020-04-04 01:53:04
keil优化等级设置 优化级别说明(仅供参考): 则其中的 Code Optimization 栏就是用来设置C51的优化级别。共有9个优化级别(书上这么写的),高优化级别中包含了前面所有的优化级别。现将各个级别说明如下: 0级优化: 1、 常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算。 2、 简单访问优化:对8051系统的内部数据和位地址进行访问优化。 3、 跳转优化:编译器总是将跳转延至最终目标上,因此跳转到跳转之间的命令被删除。 1级优化: 1、 死码消除:无用的代码段被消除。 2、 跳转否决:根据一个测试回溯,条件跳转被仔细检查,以决定是否能够简化或删除。 2级优化: 1、 数据覆盖:适于静态覆盖的数据和位段被鉴别并标记出来。连接定位器BL51通过对全局数据流的分析,选择可静态覆盖的段。 3级优化: 1、“窥孔”优化:将冗余的MOV命令去掉,包括不必要的从存储器装入对象及装入常数的操作。另外如果能节省存储空间或者程序执行时间,复杂操作将由简单操作所代替。 4级优化: 1、 寄存器变量:使自动变量和函数参数尽可能位于工作寄存器中,只要有可能,将不为这些变量保留数据存储器空间。 2、扩展访问优化:来自IDATA、XDATA、PDATA和CODE区域的变量直接包含在操作之中,因此大多数时候没有必要将其装入中间寄存器。 3、局部公共子式消除

计算机组成与设计(十)—— 流水线的冒险

混江龙づ霸主 提交于 2020-04-03 04:35:15
冒险 流水线技术之所以能提高性能 究其本质是利用了时间上的并行性, 那它让原本应该先后执行的指令 在时间上一定程度的并行起来,然而这也会带来一些冲突和矛盾, 进而可能引发错误。 冒险( Hazard ) :在流水线中我们希望当前每个时钟周期都有一条指令进入流水线可以执行。但 在某些情况下,下一条指令无法按照预期开始执行,这种情况就被称为冒险 。 冒险分为三种: 结构冒险:如果一条指令需要的硬件部件还在为之前的指令工作,而无法为这条指令提供服务,那就导致了结构冒险。(这里结构是指硬件当中的某个部件) 数据冒险:如果一条指令需要某数据而该数据正在被之前的指令操作,那这条指令就无法执行,就导致了数据冒险 控制冒险:如果现在要执行哪条指令,是由之前指令的运行结果决定,而现在那条之前指令的结果还没产生,就导致了控制冒险。 结构冒险 示例一:如果指令和数据放在同一个存储器中,则不能同时读存储器 解决方案一:我们有一个方便又简便的方法,即流水线停顿( stall ),产生空泡( bubble )。 虽然流水线停顿能用来解决各种冒险,但它的效率低下,应尽量避免。 解决方案二:在存储器中设置单独的指令高速缓存和数据高速缓存。(要强调的在计算机中主存储器也就是内存是统一存放指令和数据的, 这也是冯诺依曼结构的要求,只是在CPU当中 的一级高速缓存会采用指令和数据分别存放的方式) 示例二

[ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭

不羁岁月 提交于 2020-03-30 01:55:46
1、CC2530的IO口概述   CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC、定时器或USART外设。这些I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现。    I/O 端口具备如下重要特性:      􀁺 21 个数字I/O 引脚     􀁺 可以配置为通用I/O 或外部设备I/O     􀁺 输入口具备上拉或下拉能力     􀁺 具有外部中断能力。   21 个I/O 引脚都可以用作于外部中断源输入口。因此如果需要外部设备可以产生中断。 外部中断功能也可以从睡眠模式唤醒设备 。 2、未使用的I/O 引脚处理   未使用的I/O 引脚电平是确定的,不能悬空。一个方法是使引脚不连接,配置引脚为具有上拉电阻的通用I/O输入。这也是所有引脚复位后的状态(除了P1.0 和P1.1 没有上拉/下拉功能)。或者引脚可以配置为通用I/O输出。这两种情况下引脚都不能直接连接到VDD 或GND, 以避免过多的功耗 。 3、低I/O 电压   在数字I/O 电压引脚DVDD1 和DVDD2 低于2.6V 的应用中,寄存器位PICTL.PADSC 应设置为1,以获得DC 特性表中所述的输出DC 特性。 4、通用I/O    用作通用I/O 时,引脚可以组成3 个8 位端口,端口0、端口1 和端口2,表示为P0、P1

STM32学习之路-点亮LED

℡╲_俬逩灬. 提交于 2020-03-30 01:53:06
STM32学习笔记—点亮led灯 STM32的I/O口有很多的功能,所以称为GPIO(GENERAL PURPOSE) 其中GPIO又分为A,B,C,D,E,F,G不同的组,每个组端口又分为0~15,共16个不同的引脚,不同的芯片引脚数量也不同,所用的学习板为STM32F103RBT6; I/O口的八种模式: 输入浮空; 模拟输入; 输入上拉; 输入下拉; 开漏输出; 推挽输出; 推挽式复用功能; 开漏复用功能; 每个I/O口可以自由编程,单I/O口寄存器必须按32位字节被访问。并且很多I/O口都是5V兼容的,手册当中标记FT的就是5V电平兼容的。 I/O的七个 寄存器( register ) :(X=A,B,C,D….G) 32位端口配置低寄存器GPIOX_CRL; 选择作为输入还是输出 32位端口配置高寄存器GPIOX_CRH; 选择作为输入还是输出 32位端口输入数据寄存器GPIOX_IDR; 保存了输入电平还是输出电平 32位端口输出数据寄存器GPIOX_ODR; 保存了输入电平还是输出电平 32位端口位设置/清除寄存器GPIOX_BSRR; 设置控制的数据为0/1 32位端口位清除寄存器GPIOX_BRR; 设置控制的数据为0/1 32位端口配置锁定寄存器GPIOX_LCKR;设置锁定引脚后,不能修改其配置 32位端口配置低寄存器GPIOX_CRL(低8位): 一个I