CH55X 汇编指令周期表 CH55X 汇编指令概述 : 型号包含 : a. 指令单周期型号 :CH557 CH558 CH559; b. 指令 4 周期型号 :CH551 CH552 CH553 CH554; c. 非跳转指令的指令周期数与指令字节数相同 ; d. 跳转指令含 MOVC/RET/CALL 通常比字节数多若干个周期 ; e.movc 指令多 4 或 5 个周期 ( 下条指令地址为奇数时多 5 个周期 ); f.ret/reti 指令多 3 或 4 个周期 ( 返回地址为奇数时多 4 个周期 ); g. 其余指令多 2 或 3 个周期 ( 目标地址是奇数时多 3 个周期 ); h. 条件跳转指令如果未发生跳转则周期数与指令字节数相同 ; 注 : 以上周期是指当前 CH55X 的系统主频的倒数 类别 指令格式 功能描述 指令指令字节周期 传送 MOV A, Rn (Rn) (A)Rn 中的内容送到累加器 A 中,Rn=R0-R7 类指 MOV A,data (data) (A) 直接单元地址中的内容送到累加器 A 令 (Ri) (A)Ri 内容指向的地址单元中的内容送到累加 MOV A,@Ri (29 器 A,Ri=R0 或 R1 MOV A,#data #data (A) 立即数送到累加器 A 中 MOV Rn,A (A) (Rn) 累加器 A 中的内容送到寄存器 Rn 中 MOV Rn,data (data) (Rn) 直接寻址单元中的内容送寄存器 MOV Rn,#data #data (Rn) 立即数直接送到寄存器 Rn 中 MOV data,a (A) (data) 累加器 A 中的内容送直接寻址单元 MOV data,rn (Rn) (data) 寄存器中的内容送直接寻址单元 MOV data2,data1 (data1) (data2) 直接寻址单元中的内容 1 送直接寻址单元 2 MOV data,@ri (Rn) (data) 寄存器中的内容送直接寻址单元 MOV data,#data #data (data) 立即数送直接寻址单元 MOV @Ri,A (A) ((Ri)) 累加器 A 中的内容送到以 Ri 中的内容为地址的 RAM 单元 MOV @Ri,data (data) ((Ri)) 直接寻址单元内容送到以 Ri 中的内容为地址的 RAM 单元 MOV @Ri,#data #data ((Ri)) 立即数送到以 Ri 中的内容为地址的 RAM 单元 MOV #datah (DPH),#dataL (DPL)16 位常数的高 8 位送 DPTR,#data16 到 DPH, 低 8 位送到 DPL MOVX A,@DPTR ((DPTR)) (A) 数据指针指向外部 RAM(16 位地址 ) 的内容送到累加器 A MOVX A,@Ri ((Ri)) (A) 寄存器 Ri 指向外部 RAM(8 位地址 ) 的内容送到累加器 A 中 MOVX @DPTR,A (A) ((DPTR)) 累加器中的内容送到数据指针指向外部 RAM(16 位地址 ) MOVX @Ri,A (A) ((Ri)) 累加器中的内容送到寄存器 Ri 指向外
算术运算类指令 (24 部 RAM(8 位地址 ) MOVC A,@A+DPTR ((A))+(DPTR) (A) 表格地址单元中的内容送到累加器 A 中 1 5/6 MOVC A,@A+PC ((PC))+1 (A),((A))+(PC) (A) 表格地址单元中的内容送到累加器 A 中 1 5/6 XCH A,Rn (A) (Rn) 累加器与工作寄存器 Rn 中的内容互换 XCH A,data (data) (A) 累加器 A 的内容与直接寻址单元的内容交换 XCH A,@Ri (A) ((Ri)) 累加器与工作寄存器 Ri 所指的存储单元中的内容互换 XCHD A,@Ri (A3-0) ((Ri)3-0) 累加器与工作寄存器 Ri 所指的存储单元中的内容低半字节互换 SWAP A (A3-0) (A7-4) 累加器中的内容高低半字节互换 PUSH data (SP)+1 (SP),(data) (SP) 堆栈指针首先加 1, 直接寻址单元中的数据送到堆栈指针 SP 所指的单元中 (SP) (data)(sp)-1 (SP), 堆栈指针 SP 所指的单 POP data 元数据送到直接寻址单元中, 堆栈指针 SP 再进行减 1 操作 ADD A,Rn (A)+(Rn) (A) 累加器 A 中的内容与工作寄存器 Rn 中的内容相加, 结果存在 A 中 ADD A,data (A)+(data) (A) 累加器 A 中的内容与直接地址单元中的内容相加, 结果存在 A 中 ADD A,@Ri (A)+((Ri)) (A) 累加器 A 中的内容与工作寄存器 Ri 所指向地址单元中的内容相加, 结果存在 A 中 ADD A,#data (A)+#data (A) 累加器 A 中的内容与立即数 #data 相加, 结果存在 A 中 ADDC A,Rn (A)+Rn+(C) (A) 累加器 A 中的内容与工作寄存器 Rn 中的内容 连同进位位相加, 结果存在 A 中 ADDC A,data (A)+(data)+(C) (A) 累加器 A 中的内容与直接地址单元的内容连同进位位相加, 结果存在 A 中 ADDC A,@Ri (A)+((Ri))+(C) (A) 累加器 A 中的内容与工作寄存器 Ri 指向地址单元中的内容 连同进位位相加, 结 果存在 A 中 ADDC A,#data (A)+#data +(C) (A) 累加器 A 中的内容与立即数连同进位位相加, 结果存在 A 中 INC A (A)+1 (A) 累加器 A 中的内容加 1, 结果存在 A 中 INC Rn (Rn)+1 (Rn) 寄存器 Rn 的内容加 1, 结果送回原地址单元中 INC data (data)+1 (data) 直接地址单元中的内容加 1, 结果送回原地址单元中 INC @Ri ((Ri))+1 ((Ri)) 寄存器的内容指向的地址单元中的内容加 1, 结果送回原地址单元中 INC DPTR (DPTR)+1 (DPTR) 数据指针的内容加 1, 结果送回数据指针中 SUBB A,Rn (A)-(Rn)-(C) (A) 累加器 A 中的内容与工作寄存器
逻辑操作指令 (24 中的内容 连同借位位相减, 结果存在 A 中 SUBB A,data (A)-(data)-(C) (A) 累加器 A 中的内容与直接地址单元中的内容 连同借位位相减, 结果存在 A 中 SUBB A,@Ri (A)-((Ri))-(C) (A) 累加器 A 中的内容与工作寄存器 Ri 指向的地址单元中的内容 连同借位位相减, 结果存在 A 中 SUBB A,#data (A)-#data -(C) (A) 累加器 A 中的内容与立即数 连同借位位相减, 结果存在 A 中 DEC A (A)-1 (A) 累加器 A 中的内容减 1, 结果送回累加器 A 中 DEC Rn (Rn)-1 (Rn) 寄存器 Rn 中的内容减 1, 结果送回寄存器 Rn 中 DEC data (data)-1 (data) 直接地址单元中的内容减 1, 结果送回直接地址单元中 DEC @Ri ((Ri))-1 ((Ri)) 寄存器 Ri 指向的地址单元中的内容减 1, 结果送回原地址单元中 MUL AB (A) (B) (A) 和 (B) 累加器 A 中的内容与寄存器 B 中的内容相乘, 结果存在 A B 中 (A) (B) (A) 和 (B) 累加器 A 中的内容除以寄存器 B DIV AB 中的内容, 所得到的商存在累加器 A, 而余数存在寄 存器 B 中 DA A 累加器进行 10 进制转换 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL data,a ANL data,#data ORL A,Rn ORL A,data ORL A,@Ri ORL A,#data ORL data,a 累加器 A 的内容和寄存器 Rn 中的内容执行与逻辑操作, 结果存在累加器 A 中 累加器 A 中的内容和直接地址单元中的内容执行与逻辑操作, 结果存在寄存器 A 中 累加器 A 的内容和工作寄存器 Ri 指向的地址单元中的内容执行与逻辑操作, 结果存在累加器 A 中 累加器 A 的内容和立即数执行与逻辑操作 结果存在累加器 A 中 直接地址单元中的内容和累加器 A 的内容执行与逻辑操作, 结果存在直接地址单元中 直接地址单元中的内容和立即数执行与逻辑操作, 结果存在直接地址单元中 累加器 A 的内容和寄存器 Rn 中的内容执行逻辑或操作, 结果存在累加器 A 中 累加器 A 中的内容和直接地址单元中的内容执行逻辑或操作, 结果存在寄存器 A 中 累加器 A 的内容和工作寄存器 Ri 指向的地址单元中的内容执行逻辑或操作, 结果存在累加器 A 中 累加器 A 的内容和立即数执行逻辑或操作, 结果存在累加器 A 中 直接地址单元中的内容和累加器 A 的内容执行逻辑或操作, 结果存在直接地址单元中 ORL data,#data 直接地址单元中的内容和立即数执行逻辑或操作, 结
控制转移指令 (16 果存在直接地址单元中 XRL A,Rn 累加器 A 的内容和寄存器 Rn 中的内容执行逻辑异或操作, 结果存在累加器 A 中 XRL A,data 累加器 A 中的内容和直接地址单元中的内容执行逻辑异或操作, 结果存在寄存器 A 中 XRL A,@Ri 累加器 A 的内容和工作寄存器 Ri 指向的地址单元中的内容执行逻辑异或操作, 结果存在累加器 A 中 XRL A,#data 累加器 A 的内容和立即数执行逻辑异或操作, 结果存在累加器 A 中 XRL data,a 直接地址单元中的内容和累加器 A 的内容执行逻辑异或操作, 结果存在直接地址单元中 XRL data,#data 直接地址单元中的内容和立即数执行逻辑异或操作, 结果存在直接地址单元中 CLR A 0 (A), 累加器中的内容清 0 CPL A 累加器中的内容按位取反 RL A 累加器 A 中的内容左移一位 RR A 累加器 A 中的内容右移一位 RLC A 累加器 A 中的内容连同进位位 CY 左移一位 RRC A 累加器 A 中的内容连同进位位 CY 右移一位 LJMP addr16 addr16 (PC), 给程序计数器赋予新值 (16 位地址 ) 3 5/6 AJMP addr11 (PC)+2 (PC),addr11 (PC10-0) 程序计数器赋予新值 (11 位地址 ),(PC15-11) 不改变 SJMP rel (PC)+ 2 + rel (PC) 当前程序计数器先加上 2 再加上偏移量给程序计数器赋予新值 JMP @A+DPTR (A)+(DPTR) (PC), 累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值 1 3/4 JZ rel JNZ rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel CJNE A,data,rel DJNZ Rn,rel A=0,(PC)+ 2 + rel (PC), 累加器中的内容为 0, 则转移到偏移量所指向的地址, 否则程序往下执行 A 0,(PC)+ 2 + rel (PC), 累加器中的内容不为 0, 则转移到偏移量所指向的地址, 否则程序往下执行 A #data,(pc)+ 3 + rel (PC), 累加器中的内容不 等于立即数, 则转移到偏移量所指向的地址, 否则程 3 4/5 序往下执行 A #data,(pc)+ 3 + rel (PC), 工作寄存器 Rn 中的 内容不等于立即数, 则转移到偏移量所指向的地址, 3 4/5 否则程序往下执行 A #data,(pc)+ 3 + rel (PC), 工作寄存器 Ri 指向 3 4/5 地址单元中的内容不等于立即数, 则转移到偏移量所 指向的地址, 否则程序往下执行 A (data),(pc)+ 3 + rel (PC), 累加器中的内容不 等于直接地址单元的内容, 则转移到偏移量所指向的地址, 否则程序往下执行 3 4/5 (Rn)-1 (Rn),(Rn) 0,(PC)+ 2 + rel (PC) 工作寄 存器 Rn 减 1 不等于 0, 则转移到偏移量所指向的地址, 3 4/5 否则程序往下执行
位操 作指 令 (18 DJNZ data,rel LCALL addr16 ACALL addr11 (Rn)-1 (Rn),(Rn) 0,(PC)+ 2 + rel (PC) 直接地 址单元中的内容减 1 不等于 0, 则转移到偏移量所指 向的地址, 否则程序往下执行 长调用指令, 可在 64kB 空间调用子程序 此时 (PC)+ 3 (PC),(SP)+ 1 (SP),(PC7-0) (SP),(SP)+ 1 (SP),(PC15-8) (SP),addr16 (PC), 即分别从 堆栈中弹出调用子程序时压入的返回地址 绝对调用指令, 可在 2kB 空间调用子程序, 此时 (PC)+ 2 (PC),(SP)+ 1 (SP),(PC7-0) (SP),(SP)+ 1 (SP),(PC15-8) (SP),addr11 (PC10-0) 3 4/5 3 4/5 RET 子程序返回指令 1 4/5 RETI 中断返回指令,RETI 指令不能用 RET 代替 1 4/5 MOV C,bit bit CY, 某位数据送 CY MOV bit,c CY bit,cy 数据送某位 CLR C 0 CY, 清 CY CLR bit 0 bit, 清某一位 SETB C 1 CY, 置位 CY SETB bit 1 bit, 置位某一位 CPL C CY 取反 CPL bit Bit 取反 ANL C,bit CY 和 bit 相与, 结果存放到 CY ANL C,/bit CY 和 bit 的反码相与, 结果存放到 CY ORL C,bit CY 和 bit 相或, 结果存放到 CY ORL C,/bit CY 和 bit 的反码相或, 结果存放到 CY JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel NOP (CY)=1 转移,(PC)+2+rel PC, 否则程序往下执行, (PC)+2 PC (CY)=0 转移,(PC)+2+rel PC, 否则程序往下执行, (PC)+2 PC 位状态为 1 转移,(PC)+3+rel PC, 否则程序往下执 行,(PC)+3 PC 位状态为 0 转移,(PC)+3+rel PC, 否则程序往下执 行,(PC)+3 PC 位状态为 1 转移, 并使该位清 0,(PC)+3+rel PC, 否则程序往下执行,(PC)+3 PC 这条指令除了使 PC 加 1, 消耗一个机器周期外, 没有 执行任何操作, 可用于短时间的延时 新增指令 DB #0A5 XRAM 快速复制指令 新增指令使用示例 : ;New Instruction: ;Instruction Code: 0xA5 ;Instruction Cycle: 1 ;Instruction Operation: MOVX @DPTR1,A ;step-1. write ACC @DPTR1 into xdata SRAM embedded chip ;step-2. increase DPTR1
ASM example: INC XBUS_AUX MOV DPTR,#TARGET_ADDR ;DPTR1 DEC XBUS_AUX MOV DPTR,#SOURCE_ADDR ;DPTR0 MOV R7,#xxH LOOP: MOVX A,@DPTR ;DPTR0 INC DPTR ;DPTR0, if need DB 0A5H ;MOVX @DPTR1,A & INC DPTR1 DJNZ R7,LOOP 注 : 标记为灰色, 代表指令字节数不等于执行该指令需要的机器周期 ;