Add with Carry adds two register values and the Carry flag value, and writes the result to the destination register.
带进位加法将两个寄存器值和进位标志值相加,并将结果写入目标寄存器。
32-bit variant
Applies when sf == 0.
ADC <Wd>, <Wn>, <Wm>
64-bit variant
Applies when sf == 1.
ADC <Xd>, <Xn>, <Xm>
Decode for all variants of this encoding
integer d = UInt(Rd);
integer n = UInt(Rn);
integer m = UInt(Rm);
integer datasize = if sf == '1' then 64 else 32;
Operation
bits(datasize) result;
bits(datasize) operand1 = X[n];
bits(datasize) operand2 = X[m];
(result, -) = AddWithCarry(operand1, operand2, PSTATE.C);
X[d] = result;
做比 32 位大的加法, 加两个 128 位的数。
128 位结果: 寄存器 0、1、2、和 3
第一个 128 位数: 寄存器 4、5、6、和 7
第二个 128 位数: 寄存器 8、9、10、和 11。
ADDS R0, R4, R8 ; 加低端的字
ADCS R1, R5, R9 ; 加下一个字,带进位
ADCS R2, R6, R10 ; 加第三个字,带进位
ADCS R3, R7, R11 ; 加高端的字,带进位