- 单片机入门知识
学习内容:
提示:寻址方式与指令
例如:
- Rn与Ri
- 各寻址方式的区别
- 常见指令
- 伪指令
寻址方式:
1.Rn与Ri:
Rn:当前工作寄存器R0~R7中的一个(n=0,1,…,7)
Ri:当前工作寄存器R0~R1中的一个(i=0,1) 由于Ri可以间接寻址,所以常用作保存地址:@Ri
2.寻址方式:
【标号:】 助记符 【操作数】
1.立即寻址:指令直接给出所需的操作数,这种操作数称为立即数(就是将#后的立即数送给存储器)
2.直接寻址:指令直接给出操作数地址的寻址方式称为直接寻址
例:MOV A,30H
3.寄存器寻址:即寄存器中存放的就是所需操作数
例:MOV A,R0 (R0中存放的就是所需操作数)
4.寄存器间接寻址:以寄存器存放的内容为操作数地址,将该地址存放的内容作为操作数。
例:MOV A,@R0
(R0)=20H
(20H)=53
以R0存放地址20H为地址,将20H内的内容53送到A
5.变址寻址:将程序储存器中的内容读取到累加器A
MOVC A,@A+DPTR或MOVC A,@A+PC
6.相对寻址:用于实现程序的相对转移
例: JMP 61H
7.位寻址:位寻址属于直接地址,但地址为位地址
位地址就是低128字节20~2FH中的128位+SFR中是8的倍数的寄存器占用的位
例:MOV C,20H (这里的20H是位地址;20-2FH对应00~7FH位地址,SFR中部分寄存器对应80-FF位地址)
指令:
3.常见指令
(堆栈指令):
PUSH;(SP)+1
POP;(SP)-1
(交换指令):
XCH;
例:XCH A.Rn(将A和Rn的内容交换)
XCHD;
例:XCHD A,Rn(将A低半字节和Rn低半字节交换)
SWAP;
例:SWAP A(将A中高低半字节内容交换)
(加法)
ADD;(不带进位加法)
ADDC;(带进位加法)
(减法)
SUBB;(带进位减法)
(乘法)
MUL;
例:MUL AB (乘积高八位放在B,第八位放在A,乘积大于FFH,OV置1,CY总是0)
(除法)
DIV;
例:DIV Y AB (商放在A,余数放在B,若B为0,OV=1,CY总是0)
INC;(数据指针内容+1)
(逻辑运算指令);与C语言不同,汇编逻辑运算是按位运算,而不是得出真假
与:ANL
或:ORL
异或:XRL
CLR(内容清0)
CPL(按位取反)
RL(循环向左移1位)
RR(循环向右移1位)
RLC(循环向左移1位,包含进位C)
RRC(循环向右移1位,包含进位C)
(条件转移指令)
JZ(等于0则转移,否则顺序执行)
JNZ(不等于0则转移,否则顺序执行)
JC(进位CY=1则转移,否则顺序执行)
JNC(进位CY不等于1则转移,否则顺序执行)
JB(位bit=1则转移,否则顺序执行)
JNB(位bit不等于1则转移,否则顺序执行)
CJNE
例:CJNE A,#data(若A中内容不等于data则转移,否则顺序执行)
DJNZ
例:DJNZ Rn,rel(将Rn内容-1后,若不等于0则转移,否则顺序执行)
伪指令
ORG(汇编程序当前的工作位置)
END(一个文件程序的结束标志)
DB(后面接数据,将其直接写入连续的ROM单元)
例如:ORG 0100H
DB: 01H,02H,03H,07H
(将01H存放在0100H ROM单元,02H存放在0101H ROM单元…)
字符名 BIT 位地址
符号名 EQU 数值
(定义符,相当于C语言的define;BIT是将位地址赋给字符名,EQU是给符号名赋值)
#HIGH/#LOW
(#HIGH取16位二进制数值高字节,#LOW取16位二进制数值低字节)
例:MOV TH0,#HIGH(5000)
MOV TL0,#LOW(5000)
5000的16进制为1388H,将13H送给TH0,88H送给TL0