伪指令:
EQU:
Equal,定义常量
COUNT EQU 10H ; 定义一个符号名COUNT,其值为10H
DELAY EQU 500 ; 定义一个符号名DELAY,其值为500
数据传送:
MOV:
MOVE,传送数据
MOVC:
算术运算:
跳转:
LJMP
Long Jump,长跳转
LJMP label
- 无条件跳转: 程序执行到 LJMP 指令时,会立即跳转到标号
label
所指定的位置继续执行,而不再执行 LJMP 指令之后的指令。 - 长跳转: 与短跳转指令 SJMP 相比,LJMP 的跳转范围更大,可以跳转到程序空间的任意位置,而不受限于当前指令的附近。
SJMP
Short Jump,短跳转
SJMP label
- 短跳转: 程序执行到 SJMP 指令时,会立即跳转到标号
label
所指定的位置继续执行,而不再执行 SJMP 指令之后的指令。 - 跳转范围有限: SJMP 指令的跳转范围是相对于当前指令的,通常在-128到+127字节之间。
DJNZ
Decrement and Jump If Not Zero
DJNZ Rn, rel
DJNZ direct, rel
- 减一操作: 指令执行时,会先将 Rn 寄存器或 direct 所指向的内存单元中的值减1。
- 判断是否为零: 然后判断减1后的结果是否为0。
- 条件跳转: 如果减1后的结果不为0,则程序跳转到当前指令地址加上 rel 所指定的偏移量处继续执行;如果结果为0,则程序继续顺序执行下一条指令。
CJNE
Compare and Jump if Not Equal
CINE A,dir, rel
CINE A, #data,rel
CINE Rn,#data,rel
CINE @Ri,#data, rel
- 比较两个操作数: CJNE 指令会比较两个操作数的值。
- 条件跳转: 如果两个操作数不相等,则程序会跳转到指定的标号处继续执行。
JB
Jump if Bit is set
AJMP
Absolute Jump Within 2K
RET
Return from subroutine,从当前子程序返回到调用它的主程序
RETI
Return from Interrupt,中断服务程序返回到主程序
位操作:
RL
Rotate Left,循环左移
RL A
- A中的最高位(bit7)移入进位标志位C。
- A中的其他各位向左移动一位。
- C中的位移入A的最低位(bit0)
CPL
Complement
取反
END
cpp
END [标号]
- END: 这是指令的关键字,表示程序结束。
- [标号]: 是可选的。如果指定了标号,那么程序执行时会从这个标号处开始。通常,这个标号是程序的起始地址。
NOP
No Operation
即"空操作"。它的作用就是在程序执行过程中不进行任何实际操作,仅仅让程序计数器PC加1,从而实现一个机器周期的延时