第一章
十进制整数转换2,8,16
整数部分:除基取余
小数部分:乘基取整(小数部分有精度要求)2,8,16进制转换10进制
加权求和二进制转8,16进制
2->8 合三为一(三位二进制为一位八进制,从小数点起取三位)
8->2 分一为三
16<->2 分一为四,合四为一
原码:符号位1+真值位7
反码:正数的反码与原码相同。负数的反码,原码除符号位不变,其余位逐位取反。
补码 :正数的补码与原码相同,负数的补码由其原码求得反码后再在末位+1。
BCD码:四位二进制表示一位十进制(8421)
第二章
引脚
电源引脚
Vcc +5V电源正端 (40)
Vss 接地 (20)时钟电路引脚
XTAL1 (19)
XTAL2 (18)
接振荡器-
控制信号引脚
EA (31) 允许信号输入端/编程电压输入端,EA=1,允许访问片内程序存储器,=0只允许访问片外程序存储器。PSEN (29) ROM读选信号输出引脚,低电平有效。
ALE/PROG (30) 地址锁存允许信号输入端/编程脉冲输入端。
RST/Vpd (9) 复位/备用电源
仅影响特殊功能寄存器中的内容。
PC 0000H 指示下一条要执行指令的地址
DPTR 0000H
P0~P3 FFH 并行输入/输出引脚
P0-P3口
PSW 8位特殊功能寄存器
PC 程序计数器 16位指针
DPTR 数据指针 16位地址寄存器
SP 堆栈指针 堆栈区栈顶地址
CPU时序
1.振荡周期 P 1/12μs
2.时钟周期 S 1个时钟周期=2个震荡周期 1/6μs
3.机器周期 1个机器周期=6个时钟周期 1μs
4.指令周期 以机器周期位单位,根据指令不同可包含1~4个机器周期。
存储器
- 内部数据存储器
00H
工作寄存器区
1FH
20H
位寻址区
2FH
30H
数据缓冲区(堆栈区)
7FH
80H
数据缓冲区增加部分(特殊功能寄存器区SFR)
FFH··
第三章
指令
#data | 8位立即数 #为前缀
direct | 8位直接地址
addr16 | 16位源地址
Rn | 当前工作寄存器组R0~R7中的一个寄存器
Ri | 当前工作寄存器组R0或R1中的一个
@ | 间接寻址前缀
rel | 相对地址偏移量
$ | 指代本条指令的源地址
bit | 内部存储器中可寻址位的位地址
C | 进位标志位
(X) | X为寄存器名或储存单元地址,(X)表示其中存储的内容
((X)) | 表示以该寄存器或存储单元中的内容为地址的另一存储单元中的内容
<- | 箭头左边内容被右边内容取代
1. 数据传送指令
MOV 数据传送指令
不存在 MOV @Ri,Rn @Ri,Rn或两个@Ri,两个Rn不能同时出现
MOVX 外部数据存储器数据传送指令
(累加器A 与片外RAM之间的数据传送)
MOVX A,@DPTR //取数,16位
MOVX A,@Ri //取数,低8位
MOVX @DPTR,A //送数
MOVX @Ri,A //送数
MOVC 程序存储器数据传送指令
(单片机与ROM之间数据传送采用变址寻址方式)
MOVC A,@A+DPTR //从ROM里读取数据
MOVC A,@A+PC
ROM只读,不能往外传数据。
XCH 字节交换指令
XCH A,direct
XCH A,Rn
XCH A,@Ri
XCHD 半字节交换指令
XCND A,@Ri //低四位交换
SWAP 半字节交换指令
SWAP A //A中高4位和第四位交换
XCHD A,@Ri
SWAP A //三条指令实现换高四位
PUSH 堆栈操作指令,压入
PUSH direct
POP 堆栈操作指令,弹出
POP direct
30H-7FH(堆栈区),栈底复位为07H
2. 运算指令
ADD 加法指令
ADD A,Rn
ADD A,direct
ADD A,@Ri
ADD A,#data
算低八位时用,不考虑进位,高八位用ADDC
ADDC 带进位的加法指令
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data
16位时低8位有进位,16位时用ADDC
SUBB 减法
SUBB A,Rn
SUBB A,direct
SUBB A,@Ri
SUBB A,#data
包含进位,低8位要清理CY
DA BCD码调整指令
DA A
只能跟在进行BCD码运算的ADD或ADDC加法指令后面,不适用于减法。
INC 加1指令
INC A
INC Rn
INC direct
INC @Ri
INC DPTR
DEC 减1指令
DEC A
DEC Rn
DEC direct
DEC @Ri
DEC DPTR
MUL 乘法指令
MUL AB
AB相乘,A中存低8位,B中存高8位。
DIV 除法指令
DIV AB
AB不可交换,A被除数,B除数。 A存商,B存余数。
ANL 与
ANL A,direct|Rn|@Ri|#data
ANL direct,A|#data
按位运算
ORL 或
ORL A,direct|Rn|@Ri|#data
ORL direct,A|#data
与1或,都为1,与0或,原来是什么还是什么。可用于置1。
XRL 异或
ORL A,direct|Rn|@Ri|#data
ORL direct,A|#data
不同为1,相同为0。 和自身异或可以置0
CLR 累加器A清零
CLR A //A<-00H
CPL 累加器A取反
CPL A
RL A 循环左移 //执行带进位的循环移位指令前,必须给CY置位或清零
RLC A 带CY位循环左移 //移动的是A.0-A.7
RR A 循环右移 //带C的多了个CY
RRC A 带CY位循环右移 //
3. 控制转移指令
无条件转移指令
LJMP 长转移指令
LJMP addr16
改变PC
AJMP 绝对转移指令
AJMP addr11
改变PC低11位,转移范围2KB,普遍不用该指令
SJMP 相对转移指令
SJMP rel
rel为当前PC值与目的PC值相对差。当前PC+偏移量=新的PC -128~+127
JMP 间接长转移
条件转移指令
累加器判零转移 JZ
JNZ
比较转移 CJNE
减1条件转移 DJNZ
子程序调用及返回指令
长调用 LCALL
绝对调用 ACALL
返回指令 RET
RETI
空操作指令 NOP
位数据传送指令
MOV C,bit
MOV bit,C
位置位指令
CLR C
CLR bit
SETB C
SETB bit
位逻辑运算指令
ANL C,bit
ANL C,/bit
ORL C,bit
ORL C,/bit
CPL C
CPL bit
位条件转移指令
判断累加器CY内容的条件转移指令
JC rel
JNC rel
判断bit内容的条件转移指令
JB bit rel
JNB bit rel
JBC bit rel
伪指令
设置目标程序起始地址的伪指令
ORG 16位地址
规定汇编过程结束的伪指令
END
在ROM中定义数据字节的伪指令
DB 项或项表
在ROM中定义数据字的伪指令
DW 项或项表
在ROM中预留存储空间的伪指令
DS 表达式
赋值伪指令
EQU 项
位地址赋值伪指令
标号: BIT 位地址