2018-10-29【嵌入式&物联网】51单片机相关寄存器及汇编语法

--------------------------------
Author : ShawnDong
updateDate :2018.10.29
Blog : ShawnDong98.github.io
--------------------------------

PSW(Programe State Word)程序状态字寄存器:寄存当前指令执行后的操作结果的某些特征,为下一条指令的执行提供状态条件。
Cy(PSW.7): 进位标志位

CY和OV标志位的区别:

CY(Carry): 用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0
OV: 表示运算过程中是否发生了溢出,若运算结果超过了8位二进制数所能表示数据的范围即有符号数-128~+127,则标志位置1。
对无符号数的运算,判断只需CY即可,OV无作用。
对有符号数的运算,OV位是有用的。“OV位是C6位进位与C7位进位的异或”,说法对的(对51单片机而言),但不同的计算机说法不一
CY位是累加器的进位、借位标志。下文的叙述按16位机来举例说明,如果是8位机或其它字长,则可换一个例子,但道理相似。
对于无符号数的运算,CY位就可以表示其是否溢出。但如果是有符号数,则不能按CY标志来判断了。为此,设了另一个标志OV,其含义就是“假如是有符号数运算,是否出现了溢出”。

CJNE在两个数进行比较时,如果前者大于后者,则Cy=1,否则Cy=0。

SP(Stack Pointer)堆栈指针:SP用来指示堆栈所处的位置,在进行操作之前,先用指令给SP复制,以规定栈区在RAM区的起始地址(栈底层)。当数据堆入栈区后,SP的值也自动随之变化。MCS-51系统复位后,SP初始化为07H。

PC(Programe Counter)程序计数器:PC用于存放CPU的下一条要执行的指令地址, 是一个16位的专用寄存器, 可寻址范围是000H~0FFFFH共64KB。

DPTR数据指针寄存器:DPTR主要用来存放16位地址,当对64KB外部数据存储器空间寻址时,可作为间址寄存器。访问程序存储器时,可作为基址寄存器。

CLR C
MOV A, #66H
JC LOOP1
CPL C
SETB 01H
ADD A, R1
ADDC A, @R3
ADDC A, 40H

Rn:当前选定的寄存器区中的8个工作寄存器R0~R7, 即n = 0~7
Ri:当前选定寄存器区中的2个寄存器R0, R1, 即i = 0,1
direct:8位内部RAM单元的地址,它可以是一个内部数据区RAM单元(00H~7FH)或特殊功能寄存器地址(I/O端口、控制寄存器、状态寄存器, 80H~0FFH).
#data:指令中的8位常数
#data16:指令中的16位常数
addr16:16位的目的地址,用于LJMP, LCALL指令,可指向64KB程序存储器地址空间。
addr11:11位的目的地址,用于AJMP,ACALL指令。目的地址必须与下一条指令的第一个字节在同一个2KB程序存储器地址空间之内。
rel:8位带符号的偏移量字节,用于SJMP和所有条件转移指令中。偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值。
bit:内部数据RAM或特殊功能寄存器中的可直接寻址位。
DPTR:数据指针,可用作16位的地址寄存器。
C:Cy进位标志位
A:ACC累加器
B:与累加器A配合使用,存放第二操作数
@:间接寻址寄存器或基址寄存器的前缀,如:@Ri, @DPTR
/:位操作数的前缀,表示对该位取反

数据传送类指令

数据传送到累加器A
数据传送到寄存器Rn
数据传送到内部RAM单元或特殊功能寄存器SFR
使用MOV将Rn,direct,@Ri, #data移动到A,Rn,direct,@Ri,DPTR中

将累加器A与外部数据存储器之间的传送指令:MOVX
将程序存储器内容传送到累加器A:MOVC

8051的存储器在物理结构上分程序存储器空间和数据存储器空间。有四个存储空间:片内程序存储器和片外程序存储空间以及片内数据存储器和片外数据存储器。这种程序存储器和数据存储器分开的结构形式,称为哈佛结构

