addc¶
addc A, R¶
指令格式¶
addc A, R
影响标志¶
C
AC
Z
OV
伪代码描述¶
1 2 3 4 5 6 7 | AC = ((A & 0x0f) + (R & 0x0f) + C) >> 4; SC = ((A & 0x7f) + (R & 0x7f) + C) >> 7; C_A = A + R + C; 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 | //0xA8 + 0x69 //C = 0, AC = 0, Z = 0, OV = 0 mov A, #0x69 //A = 0x69 mov 0x90, A //[0x90] = 0x69 mov A, #0xA8 //A = 0xA8 addc A, 0x90 //A = 0x11, C = 1, AC = 1, Z = 0, OV = 0 |
addc R, A¶
指令格式¶
addc R, A
影响标志¶
C
AC
Z
OV
伪代码描述¶
1 2 3 4 5 6 7 | AC = ((A & 0x0f) + (R & 0x0f) + C) >> 4; SC = ((A & 0x7f) + (R & 0x7f) + C) >> 7; C_R = A + R + C; C = C_R >> 8; R = C_R & 0xff; OV = C ^ SC; Z = R == 0 ? 1 : 0; |
指令描述¶
寄存器R和累加器A带进位加法,结果存储到寄存器R;
范例¶
1 2 3 4 5 | //0x80 + 0x80 //C = 0, AC = 0, Z = 0, OV = 0 mov A, #80 //A = 0x80 mov 0x91, A //[0x91] = 0x80 addc 0x91, A //[0x91] = 0x00, C = 1, AC = 0, Z = 1, OV = 1 |