当前文档版本为 v0.4.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

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