add¶
add A, #K¶
指令格式¶
add A, #K
影响标志¶
C AC Z OV
伪代码描述¶
1 2 3 4 5 6 7 | AC = ((A & 0x0f) + (K & 0x0f)) >> 4; SC = ((A & 0x7f) + (K & 0x7f)) >> 7; C_A = A + K; C = C_A >> 8; A = C_A & 0xff; OV = C ^ SC; Z = A == 0 ? 1 : 0; |
指令描述¶
累加器A和立即数K加法,结果存储到累加器A。
范例¶
1 2 3 4 | //0xE9 + 0x1D //C = 0, AC = 0, Z = 0, OV = 0 mov A, #0xE9 //A = 0xE9 add A, #0x1D //A = 0x06, C = 1, AC = 1, Z = 0, OV = 0 |
add A, R¶
指令格式¶
add A, R
影响标志¶
C AC Z OV
伪代码描述¶
1 2 3 4 5 6 7 | AC = ((A & 0x0f) + (R & 0x0f)) >> 4; SC = ((A & 0x7f) + (R & 0x7f)) >> 7; C_A = A + R; C = C_A >> 8; A = C_A & 0xff; OV = C ^ SC; Z = A == 0 ? 1 : 0; |
指令描述¶
累加器A和寄存器R加法,结果存储到累加器A。
范例¶
1 2 3 4 5 6 | //0x20 + 0xE0 //C = 0, AC = 0, Z = 0, OV = 0 mov A, #0xE0 //A = 0xE0 mov 0x80, A //[0x80] = 0xE0 mov A, #0x20 //A = 0x20 add A, 0x80 //A = 0x00, C = 1, AC = 0, Z = 1, OV = 0 |
add R, A¶
指令格式¶
add R, A
影响标志¶
C AC Z OV
伪代码描述¶
1 2 3 4 5 6 7 | AC = ((A & 0x0f) + (R & 0x0f)) >> 4; SC = ((A & 0x7f) + (R & 0x7f)) >> 7; C_R = A + R; C = C_R >> 8; R = C_R & 0xff; OV = C ^ SC; Z = R == 0 ? 1 : 0; |
指令描述¶
寄存器R和累加器A加法,结果存储到寄存器R。
范例¶
1 2 3 4 5 6 | //0x6E + 0x12 //C = 0, AC = 0, Z = 0, OV = 0 mov A, #0x6E //A = 0x6E mov 0x90, A //[0x90] = 0x6E mov A, #0x12 //A = 0x12 add 0x90, A //[0x90] = 0x80, C = 0, AC = 1, Z = 0, OV = 1 |
add PCL, A¶
指令格式¶
add PCL, A
影响标志¶
C AC Z OV
伪代码描述¶
1 2 3 4 5 6 7 8 | AC = ((A & 0x0f) + (PCL & 0x0f)) >> 4; SC = ((A & 0x7f) + (PCL & 0x7f)) >> 7; C_PCL = A + PCL; C = C_PCL >> 8; PCL = C_PCL & 0xff; OV = C ^ SC; Z = A == 0 ? 1 : 0; PCH = PCH + C; |
指令描述¶
将累加器A的内容与PC的内容进行相加,结果放到PC中。 该指令会引起程序跳转,主要用来实现跳转表功能。
范例¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /**
* 设置累加器A的值,然后调用或者跳转到jmp_tbl,如果
* A=0: 程序最终跳转到prog_0;
* A=1: 程序最终跳转到prog_1;
* A=2: 程序最终跳转到prog_2;
* A=3: 程序最终跳转到prog_3;
* A=4: 程序最终跳转到prog_4。
*/
cseg
jmp_tbl: //跳转表
add PCL, A
jmp prog_0
jmp prog_1
jmp prog_2
jmp prog_3
jmp prog_4
cseg
prog_0:
//do something
cseg
prog_1:
//do something
cseg
prog_2:
//do something
cseg
prog_3:
//do something
cseg
prog_4:
//do something
|