ZHDU116G January 2018 – June 2024 CC1312PSIP , CC1312R , CC1352P , CC1352R , CC2642R , CC2642R-Q1 , CC2652P , CC2652PSIP , CC2652R , CC2652RB , CC2652RSIP , CC2662R-Q1
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| ld Rd, [#addr] | 直接加载 | Rd = mem[addr] | — | — | — | — | | addr |
| ld Rd, [Rs] | 间接加载 | Rd = mem[Rs] | — | — | — | — | | |
| ld Rd, [Rs++] | 间接加载, 后增量 | Rd = mem[Rs], Rs++ | — | — | — | — | | |
| ld Rd, [Rs+R0] | 索引加载 | Rd = mem[Rs+R0] | — | — | — | — | | |
| st Rd, [#addr] | 直接存储 | mem[addr] = Rd | — | — | — | — | | addr |
| st Rd, [Rs] | 间接存储 | mem[Rs] = Rd | — | — | — | — | | |
| st Rd, [Rs++] | 间接存储 后增量 | mem[Rs] = Rd, Rs++ | — | — | — | — | | |
| st Rd, [Rs+R0] | 索引存储 | mem[Rs+R0] = Rd | — | — | — | — | | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| in Rd, [#addr] | 直接输入 | Rd = reg[addr] | — | — | — | — | | addr |
| in Rd, [Rs] | 间接输入 | Rd = reg[Rs] | — | — | — | — | | |
| out Rd, [#addr] | 直接输出 | reg[addr] = Rd | — | — | — | — | | addr |
| out Rd, [Rs] | 间接输出 | reg[Rs] = Rd | — | — | — | — | | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| iobclr #imm, [#addr] | 直接 I/O 位清零 | reg[addr] &= ~2^imm | — | — | — | — | | addr |
| iobset #imm, [#addr] | 直接 I/O 位设置 | reg[addr] |= 2^imm | — | — | — | — | | addr |
| iobtst #imm, [#addr] | 直接 I/O 位测试 | reg[addr] & 2^imm | — | — | √ | — | | addr |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| ld Rd, #simm | 立即数加载 | Rd = simm | — | — | — | — | | simm |
| ld Rd, Rs | Load register(加载寄存器) | Rd = Rs | — | — | — | — | | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| and Rd, #imm | 立即数与 | Rd &= imm | x | x | 0 | 0 | | imm |
| or Rd, #imm | 立即数或 | Rd |= imm | x | x | 0 | 0 | | imm |
| xor Rd, #imm | 立即数异或 | Rd ^= imm | x | x | 0 | 0 | | imm |
| tst Rd, #imm | 立即数测试 | Rd & imm | x | x | 0 | 0 | | imm |
| and Rd, Rs | 寄存器与 | Rd &= Rs | x | x | 0 | 0 | | |
| or Rd, Rs | 寄存器或 | Rd |= Rs | x | x | 0 | 0 | | |
| xor Rd, Rs | 寄存器异或 | Rd ^= Rs | x | x | 0 | 0 | | |
| tst Rd, Rs | 寄存器测试 | Rd & Rs | x | x | 0 | 0 | | |
| inv Rd | 寄存器取反 | Rd = ~Rd | x | x | 0 | 0 | | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| add Rd, #simm | 立即数加 | Rd += simm | x | x | x | x | | simm |
| cmp Rd, #simm | 立即数比较 | Rd – simm | x | x | x | x | | simm |
| sub Rd, Rs | 寄存器减 | Rd -= Rs | x | x | x | x | | |
| add Rd, Rs | 寄存器加 | Rd += Rs | x | x | x | x | | |
| cmp Rd, Rs | 寄存器比较 | Rd – Rs | x | x | x | x | | |
| subr Rd, Rs | 寄存器反向减 | Rd = Rs – Rd | x | x | x | x | | |
| abs Rd | 寄存器绝对值 | Rd = (Rd >= 0) ? Rd : -Rd | x | x | x | x | | |
| neg Rd | 寄存器取反 | Rd = -Rd | x | x | x | x | | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| lsl Rd, Rs | 寄存器逻辑左移 | Rd <<= Rs | x | x | x | 0 | | |
| lsr Rd, Rs | 寄存器逻辑右移 | Rd >>= Rs | x | x | x | 0 | | |
| asr Rd, Rs | 寄存器算术右移 | Rd >>= Rs, 保留符号 | x | x | x | 0 | | |
| lsl Rd, #imm | 立即数逻辑左移(1) | Rd <<= imm | x | x | x | 0 | | |
| lsr Rd, #imm | 立即数逻辑右移(1) | Rd >>= imm | x | x | x | 0 | | |
| asr Rd, #imm | 立即数算术右移(1) | Rd >>= imm, preserve sign | x | x | x | 0 | | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| jmp addr | 直接跳转 | pc = addr | — | — | — | — | | addr |
| jsr addr | 直接子例程跳转 | push(stack, pc + 1), pc = addr | — | — | — | — | | addr |
| jmp R0 | 间接跳转 | pc = R0 | — | — | — | — | | |
| jsr R0 | 间接子例程跳转 | push(stack, pc + 1), pc = R0 | — | — | — | — | | |
| rts | 子例程返回 | pc = pop(stack) | — | — | — | — | | |
| bra rel | 相对分支 | pc = pc + 1 + rel | — | — | — | — | | |
| b<cc> rel | 条件满足时相对分支 | if (cc) pc = pc + 1 + rel | — | — | — | — | | |
| bev0 #ev, rel | 事件 0 时分支 | if (!events[ev]) pc = pc + 1 + rel | — | — | — | — | | |
| bev01#ev, rel | 事件 1 时分支 | if (events[ev]) pc = pc + 1 + rel | — | — | — | — | | |
对于所有其他指令以及当不执行条件分支时,程序计数器递增 1: pc = pc + 1。有关条件操作,请参阅表 20-12。
| 语法 <cc> | 说明 | 条件 | 编码 [3:0] |
|---|---|---|---|
| gtu | 大于,无符号 | !C & !Z | |
| geu / iob0 | 大于或等于,无符号/ 测试 I/O 位 = 0 | !C | |
| eq / z | 相等/为零 | Z | |
| novf | 无溢出 | !V | |
| pos | 正 | !N | |
| ges | 大于或等于,有符号 | (N & V) | (!N & !V) | |
| gts | 大于,有符号 | ((N & V) | (!N & !V)) & !Z | |
| leu | 小于或等于,无符号 | C | Z | |
| ltu / iob1 | 小于,无符号/测试 I/O 位 = 1 | C | |
| neq / nz | 不等于/非零 | !Z | |
| ovf | 溢出 | V | |
| neg | 负 | N | |
| lts | 小于,有符号 | (N & !V) | (!N & V) | |
| les | 小于或等于,有符号 | (N & !V) | (!N & V) | Z | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| loop R1, rel | 循环寄存器, n = 1..255(1) | lc = LSB(R1), ls = pc + 1, le = pc + rel | x | x | x | x | | |
| loop #n, rel | 循环立即数, n = 2^x (x = 1..7)(1) | lc = n, ls = pc + 1, le = pc + rel | x | x | x | x | | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| wev0 #ev | 等待事件 0 | 停止直到 events[ev] == 0 | x | x | x | x | | |
| wev1 #ev | 等待事件 1 | 停止直到 events[ev] == 1 | x | x | x | x | | |
| 休眠 | 睡眠 | 停止直到唤醒,然后 pc = 2 * 向量 | x | x | x | x | | |
| 语法 | 说明 | 运行 | 状态标志 | 编码 [15:0] | 前缀 | |||
|---|---|---|---|---|---|---|---|---|
| Z | N | C | V | |||||
| nop | 无操作 | R7 = R7(无影响) | x | x | x | x | | |
| pfix #imm | 前缀(1) | 在下一条指令上使用前缀 | x | x | x | x | | |
| dw #imm | 数据字 | 插入 16 位立即数据值 | x | x | x | x | | |
pfix ) 由汇编器在需要时自动插入。请勿手动插入此指令。