程序存储器是用于存放是系统工作的应用程序及一些不需改变的数据常数的,程序写入程序存储器后,单片机系统只能读取程序指令使系统运行,而不能再进行改写,且系统掉电后,程序不会丢失。因此,程序存储器是ROM(Read Only Memory),即只读存储器。
数据存储器是用于存放程序运行的中间处理数据的,可随程序运行而随时写入或读出数据存储器的内容,当系统掉电时,数据全部会丢失。因此,数据存储器是RAM(Random Accese Memory),即可随机读写的存储器。

字节交换指令:XCH
XCH:将内容和源操作数内容相互交换
半字交换指令
XCHD:A,@Ri
将累加器A的第四位内容和(Ri)所指出的内部RAM单元的低四位内容想交换
SWAP:A
将累加器A的高四位和低四位交换

算数运算类指令

  • 加法指令
  1. 普通加法指令: ADD
  2. 带进位加法指令:ADDC
  3. 加1指令:INC
  4. 十进制调整指令:DA 就是将两个10进制表示的16进制数相加后再表示为10进制,简单来讲,就是用16进制表示了10进制的加法
  • 减法指令
  1. 带借位减法指令:SUBB
  2. 减一指令:DEC
  • 乘法指令:MUL
MUL AB

乘法结果低八位放在A,高八位放在B。

  • 除法指令:DIV

逻辑运算类指令

  • 简单逻辑操作指令
  1. CLR A;清零
  2. CPL A;按位取反
  3. RL A;向左循环移一位
  4. RLC A;带进位标志位向左循环移一位
  5. RR A;向右循环移一位
  6. RRC A;带进位标志位向右循环移一位
  • 逻辑与指令:ANL

  • 逻辑或指令:ORL

  • 逻辑异或指令:XRL

控制转移类指令

  • 无条件转移指令
  1. 绝对跳转指令:AJMP addr11;目标地址与AJMP后面一条指令的第一个字节必须在同一个2KB区域的存储地址空间内
  2. 短跳转指令:SJMP rel;
  3. 长跳转指令:LJMP addr16;
  4. 散转指令:JMP @A+DPTR;
  • 条件转移指令
  1. JZ rel;若(A) == 0转移
  2. JNZ rel;若(A) != 0转移

根据累加器A的内容是否为0来转移。当条件满足时,(PC)+ N + rel,其中(PC)为该条件转移指令的第一个字节的地址,N为该条件转移指令的字节数(长度)

  • 比较转移指令:CJNE

比较前面两个操作数的大小,如果它们不相等,则转移。否则,不转移。

  • 减1不为0转移指令:DJNZ

把源操作数减1,结果送到源操作数,如果结果不为0,则转移。

  • 调用及返回指令
  1. 绝对调用指令:ACALL
  2. 长调用指令:LCALL
  3. 子程序返回指令: RET
  4. 中断返回指令:RETI

位操作类指令

  • 位数据传送指令
  1. MOV C, bit;
  2. MOV bit, C;
  • 位变量修改指令
  1. CLR C;
  2. CLR bit;
  3. CPL C;
  4. CPL bit;
  5. SETB C;
  6. SETB bit;
  • 位变量逻辑与指令
  1. ANL C, bit;
  2. ANL C, /bit;
  3. ANL C, /ACC.0

bit前斜线表示对(bit)取反

  • 位变量逻辑或指令
  1. ORL C, bit;
  2. ORL C, /bit;
  • 位变量条件转移指令
  1. JC rel
  2. JNC rel
  3. JB bit, rel
  4. JNB bit, rel
  5. JBC bit, rel

JC:若(Cy)=1, 则转移
SETB:01H 置 1

压缩型BCD码和非压缩型BCD码

压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数。例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001表示0~9.例如00001000B表示十进制数8.

你可能感兴趣的:(2018-10-29【嵌入式&物联网】51单片机相关寄存器及汇编语法)