ADC, ADCS
Summary
이름에 들어간 C는 Carry (자리올림 플래그)를 뜻합니다.
한 줄로 요약하면
"보통 덧셈을 하고 남은 잔돈(올림수)까지 뒤차가 깔끔하게 이어받아서 더해주는 연쇄 덧셈 기차"입니다.
64비트를 초월해 128비트, 256비트 무한대의 숫자를 다루는 우주급 아키텍처 연산의 핵심 뼈대이죠.
🧠 ADC & ADCS: 64비트 장벽을 허무는 빅데이터 연쇄 기차
우리가 쓰는 레지스터는 딱 64비트 크기입니다. 만약 64비트 서랍 크기를 아득히 넘어가는 우주적인 대용량 숫자(예: 128비트 정수 연산)를 더해야 할 때 상남자들은 어떻게 할까요? 숫자를 하위 64비트와 상위 64비트로 반반 쪼개서 기차처럼 연쇄 덧셈을 해야 합니다. 이때 캐리(Carry) 플래그를 주고받는 마법이 일어납니다!
- ADCS (Add with Carry and Set flags): 일단 하위 64비트끼리 더합니다. 맨 끝에 S가 붙었기 때문에 “더하다가 64비트 범위를 넘쳐서 올림수가 발생하면 CPU 플래그 서랍의 Carry 비트(C)를 1로 켜라!” 하고 뒤차에게 신호를 남기는 명령어입니다.
- ADC (Add with Carry): 상위 64비트끼리 더하는 뒤차입니다. 이 녀석은 그냥 더하는 게 아니라 “앞차(ADCS)가 계산하다가 넘겨준 올림수(C)가 있으면 그것까지 보너스로 얹어서 더해라!” 하고 계산을 종결합니다.
🧱 소스코드 샘플
// =========================================================================
// Hun ARM64 Mnemonic Dictionary - Open Example
// Mnemonic: ADC / ADCS (Add with Carry)
// Description: 앞선 연산에서 발생한 올림수(Carry) 플래그까지 포함하여 덧셈 수행
// =========================================================================
.global _hun_adc_128bit_add_example
.text
.align 3
_hun_adc_128bit_add_example:
// [무대 세팅] 128비트 거대한 숫자 2쌍을 준비합니다.
// 숫자 A (128비트): X1(상위 64비트) : X0(하위 64비트)
// 숫자 B (128비트): X3(상위 64비트) : X2(하위 64비트)
// 계산을 쉽게 하기 위해 하위 64비트 합이 무조건 넘치도록(Overflow) 세팅합니다.
MOV X0, #0xFFFFFFFFFFFFFFFF // A의 하위값 (최대치)
MOV X1, #0x0000000000000001 // A의 상위값
MOV X2, #0x0000000000000001 // B의 하위값
MOV X3, #0x0000000000000001 // B의 상위값
// 1. [앞차 출발: ADCS] 하위 64비트끼리 먼저 더합니다.
// 0xFFFFFFFFFFFFFFFF + 0x1 을 하면 자릿수가 넘쳐서 0이 되고 올림수(1)가 발생합니다.
// 맨 끝의 'S' 덕분에 CPU의 Carry 플래그(C)가 즉시 '1'로 켜집니다!
ADCS X4, X0, X2 // X4 = X0 + X2 (결과는 0, 캐리 플래그 C=1 셋팅)
// 2. [뒤차 출발: ADC] 상위 64비트끼리 더하면서 앞의 올림수까지 싹 쓸어 담습니다.
// 공식: 대상 = 소스1 + 소스2 + Carry플래그(0 또는 1)
// 계산: X1(1) + X3(1) + Carry(1) = 총 '3'이 됩니다!
ADC X5, X1, X3 // X5 = X1 + X3 + Carry (결과는 3)
// [최종 결과]
// 최종 128비트 결과값은 X5(상위):X4(하위) 형태로 '3 : 0' 이라는 완벽한 대장 정수가 저장됩니다.
// 단 2줄, 2클럭 만에 128비트 수학 연산을 하드웨어 회로 수준에서 종결!
RET
🎯 요약
- ADCS: “일단 더하고 올림수가 났는지 안 났는지 플래그에 흔적을 남겨라! 뒤차 받아라!”
- ADC: “내 앞차들의 사정(Carry 플래그)을 눈으로 보고, 그 올림수 조각까지 기차 체인처럼 연결해서 마저 더해라!”
- 커널 실전 활용 팩트: 암호학 알고리즘(RSA, AES 등)이나 블록체인 해시 함수를 커널 레벨에서 초고속으로 계산할 때 이 대용량 멀티 워드 체인이 0순위로 쓰입니다. S가 붙고 안 붙고의 연쇄 작용을 아는 것이 상남자의 정밀 제어 핵심입니다!