搜档网
当前位置:搜档网 › ATPCS中寄存器使用

ATPCS中寄存器使用

ATPCS中寄存器使用
ATPCS中寄存器使用

ATPCS中各寄存器的使用规则及其名称

参数传递规则

1. 参数不超过4个时,可以使用寄存器R0~R3来传递参数,当参数超过4个时,还可

以使用数据栈来传递参数。

2. 结果为一个32位整数时,可以通过寄存器R0返回

3. 结果为一个64位整数时,可以通过寄存器R0和R1返回,依次类推。

汇编程序、C程序及C++程序相互调用

C 程序调用汇编程序:

?汇编程序的设置要遵循ATPCS 规则,保证程序调用时参数的正确传递。

?在汇编程序中使用EXPORT 伪指令声明本子程序,使其它程序可以调用此子程序。

?在C 语言程序中使用extern 关键字声明外部函数(声明要调用的汇编子程序),即可调用此汇编子程序。

?调用汇编的C 函数:

?示例

#include

extern void strcopy(char *d,const char *s) //声明外部函数,即要调用的汇编

//子程序

int main(void)

{

const cha r *srcstr=“First string-source”;//定义字符串常量

char dstsrt[] =“Second string-destination”;//定义字符串变量

printf(“Before copying:\n”);

printf(“?%s?\n …%s\n,”srcstr,dststr); //显示源字符串和目标字符串的内容strcopy(dststr,srcstr); //调用汇编子程序,R0=dststr,R1=srcstr

printf(“Aft er copying:\n”)

printf(“?%s?\n …%s\n,”srcstr,dststr); //显示strcopy 复制字符串结果

return(0);

}

?被调用汇编子程序:

AREA SCopy,CODE,READONLY

EXPORT strcopy ;声明汇编程序strcopy,以便外部程序引用

strcopy ;R0 为目标字符串的地址

;R1 为源字符串的地址;

LDRB R2,[R1],#1 ;读取字节数据,源地址加1

STRB R2,[R0],#1 ;保存读取的1 字节数据,目标地址加1

CMP r2,#0 ;判断字符串是否复制完毕

BNE strcopy ;没有复制完毕,继续循环

MOV pc,lr ;返回

END

汇编程序调用C程序

?汇编程序的设置要遵循ATPCS 规则,保证程序调用时参数的正确传递.

?在汇编程序中使用IMPORT 伪指令声明将要调用的C 程序函数.

?在调用C 程序时,要正确设置入口参数,然后使用BL 调用.

?汇编调用C 程序的C 函数:

/*函数sum5()返回5 个整数的和*/

int sum5(int a,lit b, int c,int d,int e)

{

return(a+b+c+d+e); //返回5 个变量的和

}

?汇编调用C 程序的汇编程序

AREA sample, CODE,READONLY

IMPORT sum5 ;声明外部标号sum5,即C 函数sum5() CALLSUM

STMFD SP! {LR} ;LR 寄存器放栈

ADD R1,R0,R0 ;设置sum5 函数入口参数,R0 为参数a

ADD R2,R1,R0 ;R1 为参数b,R2 为参数c

ADD R3,R1,R2,

