1、机器码
(1)MOV A,#0x60对应机器码为7460
(2)7460对应二进制 0111 0100 0110 0000
0x74对应指令,0x60对应立即数。
(3)immediate data翻译为立即数。
(4)可人为查表把汇编转为机器码,也可通过编译器把汇编转为机器码。
2、汇编常见缩写
(1)Rn: n可取0~7,表示R0~R7其中的一个。
(2)Ri: i可取0或1,表示R0或R1。(间接寻址只能用Ri)
(3)Direct: 8位RAM的直接地址。
(4)#data: 8位立即数
(5)#data16: 16位立即数
(6)Rel: 偏移地址
(7)Bit: 位地址
(8)C: 进位标志位
(9)@: 间接寻址
3、汇编指令功能分类
按功能分类,指令系统可分为:
(1)数据传送类指令;
(2)算数操作类指令;
(3)逻辑操作类指令;
(4)控制转移类指令;
(5)布尔变量操作类指令。
3.1、数据传送类指令
(1)51中没有此指令MOV Rn,Rn。(ARM中可以这样)
(2)MOV direct1,direcct2 ;两个直接地址可以进行数据的传递.
(3))MOVX 访问外部RAM, MOVC访问ROM。
(4)指令SWP A ;A中的高低四位相互交换。
(5)出栈和入栈
- PUSH direct 直接地址单元中的数据压入堆栈
- POP direct 栈顶数据出栈送到直接地址单元
- PUSH 和 POP 后面不能直接跟寄存器
- 入栈顺序:栈顶指针SP加1,direct中数据压入栈顶指针所指的空间
- 出栈顺序:栈顶指针所指数据放回direct地址中,SP减1
- ACC表示寄存器A的地址,ACC等价于0xE0
- A表示寄存器A
举例:
3.2、算数操作类指令
包含常见的加减乘除指令。
(1)ADD A, Rn ;寄存器Rn中的值加寄存器A中的值的和放到寄存器A中
(2)SUBB A, Rn ;累加器带借位减寄存器内容。
(3)MUL AB ;A乘以B。低字节存放A,高字节存放在B
(4)DIV AB ;A除以B。商存放在A,余数放入B
(5)INC direct ;直接地址单元加1,不会影响进位标志位
(6)DEC driect ;直接地址单元减1,不会影响进位标志位
(7)DA A ;累加器十进制调整,使用16进制表示10进制
把寄存器A的值按照BCD码重新计算,高四位表示十进制的,低四位表示个位。
例如:0x3B = 3* 10 + 11 = 41
3.3、逻辑操作类指令
(1)ANL A, Rn ;累加器与寄存器相“与”
(2)ORL A, Rn ;累加器与寄存器相"或"
(3)XRL A, Rn ;累加器与寄存器相"异或"
(4)CLR A ;累加器清“0”
(5)CPL A ;累加器求反
3.4、控制转移类指令
(1)计算机语言通常包含三种结构:顺序结构;选择结构;循环结构。
(2)ACALL addr11 ;绝对(短调用子程序)
(3)LCALL addr16 ;长调用子程序
(4)AJMP addr11 ;绝对短转移
(5)LJMP addr16 ;长转移
(6)LCALL用于调用子程序,LJMP用于绝对跳转。
(7)LJMP是绝对跳转;SJMP是相对跳转。
(8)JZ rel ;累加器为零转移
(9)JNZ rel ;累加器非零转移
(10)以下两条常用于选择循环语句
CJNE A, direct, rel ;累加器与直接地址单元比较,不相等则转移
DJNZ direct, rel ;直接地址单元减1,非零转移
(11)NOP ;空操作
3.5、布尔变量操作类指令
(1)根据51单片机内部结构:
位寻址区为0x20~0x2F。每一个地址对应一个字节,一个字节对应8位,每一位都是可以位寻址的。
举例:
20.0:表示0x20地址的bit0,对应地址0x00
20.1:表示0x20地址的bit1,对应地址0x01
20.2:表示0x20地址的bit2,对应地址0x02......
(2)bit位地址0x00-0x7F用于位寻址区。
(3)位寻址地址与通常地址采用不同指令进行区分。
(4)MOV C, bit ;直接地址位送入进位位
(5)MOV bit, C ;进位位送入直接地址位
(6)特殊功能寄存器中,也有一部分是可位寻址的,一部分是不可位寻址的。
(7)bit位地址0x80-0xFF用于可以位寻址的特殊功能寄存器的位访问。