당신이 찾은 코드는 아주 원시적 인 컴퓨터 하드웨어 가 "add"명령을 어떻게 구현할 수 있는지 설명하려고합니다 . 이 방법이 어떤 CPU 에서도 사용되지 않는다는 것을 보장 할 수 있기 때문에 "might"라고 말하고 그 이유를 설명하겠습니다.
정상적인 생활에서는 십진수를 사용하고이를 더하는 방법을 배웠습니다. 두 개의 숫자를 더하려면 가장 낮은 두 자리를 더합니다. 결과가 10 미만이면 결과를 기록하고 다음 자리로 진행합니다. 결과가 10 이상이면 결과를 빼고 10을 적고 다음 숫자로 진행하여 1을 더 추가하는 것을 잊지 마십시오. 예 : 23 + 37, 3 + 7 = 10을 더하고 0을 적고 다음 위치에 1을 더 추가하는 것을 잊지 마십시오. 10 초 위치에 (2 + 3) + 1 = 6을 더하고 적어 둡니다. 결과는 60입니다.
이진수로 똑같은 일을 할 수 있습니다. 차이점은 유일한 자릿수는 0과 1이므로 가능한 합계는 0, 1, 2 뿐이라는 것입니다. 32 비트 숫자의 경우 한 자릿수 위치를 차례로 처리합니다. 이것이 바로 원시 컴퓨터 하드웨어가 그렇게하는 방법입니다.
이 코드는 다르게 작동합니다. 두 자릿수가 1이면 두 이진수의 합이 2라는 것을 알고 있습니다. 두 자릿수가 1이면 다음 이진수 위치에 1을 더하고 0을 기록합니다. 이것이 t의 계산이하는 일입니다. 여기서 두 이진수는 모두 1 (&)이고 다음 자리 위치 (<< 1)로 이동합니다. 그런 다음 더하기를 수행합니다. 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1은 2이지만 0을 적습니다. 이것이 배타적 또는 연산자가하는 일입니다.
그러나 다음 자리에서 처리해야하는 모든 1은 처리되지 않았습니다. 여전히 추가해야합니다. 이것이 코드가 루프를 수행하는 이유입니다. 다음 반복에서 모든 추가 1이 추가됩니다.
프로세서가 그렇게하지 않는 이유는 무엇입니까? 루프이기 때문에 프로세서는 루프를 좋아하지 않으며 느립니다. 최악의 경우 32 회 반복이 필요하기 때문에 속도가 느립니다. 0xffffffff (32 개의 1 비트)에 1을 더하면 첫 번째 반복은 y의 비트 0을 지우고 x를 2로 설정합니다. 두 번째 반복은 비트 1을 지 웁니다. y의 x를 4로 설정합니다. 결과를 얻으려면 32 번의 반복이 필요합니다. 그러나 각 반복은 x 및 y의 모든 비트를 처리해야하므로 많은 하드웨어가 필요합니다.
원시 프로세서는 가장 낮은 위치에서 가장 높은 위치까지 십진수 산술을 수행하는 방식만큼 빠르게 작업을 수행합니다. 또한 32 단계가 필요하지만 각 단계는 이전 비트 위치에서 2 비트와 1 개의 값만 처리하므로 구현하기가 훨씬 쉽습니다. 원시 컴퓨터에서도 루프를 구현하지 않고도이를 수행 할 수 있습니다.
현대적이고 빠르고 복잡한 CPU는 "조건부 합산 기"를 사용합니다. 특히 64 비트 가산기와 같이 비트 수가 많으면 많은 시간을 절약 할 수 있습니다.
64 비트 가산기는 두 부분으로 구성됩니다. 첫째, 가장 낮은 32 비트에 대한 32 비트 가산기입니다. 이 32 비트 가산기는 합계와 "carry"(다음 비트 위치에 1을 추가해야한다는 표시기)를 생성합니다. 둘째, 더 높은 32 비트를위한 두 개의 32 비트 가산기 : 하나는 x + y를 더하고 다른 하나는 x + y + 1을 더합니다. 세 가산기는 모두 병렬로 작동합니다. 그런 다음 첫 번째 가산기가 캐리를 생성하면 CPU는 x + y 또는 x + y + 1 두 결과 중 올바른 결과를 선택하고 완전한 결과를 얻습니다. 따라서 64 비트 가산기는 32 비트 가산기보다 두 배가 아닌 아주 조금만 더 걸립니다.
32 비트 가산기 부분은 여러 16 비트 가산기를 사용하여 조건부 합계 가산기로 다시 구현되고 16 비트 가산기는 조건부 합계 가산기입니다.
add
기계 명령 을 사용 한다고 생각하는데, 모든 CPU가 가지고 있고 몇 클럭에서 작동하는 하드웨어 추가기로 구현 된 것 같습니다.