STR R3,[SP,# -4]! ;参数e 要通过堆栈传递

ADD R3,R1,R1 ;R3 为参数d

BL sum5 ;调用sum5(),结果保存在R0

ADD SP,SP#4 ;修正SP 指针

LDMFD SP,PC ;子程序返回

END

嵌入式C编程

概述:

C语言的优点是运行速度快、编译效率高、移

植性好和可读性强。C语言支持模块化程序设计,支持自顶

向下的结构化程序设计方法。因此在嵌入式程序设计中经

常会用到C语言程序设计。

嵌入式C语言程序设计是利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计。也就是说它首先是C语

言程序设计,因此必须符合C语言基本语法,只是它是面向

嵌入式的应用而设计的程序。

?C语言的“预处理伪指令”在嵌入式程序设计中的应用。

1、文件包含伪指令

格式:

#include<头文件名.h> ;标准头文件

#include“头文件名.h” ;自定义头文件

2、宏定义伪指令

格式:

# define 宏标识符宏体

例:

?#define U32 unsigned int

?#define U16 unsigned short

?#define S32 int

?#define S16 short int

?#define U8 unsigned char

?#define S8 char

3、条件宏:先测试是否定义过某宏标识符,然后决定如何处理。这样做是为了避免重复定义。

格式:

#ifdef 宏标识符

#undef 宏标识符

#define 宏标识符宏体

#else

#define 宏标识符宏体

#endif

例:

#ifdef INCLUDE_SERIAL

#undef NUM_TTY

#define NUM_TTY

N_UART_CHANNELS

#undef CONSOLE_TTY

#define CONSOLE_TTY 0

#undef CONSOLE_BAUD_RATE

#define CONSOLE_BAUD_RATE 115200

#endif

4、条件编译伪指令

格式

#if(条件表达式1)

#elif(条件表达式2)

#elif(条件表达式n)

#else

#endif

这样,编译时,编译器仅对#if()…#endif之间满足某一条

件表达式的源文件部分进行编译。

使用寄存器变量

当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。

为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,

使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的

说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量

均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。例:

/* 求1+2+3+….+n的值*/

WORD Addition(BYTE n)

{

register i,s=0;for(i=1;i<=n;i++)

{

s=s+i;

}

return s;

}

活用位操作(熟练掌握)

使用C语言的位操作可以减少除法和取模的运算。在计算机程序中数

据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作,因而,灵活的位操作可以有效地提高程序运行的效率。

例:

/* 方法1 */

int i,j;

i = 879 / 16;

j = 562 % 32;

/* 方法2 */

int i,j;

i = 879 >> 4;

j = 562 - (562 >> 5 << 5);

例int Ra ;//Ra[15:16]=11

Ra &= ~(3<<15);

C语言位运算除了可以提高运算效率外,在嵌入式

系统的编程中,它的另一个最典型的应用,而且十分广

泛地正在被使用着的是位间的(&)、(|)、非(~)

操作,这跟嵌入式系统的编程特点有很大关系。

例:

rGPCDAT=(rGPCDAT&0xFFFFFFF0)|0x0E

rINTMSK&=~(BIT_TIMER1)

数据指针

在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的

MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在

嵌入式系统的实际调试中,多借助C语言指针所具有的对绝对地址单元内容的读写能

力。以指针直接操作内存多发生在如下几种情况:

?某I/O芯片被定位在CPU的存储空间而非I/O空间,而且寄

存器对应于

某特定地址;

?两个CPU之间以双端口RAM通信,CPU需要在双端口RAM

的特定单

元(称为mail box)书写内容以在对方CPU产生中断;

?读取在ROM或FLASH的特定单元所烧录的汉字和英文字

模。

例:

int *p = (int *)0xF000FF00 ;

*p=0xABCD;

#define rGPACON (*(volatile unsigned *)0x56000000);

rGPACON=0x1234;

关键字volatile

一般这个修饰符用来告知编译器,被修饰的变量是个“易变的”变

量(volatile的本意是“易变的”),防止编译器进行优化。将变量加上

volatile修饰,则编译器保证对此变量的读写操作都不会被优化。

用法

1、中断服务程序中修改的供其它程序检测的变量需要加volatile。

2、多任务环境下各任务间共享的标志应该加volatile。

3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义。

投票

STM32库函数操作和寄存器操作

STM32库函数操作和寄存器操作 首先,两个都是C语言。从51过渡过来的话,就先说寄存器操作。每个MCU都有自己的寄存器,51是功能比较简单的一种,相应的寄存器也比较少,我们常用的就那么几个,像P0 P1 SMOD TMOD之类的,这些存在于标准头文件reg.h里面,因为少,所以大家就直接这么去操作了,每一位对应的意义随便翻一下手册就看得到,甚至做几个小项目就记的很清楚了。所以做51开发的时候大多数都是直接操作寄存器。 到了STM32,原理一样,也是有自己的寄存器,但是作为一款ARM 内核的芯片,功能多了非常多,寄存器自然也就多了很多,STM32的手册有一千多页,这时候想去像51那样记住每个寄存器已经不现实了,所以ST的工程师就给大家提供了库函数这么一个东西。这是个神器。库函数里面把STM32的所有寄存器用结构体一一对应并且封装起来,而且提供了基本的配置函数。我们要去操作配置某个外设的时候不需要再去翻眼花缭乱的数据手册,直接找到库函数描述拿来就可以用,这样就能把精力放在逻辑代码的开发上,而不是去费力的研究一个芯片的外设要怎么配置寄存器才能驱动起来。简单讲就是这些了,库函数是为了让开发者从大量繁琐的寄存器操作中脱离出来的一个文件包,在使用一个外设的时候让开发者直接去调用相应的驱动函数而不是自己去翻手册一个一个配置寄存器。有人说用库函数掌握不到芯片的精髓,见仁见智了。熟悉一款芯片是在不断的开发使用中逐渐了解并掌握的,调试的过程中会遇到很多问题,会要求我们去跟踪相关寄存器的状态,在整个框架都已经建立起来的基础上再去对照手册做具体到寄存器每一位的分析,代码对照现象,很快就能积累起来经验,祝成功。

寄存器和存储器的区别

https://www.sodocs.net/doc/2113736392.html,/p-20032411.html

寄存器和存储器的区别

如果仅是讨论CPU的范畴 寄存器在cpu的内部,容量小,速度快 存储器一般都在cpu外部,容量大,速度慢 回答者:athlongyj - 高级经理六级6-1 08:52 从根本上讲,寄存器与RAM的物理结构不一样。 一般寄存器是指由基本的RS触发器结构衍生出来的D触发, 就是一些与非门构成的结构,这个在数电里面大家都看过; 而RAM则有自己的工艺,一般1Bit由六MOS管构成。所以, 这两者的物理结构不一样也导致了两者的性能不同。寄存器 访问速度快,但是所占面积大。而RAM相反,所占面积小, 功率低,可以做成大容量存储器,但访问速度相对慢一点。 1、 寄存器存在于CPU中,速度很快,数目有限; 存储器就是内存,速度稍慢,但数量很大; 计算机做运算时,必须将数据读入寄存器才能运算。 2、 存储器包括寄存器, 存储器有ROM和RAM 寄存器只是用来暂时存储,是临时分配出来的,断电,后,里面的内容就没了`````

寄存器跟存储器有什么区别? 一般数据在内存里面,要处理(或运算)的时候, 独到寄存器里面。 然后CPU到寄存器里面拿值,拿到运算核内部, 算好了在送到寄存器里面 再到内存 寄存器跟存储器有什么区别? 寄存器跟存储器有什么区别? 寄存器上:“一个操作码+一个操作数”等于一条微指令吗?一条微指令是完成一条机器指令的一个步骤对吗?cpu是直接跟寄存器打交道的对吗?也就是说寄存器是运算器、控制器的组成部分对不? 设计一条指令就是说把几条微指令组合起来对吗? 刚开始学硬件相关知识,学的晕头转向的!! 存储器与寄存器区别 2009-06-09 12:27 寄存器是CPU内部存储单元,数量有限,一般在128bit内,但是速度快,CPU访问几乎没有任何延迟。分为通用寄存器和特殊功能寄存器。 通常说的存储器是独立于cpu之外的,比如内存,硬盘,光盘等。 所有数据必须从存储器传入寄存器后,cpu才能使用。

汇编寄存器功能详解

数据寄存器(AX、BX、CX、DX) 1.寄存器AX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、 除、输入/输出等操作,它们的使用频率很高; 2.寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 3.寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位 操作中,当移多位时,要用CL来指明移位的位数; 4.寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算, 也可用于存放I/O的端口地址; 变址寄存器(SI、DI) 寄存器SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便 指针寄存器(BP、SP) 寄存器BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们主要用于访问堆栈内的存储单元,并且规定: BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据; SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶 段寄存器(CS、DS、ES、SS、FS、GS) 段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址 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位CPU系统中,它共有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段. 指令指针寄存器 指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。 16位标志寄存器 9个标志位,它们主要用来反映CPU的状态和运算结果的特征。 1.进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的 最高位产生了一个进位或借位,那么,其值为1,否则其值为0。 2.奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为 偶数,则PF的值为1,否则其值为0 3.辅助进位标志AF(Auxiliary Carry Flag) 在发生下列情况时,辅助进位标志AF的值被置为1,否 则其值为0:

寄存器(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个端口

ATPCS中寄存器使用

ATPCS中各寄存器的使用规则及其名称 参数传递规则 1. 参数不超过4个时,可以使用寄存器R0~R3来传递参数,当参数超过4个时,还可 以使用数据栈来传递参数。 2. 结果为一个32位整数时,可以通过寄存器R0返回 3. 结果为一个64位整数时,可以通过寄存器R0和R1返回,依次类推。 汇编程序、C程序及C++程序相互调用 C 程序调用汇编程序: ?汇编程序的设置要遵循ATPCS 规则,保证程序调用时参数的正确传递。 ?在汇编程序中使用EXPORT 伪指令声明本子程序,使其它程序可以调用此子程序。 ?在C 语言程序中使用extern 关键字声明外部函数(声明要调用的汇编子程序),即可调用此汇编子程序。 ?调用汇编的C 函数: ?示例 #include extern void strcopy(char *d,const char *s) //声明外部函数,即要调用的汇编 //子程序 int main(void) { const cha r *srcstr=“First string-source”;//定义字符串常量 char dstsrt[] =“Second string-destination”;//定义字符串变量 printf(“Before copying:\n”); printf(“?%s?\n …%s\n,”srcstr,dststr); //显示源字符串和目标字符串的内容strcopy(dststr,srcstr); //调用汇编子程序,R0=dststr,R1=srcstr printf(“Aft er copying:\n”) printf(“?%s?\n …%s\n,”srcstr,dststr); //显示strcopy 复制字符串结果 return(0);

DSP GPIO相关寄存器的设置最详细的一份资料了

每个通用I/O 端口都受多路复用(MUX),方向(DIR),数据(DAT),置位(SET),清除(CLEAR),以及切换(TOGGLE)寄存器的控制。 下面介绍这些寄存器的功能。 GPxMUX 寄存器(x=A,B,D,E,F,G) 每个I/O 端口都有一个MUX(多路复用)寄存器。这个寄存器用来在每个引脚(PIN)的外设操作及I/O 操作之间进行选择。复位时所有通用I/O 引脚都配置成数字I/O 功能。任何一个引脚都可通过16 位的多路复用寄存器 GPxMUX 进行外设或GPIO 功能的设置: 当GPxMUX.bit = 0,相应的一个引脚配置成I/O 功能; 当GPxMUX.bit = 1,相应的一个引脚配置成外设功能。 GPxDIR 寄存器(x=A,B,D,E,F,G)

每个I/O 端口都有一个方向控制寄存器。不论是将相应的I/O 引脚配置成输入还是输出,都由方向寄存器控制。复位时,所有通用I/O 引脚均配置成输入。 当GPxDIR.bit = 0,引脚配置成输入; 当GPxDIR.bit = 1,引脚配置成输出。 在采用GPxDIR 寄存器位将输入端口改变成输出端口之前,引脚的当前电平反映到GPxDAT 寄存器中。当端口的方向从输入改变成输出时,GPxDAT 寄存器的值用来确定引脚的电平。 例如,如果引脚已经从内部上拉,则复位后上拉将致使GPxDAT 寄存器对应位为1用于反映引脚的当前高电平。当端口的方向从输入改变成输出时,GPxDAT 寄存器已经为1 的位强迫该引脚为同一高电平。这样,在电平不变的情况下,引脚能够从输入转换为输出。 GPxDAT 寄存器(x=A,B,D,E,F,G)

西门子s7-200常用寄存器使用基础知识

西门子s7-200常用寄存器使用基础知识 1、S7-200将1个字长(16位)数字值按比例转换为电流或电压。可以用区域标识符(AQ)、数据长度(W)及字节的起始地址来改变这些值。因为模拟量为1个字长,且从偶数字节(如0、 2、4)开始,所以必须用偶数字节地址(如AQW0、AQW2、AQW4)来改变这些值。模拟量输出值为只写数据。模拟量转换的实际精度是12位。格式:AQW[起始字节地址]。例如:AQW4 2、在S7-200 CPU中,计数器用于累计从输入端或内部元件送来的脉冲数。它有增计数器、减计数器及增/减计数器3种类型。由于计数器频率扫描周期的限制,当需要对高频信号计数时可以用高频计数器(HSC)。 计数器有以下两种寻址形式。 当前值寻址:16位有符号整数,存储累计脉冲数。 计数器位寻址:根据当前值和预置值的比较结果置位或者复位。同定时器一样,两种寻址方式使用同样的格式,即C+计数器编号。例如:C0 (1)每个高速计数器都有一个32位当前值和一个32位预置值,当前值和预设值均为带符号的整数值。要设置高速计数器的新当前值和新预置值,必须设置控制字节(表6-7),令其第五位和第六位为1,允许更新预置值和当前值,新当前值和新预置值写入特殊内部标志位存储区。然后执行HSC指令,将新数值传输到高速计数器。当前值和预置值占用的特殊内部标志位存储区如表1所示。 表1 HSC0-HSC5当前值和预置值占用的特殊内部标志位存储区 除控制字节以及新预设值和当前值保持字节外,还可以使用数据类型HC(高速计数器当前值)加计数器号码(0、1、2、3、4或5)读取每台高速计数器的当前值。因此,读取操作可直接读取当前值,但只有用上述HSC指令才能执行写入操作。 (2)执行HDEF指令之前,必须将高速计数器控制字节的位设置成需要的状态,否则将采用默认设置。默认设置为:复位和起动输入高电平有效,正交计数速率选择4×模式。执行HDEF指令后,就不能再改变计数器的设置,除非CPU进入停止模式。

移位寄存器工作方式

一,串行口控制寄存器SCON 它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表: SM0、SM1:串行口工作方式选择位,其定义如下: 其中fosc为晶振频率 SM2:多机通讯控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。 REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。 TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。 RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。 TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。 RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说

明)。RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。RI也必须用软件清0。 二,串行口的工作方式 8051单片机的全双工串行口可编程为4种工作方式,现分述如下: 1,方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。 (1)输出串行数据从RXD引脚输出,TXD引脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。 (2)输入当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD 为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。 2,方式1为波特率可变的10位异步通讯接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。 (1)输出当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。 (2)输入在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。

stm32 BKP寄存器操作操作寄存器+库函数

stm32 BKP 寄存器操作操作寄存器+库函数 BKP 是BACKUP 的缩写,stm32f103RCTE 的内部配备了10 个16 位宽度 的BKP 寄存器。在主电源切断或系统产生复位时间时,BKP 寄存器仍然可以 在备用电源的支持下保持其内容。BKP 在实际应用中可以存入重要数据,防止 被恶意查看,或用于断电等。本例实现对BKP 寄存器的读写操作,和入侵检 测和处理。主程序中写入寄存器后,依次打印出10 个BKP 寄存器数据,然后 触发GPIOC13 的入侵中断(输入低电平),在中断中打印出入侵事件发生后的 寄存器内容(复位为0 )。直接操作寄存器用到的寄存器描述如下:备份数据 寄存器x(BKP_DRx) (x = 1 10):低16 位[15:0]有效,用来写入或读出备份数据。备份控制寄存器(BKP_CR):低两位有效。TPAL[1]:侵入检测TAMPER 引脚有效电平(TAMPER pin active level)0:侵入检测TAMPER 引脚上的高电平会清除所有数据备份寄存器(如果TPE 位为1) 1:侵入检测TAMPER 引脚 上的低电平会清除所有数据备份寄存器(如果TPE 位为1)TPE[0]:启动侵入检 测TAMPER 引脚(TAMPER pin enable)0:侵入检测TAMPER 引脚作为通用IO 口使用1:开启侵入检测引脚作为侵入检测使用备份控制/状态寄存器 (BKP_CSR): TIF[9]:侵入中断标志(Tamper interrupt flag) 0:无侵入中断1:产生侵入中断当检测到有侵入事件且TPIE 位为1 时,此位由硬件置1。通过向CTI 位 写1 来清除此标志位(同时也清除了中断)。如果TPIE 位被清除,则此位也会被 清除。TEF[8]:侵入事件标志(Tamper event flag) 0:无侵入事件1:检测到侵入事件当检测到侵入事件时此位由硬件置1。通过向CTE 位写1 可清除此标 志位TPIE[2]:允许侵入TAMPER 引脚中断(TAMPER pin interrupt enable)0:禁止侵入检测中断1:允许侵入检测中断(BKP_CR 寄存器的TPE 位也必须被置1)注

PLC的文件寄存器的使用

PLC文件寄存器与HMI的配方的功能对比 摘要:在我们编程的过程中,有时会遇到PLC数据处理和数据运算所需的数据寄存器不足的情况,这时候,我们如果有HMI作为上位监控的情况下,我们会使用HMI的配方功能来处理一些数据运算,以此分担PLC的运算负担,但是,如果数据量较大,将HMI的配方传输到PLC中会花费比较长的时间。藉此我们可以使用文件寄存器来实现数据的快速响应。 关键词:PLC,HMI,文件寄存器,配方 一、介绍 在有些情况下,我们会因为处理的数据量比较大而用到HMI的配方,比如自动弹钢琴系统,但是,这时会产生一个问题就是将HMI中的配方下载到PLC中时会比较慢。在运行系统的时候会有一段等待的时间,这样就造成了客户在参观时的尴尬状态。 鉴于以上的问题,我们就可以使用PLC中的文件寄存器来代替配方。 文件寄存器(file register):当PLC处理数据和数值运算所需的数据寄存器不足时,可以利用文件寄存器来存储数据和各类参数。每个文件寄存器内为16位,即存有一个字,处理双字用相邻编号的两个文件寄存器。文件寄存器SA/SX/SC 系列机种一共有1600个,EH/EH2/SV系列机种一共有10000个。文件寄存器并没有实际的装置编号,所以需透过指令API 148 MEMR、API 149 MEMW或是透过周边装置HPP02及WPLSoft来执行晚间寄存器的读写功能。 注:装置表示:K0~K9999,无装置符号,顺序以十进制编号。 MEMR m D n文件寄存器数据读出 m: 欲读取文件寄存器的编号 D: 存放读取数据的位置,指定的D开始编号(D寄存器的起始编号为D2000)n : 一次读取的数据笔数 MEMW S m n 文件寄存器数据写入 S: 欲写入数据的位置,指定的D开始编号(D寄存器的起始编号为D2000)m: 欲写入文件寄存器的编号 n : 一次写入数据笔数 二、软件操作: 1、开启WPLSoft,选到通讯选项卡,如图(一) 图(一)

西门子plc移位寄存器指令

西门子plc移位寄存器指令 移位寄存器指令SHRB是将DATA数值移入移位寄存器。S_BIT指定移位寄存器的最低位。N指定移位寄存器的长度和移位方向(移位加= N,移位减= -N)。移位寄存器的最大长度是64位的,可以正也可以负。我们要注意的是SHRB指令移出的每个位是被放置在溢出内存位(SM1.1)中的。 下面便以以下的程序来讲解指令的使用,用I0.2的上升沿来执行移位寄存器指令,那么就是一个扫描周期移一位的,指令中V100.0是移位寄存器的最低位,I0.3里面存的是0或1的数值,指令指定是移位加的,移位寄存器的长度是4。我们结合下面的时序图和移位的图来看,若V100为0000 0101,因为移位寄存器的长度是4,那么只有0101,当I0.3为1时,执行第一次移位,把1移到移位寄存器的最低位,把移出的位的值0放置到SM1.1中,那么SM1.1为0,当I0.3为0时,执行第二次移位,把0移到移位寄存器的最低位,把移出的位的值1放置到SM1.1中,那么SM1.1为1。 在顺序控制或步进控制中,应用移位寄存器编程是很方便的,移位寄存器指令如图所示。 1)移位寄存器有3个数据输入端: DATA:移位寄存器的数据输入端,数据类型为BOOL(位)。 S_BIT:组成移位寄存器的最低位,数据类型为BOOL(位)。 N:移位寄存器的长度和移位方向,-64N64,当N 》0时为正向移位(从移位寄存器的最低位移入,由最高位移出),当N 《0时为反向移位(从移位寄存器的最高位移入,由最低位移出)。 2)移位寄存器的特点: 移位寄存器的数据类型无字节型、字型、双字型之分,移位寄存器的长度N由程序指定。移位寄存器的组成: 最低位为:S_BIT;

三菱PLC的指令代码和内部特殊寄存器

三菱PLC的指令代码 一顺控指令 1 触点指令 00 LD 逻辑操作开始 01 LDI 逻辑非操作开始 02 AND 逻辑乘 03 ANI 逻辑乘非 04 OR 逻辑加 05 ORI 逻辑加非 2 连接指令 06 ANB AND逻辑块与 07 ORB OR逻辑块或 08 MPS 存储操作结果 09 MRD 从MPS读取操作结果 10 MPP 从MPS读取操作结果 并清除结果 3 输出指令 11 OUT 软元件输出 12 SET 软元件置位 13 RST 软元件复位 14 PLS 在输入信号的上升沿 15 PLF 在输入信号的下降沿 16 CHK 软元件输出翻转 4 移位指令 17 SFT 元件移1位 18 SFTP 元件移1位 5 主控指令 19 MC 主控开始 20 MCR 主控复位 6 结束指令 21 FEND 结束主程序 22 END 总的程序末尾, 返回第0步 7 其它指令 23 STOP 停止 24 NOP 空操作 二基本指令 1 比较指令 16位数据比较 25 LD= 当S1=S2, 接通, 当S1≠S2, 断开 26 AND= 27 OR= 28 LD<> 当S1≠S2, 接通, 当S1=S2, 断开 29 AND<>

31 LD> 当S1>S2, 接通, 当S1≤S2, 断开 32 AND> 33 OR> 34 LD<= 当S1≤S2, 接通, 当S1>S2, 断开 35 AND<= 36 OR<= 37 LD< 当S1= 当S1≥S2, 接通, 当S1= 42 OR>= 32位数据比较 43 LDD= 当(S1+1,S1)=(S2+1,S2), 接通 44 ANDD= 45 ORD= 46 LDD<> 当(S1+1,S1)≠(S2+1,S2),接通 47 ANDD<> 48 ORD<> 49 LDD> 当(S1+1,S1)>(S2+1,S2), 接通 50 ANDD> 51 ORD> 52 LDD<= 当(S1+1,S1)≤(S2+1,S2),接通 53 ANDD<= 54 ORD<= 55 LDD< 当(S1+1,S1)<(S2+1,S2), 接通 56 ANDD< 57 ORD< 58 LDD>= 当(S1+1,S1)≥(S2+1,S2),接通 59 ANDD>= 60 ORD>= 2 算术运算指令 二进制16位加/减 61 + (D)+(S)→(D) 62 +P 63 + (S1)+(S2)→(D) 64 +P 65 - (D)-(S)→(D) 66 -P 67 - (S1)-(S2)→(D) 68 -P 二进制32位加/减 69 D+ (D+1,D)+(S+1,S)→(D+1,D)

通用寄存器的作用

通用寄存器的作用 数据寄存器不讲,简单的说,段寄存器(ES,CS,SS,DS,FS,GS)和变址寄存器(SI,DI)是配合使用访问段数据的,指针寄存器(BP,SP)是用来操作堆栈的,BP指向栈的基址,SP则永远指向栈顶。 另外指令指针EIP存放的是要执行的下一条指令在代码段里的偏移量,在实方式下,每个段的最大范围都是64K,所以EIP的高16位都是0。 寄存器的分类寄存器主要用途 通用寄存器 数据 寄存器 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来指明移位的位数; 寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数 参与运算,也可用于存放I/O的端口地址。 在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章有详细介绍),为以不同的地址形式访问存储单元提供方便。

PIC18F4550单片机三个操作寄存器的使用方法

PIC18F4550单片机三个操作寄存器的使用方法 试验芯片:Microchip PIC 18F4550 集成开发环境:MPLAB IDE v8.53 编译器:Microchip C18 PIC18系列单片机是美国微芯公司(Microchip)8位单片机系列中的高档系列,其任一I/O 引脚允许的最大灌电流或最大拉电流达25mA,可以直接驱动LED和继电器。PORTA、PORTB和PORTE的最大灌电流或最大拉电流总和为200mA,PORTC和PORTD的最大灌电流或最大拉电流总和为200mA,PORTF和PORTG的最大灌电流或最大拉电流总和为100mA(注:PIC18F4550没有这两个端口)。 单片机和外设的交互都是通过I/O端口进行,每个I/O端口均有三个操作寄存器: 1、TRISx———数据方向寄存器 用来控制I/O引脚的方向,即用来控制PORTx是输入还是输出。 2、PORTx———端口寄存器 用来锁存输出数据。当读PORTx时,器件直接读I/O引脚电平(而不是锁存值)。 3、LATx———输出数据锁存器 写端口就是写该锁存器(LATx)。数据锁存器也可以直接读写。如果外设没有使用该引脚,并且TRISx位配置该引脚为输出,则将锁存器内的数据输出到引脚。 在复位状态下,TRISx的复位值为0xff,即TRISx寄存器的8个位(D0 ~ D7)的值均为1。此时相应的PORTx引脚被定义为输入,相应的输出驱动器呈现高阻状态。设置为0时表示相应的引脚定义为输出。 这里应注意的是写PORT就是写LAT,但读PORT和读LAT不同。读PORT读的是引脚的状态,无论该引脚设置为输入引脚还是输出引脚。而读LAT得到的是输出数据锁存器的存储值,读LAT得到的值可能和读PORT得到的值存在不同。

寄存器是什么

EAX是什么意思? 将数据33221100H传送到EAX寄存器的指令模拟图 32位CPU所含有的寄存器有: 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),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(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。

8086寄存器及指令英文全称

通用寄存器:AX累加器(Accumulator),BX 基地址寄存器(Base Register),CX 计数寄存器(Count Register) ,DX数据寄存器(Data Register) 段寄存器:代码段寄存器CS--code segment , 数据段寄存器DS--data segment , 堆栈段寄存器SS--stack segment ,附加段寄存器ES--extra segment 。 特殊功能寄存器:指令指针寄存器IP--instruction pointer ,堆栈指针SP--stack pointer ,基址指针BP--base pointer ,源变址寄存器SI--source index ,目标变址寄存器DI--destination index ,标志寄存器FR--flag register(或者叫程序状态字PSW--program status word)。 PSW常用的标志有: 标志值为1时的标记值为0时的标记 OF(overflow flag) OV(overflow) NV(not overflow) ZF(zero flag) ZR(zero) NZ(not zero) PF(parity flag) PE(parity even) PO(parity odd) CF(carry flag) CY(carried) NC(not carried) DF(direction flag) DN(down) UP(up) SF(sign flag) NG(negative) PL(plus) TF(trap flag) IF(interrupt flag) AF(auxiliary flag) 一、运算结果标志位 1、进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。 2、奇偶标志PF(Parity Flag) 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。 利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。

OD使用须知常识,CPU寄存器和汇编指令

OD使用须知常识,CPU寄存器和汇编指令 用OD和CE,不断找汇编资料,解读指令,实在是累。总算找到篇比较完整的资料与大家分享。 32位CPU所含有的寄存器有: 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),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器EDX称为数据寄存器(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),它们主要用于存放存储单元在段内的偏移量, 用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

linux下寄存器详解

ebp和esp是32位的SP,BP esp是堆栈指针 ebp是基址指针 ESP与SP的关系就象AX与AL,AH的关系. 32位CPU所含有的寄存器有: 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位寄存器更具有通用性。

单片机指令和寄存器英语词汇

按功能分为五大类: (1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX(Move External RAM)对外部RAM的数据传送; XCH(Exchange)字节交换; XCHD(Exchange low-order Digit)低半字节交换; PUSH(Push onto Stack)入栈; POP (Pop from Stack)出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC(Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap)低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移;

相关主题