맨위로가기

누산기

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

누산기는 연산 결과를 저장하는 레지스터로, 초기 컴퓨터에서 널리 사용되었으며, 특히 단일 특별 레지스터를 중심으로 연산을 수행하는 컴퓨터 아키텍처를 의미하기도 한다. 에니악과 같은 초기 컴퓨터에서 연산 속도를 높이기 위해 사용되었으며, 고트프리트 라이프니츠와 블레즈 파스칼의 가산기에도 적용되었다. 누산기 기반 컴퓨터는 메모리 접근 횟수를 줄여 성능 향상에 기여하지만, 연산 결과를 주 기억 장치에 기록하고 다시 읽어야 하는 비효율성을 초래할 수 있다. 현대에는 마이크로컨트롤러와 x86 프로세서에서 그 흔적을 찾아볼 수 있다.

더 읽어볼만한 페이지

  • 디지털 레지스터 - 명령 레지스터
  • 디지털 레지스터 - 시프트 레지스터
    시프트 레지스터는 클럭 신호에 따라 데이터를 순차적으로 이동시키는 디지털 회로로, 입출력 방식에 따라 다양한 종류가 있으며, 데이터 변환, 지연 회로, 펄스 폭 확장, 스택 구현, I/O 핀 확장 등 다양한 용도로 활용된다.
  • 중앙 처리 장치 - 마이크로컨트롤러
    마이크로컨트롤러는 프로세서, 메모리, 입출력 기능을 단일 칩에 통합하여 임베디드 시스템의 핵심이 되는 부품으로, 프로그램 내장 방식을 통해 소프트웨어만으로 제어 기능 변경이 가능하며, 현재는 32비트 ARM, MIPS 아키텍처 기반 제품이 주를 이루고, 저전력 소모, 소형화, 다양한 기능 통합을 특징으로 다양한 분야에서 활용된다.
  • 중앙 처리 장치 - NX 비트
    NX 비트는 하드웨어 기반 보안 기능으로, 메모리 페이지의 실행 권한을 제어하여 특정 영역에서 코드 실행을 막아 버퍼 오버플로 공격과 같은 보안 위협을 줄이는 데 사용되며, AMD에서 처음 도입 후 다양한 프로세서와 운영체제에서 DEP 등의 이름으로 구현되었다.
누산기
일반 정보
종류레지스터
용도연산 결과의 일시적인 보관
크기CPU의 워드 크기와 동일
약칭ACC 또는 AC
설명
기능CPU 내에서 ALU의 연산 결과를 일시적으로 저장하는 데 사용됨
연산의 피연산자 중 하나를 저장하는 데 사용됨
메모리에서 데이터를 읽거나 메모리에 데이터를 쓸 때 주소를 저장하는 데 사용됨
CPU 상태를 저장하는 데 사용됨
역사
어원"accumulator"는 "accumulate"(축적하다)에서 유래
발명폰 노이만이 1945년에 제안한 EDVAC 아키텍처에서 처음 사용됨
초기 컴퓨터EDSAC
IAS 컴퓨터
Manchester Baby
발전초기에는 단일 누산기만 사용되었으나, 현대 CPU에서는 여러 개의 누산기가 사용됨
부동소수점 연산을 위한 특수한 누산기도 개발됨
활용
연산덧셈
뺄셈
곱셈
나눗셈
논리 연산 (AND, OR, XOR, NOT)
시프트 연산
회전 연산
고급 활용디지털 필터 구현
고속 푸리에 변환 (FFT) 계산
곱셈-누적 연산 (MAC 연산)
기타
주의사항누산기는 CPU 내부의 레지스터이므로, 프로그래머가 직접 접근할 수 없는 경우가 많음

2. 역사

누산기 개념은 고트프리트 라이프니츠와 블레즈 파스칼의 초기 가산기까지 거슬러 올라간다.[2] 퍼시 러드게이트는 1909년 자신의 해석 기계에서 곱셈-누산기(MAC)를 처음 고안했다.[3]

존 폰 노이만은 1946년 자신의 논문에서 누산기의 중요성을 강조하며, "산술 장치의 첫 번째 부분"이라고 정의했다.[14]

1940년대 에니악(ENIAC)은 20개의 누산기를 병렬로 사용하여 연산 속도를 높였다.[15],[4] 각 누산기는 8자리 십진수를 저장하고, 수신한 숫자를 더하거나 뺄 수 있었다.[4]

누산기 및 기타 레지스터를 표시하는 램프가 있는 IBM 701 컴퓨터의 전면 패널


1950년대 IBM 701과 같은 초기 컴퓨터는 대부분 단일 36비트 누산기를 사용했으며, 더 긴 결과를 처리하기 위해 별도의 곱셈기/몫 레지스터를 사용했다. IBM 650은 십진 기계로, 10자리 배분기와 두 개의 10자리 누산기를 가지고 있었고, 나중에 트랜지스터를 사용한 십진 기계인 IBM 7070은 3개의 누산기를 가지고 있었다. IBM System/360 및 디지털 이큅먼트 코퍼레이션PDP-6는 16개의 범용 레지스터를 가지고 있었지만, PDP-6와 후속 모델인 PDP-10은 이를 누산기라고 불렀다.

12비트 PDP-8은 누산기를 사용한 최초의 미니컴퓨터 중 하나였으며, 이후 많은 기계에 영감을 주었다.[5] PDP-8은 단 하나의 누산기만을 가지고 있었다. HP 2100과 데이터 제너럴 노바는 각각 2개와 4개의 누산기를 가지고 있었다. 노바는 PDP-8의 후속 기종이 PDP-11로 개발되면서 거절되어 만들어졌다. 노바는 AC0-AC3의 4개의 누산기를 제공했지만, AC2와 AC3는 오프셋 주소를 제공하는 데에도 사용될 수 있어 레지스터 사용의 일반성을 높였다. PDP-11은 System/360 및 PDP-10과 유사하게 8개의 범용 레지스터를 가지고 있었으며, 이후 대부분의 CISC 및 RISC 기계는 다중 범용 레지스터를 제공했다.

초기 4비트 및 8비트 마이크로프로세서(예: 4004, 8008 등)는 일반적으로 단일 누산기를 가지고 있었다. 8051 마이크로컨트롤러는 주 누산기와 보조 누산기, 두 개의 누산기를 가지고 있으며, 보조 누산기는 곱셈(MUL AB) 또는 나눗셈(DIV AB) 명령어에서만 사용된다. 전자는 16비트 결과를 두 개의 8비트 누산기 간에 분할하고, 후자는 몫을 주 누산기 A에, 나머지를 보조 누산기 B에 저장한다. 8008의 직접적인 후손인 80808086과 마찬가지로, 현대의 널리 사용되는 인텔 x86 프로세서는 여전히 큰 숫자의 곱셈과 나눗셈에 주 누산기 EAX와 보조 누산기 EDX를 사용한다. 예를 들어, MUL ECX는 32비트 레지스터 ECX와 EAX를 곱하고 64비트 결과를 EAX와 EDX 사이로 분할한다. 그러나 MUL과 DIV는 특수한 경우이며, 다른 산술-논리 명령어(ADD, SUB, CMP, AND, OR, XOR, TEST)는 8개의 레지스터 EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 중 하나를 누산기(즉, 왼쪽 피연산자 및 대상)로 지정할 수 있다. 이는 결과의 상위 절반이 필요하지 않은 경우 곱셈에도 지원된다. 따라서 x86은 누산기 모델을 기반으로 함에도 불구하고 상당히 일반적인 레지스터 아키텍처이다.[6] x86의 64비트 확장인 x86-64는 8개가 아닌 16개의 일반 레지스터로 더욱 일반화되었다.

3. 누산기 기반 컴퓨터

누산기 기반 컴퓨터는 연산 결과를 저장하기 위해 '누산기'라고 불리는 특별한 레지스터를 주로 사용하는 컴퓨터 구조를 가리킨다. 초기 컴퓨터는 대부분 누산기 기반이었으며, 메인프레임에서 마이크로컴퓨터로 전환되면서 MOS 6502와 같이 누산기 아키텍처가 다시 인기를 얻었다. PICmicro 및 8051과 같이 현재까지도 널리 사용되는 많은 8비트 컴퓨팅 마이크로컨트롤러가 누산기 기반 머신이다.[1]

누산기는 연산 결과를 임시로 저장하여 다음 연산에 바로 사용할 수 있게 함으로써 성능 향상에 기여한다. 예를 들어, 주간 급여 계산 시 기본 주급을 누산기에 저장하고, 이를 소득세 계산에 즉시 사용할 수 있다. 이렇게 하면 저장 및 읽기 연산을 줄여 성능을 높일 수 있다.[1]

에니악은 20개의 누산기를 병렬로 운용할 수 있었고,[15] PDP-8은 누산기를 사용한 초기 미니컴퓨터 중 하나였다.[16] IBM의 초기 이진 컴퓨터는 대부분 단일 36비트 누산기를 사용했으며, IBM 650은 10자리 배분기와 두 개의 10자리 누산기를, IBM 7070은 3개의 누산기를 가지고 있었다. IBM System/360과 PDP-6는 16개의 범용 레지스터를 가지고 있었지만, PDP-10은 이들을 누산기라고 불렀다.

초기 4비트 및 8비트 마이크로프로세서인 4004, 8008 등은 일반적으로 단일 누산기를 가지고 있었다. 8051 마이크로컨트롤러는 두 개의 누산기를 가진다. 현대의 인텔 x86 프로세서는 곱셈과 나눗셈에 주 누산기 EAX와 보조 누산기 EDX를 사용하지만, 다른 산술-논리 명령어에서는 여러 레지스터 중 하나를 누산기로 지정할 수 있어 일반적인 레지스터 아키텍처에 가깝다.[6]

자르곤 파일에서는 "누산기"를 레지스터의 일종을 고풍스럽게 부르는 용어로 설명한다.[7] 이는 연산 장치(ALU)에서 수행된 연산 결과 값이 전달되는 특별한 레지스터를 의미하며, 다음 연산 시에는 그 값이 피연산자 중 하나로 사용된다. 인텔 8080의 A 레지스터,[8] Z80,[9] MOS 6502[10] 등이 누산기의 예시이다.

3. 1. 누산기와 어셈블리 언어

누산기를 사용하는 CPU의 어셈블리 언어에서는 일반적으로 `ADD memaddress`와 같은 명령어로 누산기를 사용한다.[1]

이 명령어는 `memaddress`의 메모리 위치에 있는 내용을 읽어들여, 누산기의 값과 더하고, 그 결과를 누산기에 저장한다.[1] 명령어에서는 누산기가 명시적으로 지정되지 않지만, 암묵적으로 누산기를 사용한다.[1] 이처럼 누산기를 피연산자로 명시적으로 지정하지 않고 사용하는 머신을 '''누산기 머신'''이라고 부른다.[1]

복수의 레지스터를 가지고 있지만 누산기로서 특별 취급되는 레지스터가 있는 경우, 니모닉에 누산기의 존재가 나타나는 경우도 있다.[1] 예를 들어, 1960년대에 도널드 커누스가 저서에서 제창한 가상 머신인 MIX에서는 누산기에 로드를 수행하는 명령어(LDA)나 누산기에서 다른 곳으로 저장을 수행하는 명령어(STA)가 있다.[1]

4. 현대의 누산기

마이크로컨트롤러와 x86 프로세서에서 누산기가 어떻게 활용되는지 간략하게 살펴보자.

일부 현대 마이크로컨트롤러는 르네사스의 RL78과 ST마이크로일렉트로닉스의 STM8처럼 누산기를 사용해 저비용으로 고성능을 낸다.[11][12][13] 이들은 누산기와 하버드 아키텍처를 결합하여 효율성을 높인다.

x86 프로세서는 범용 레지스터를 쓰지만, MUL, DIV 같은 일부 명령어에서는 EAX 및 EDX 레지스터가 누산기처럼 쓰인다.[12] 이는 하위 호환성을 위한 것으로, 기계어에서는 여전히 누산기 특징이 남아있다. AX 레지스터(8비트 프로세서 시절 A 레지스터에서 유래, 32비트에서는 EAX)는 함수의 반환값을 저장하는 등 "자주 사용되는 레지스터"로 여겨진다. 초기 명령어 집합에서는 일부 명령어의 소스와 대상이 암묵적으로 AX와 DX로 고정되었고, AX를 대상으로 하는 명령어에는 단축형이 있었으나, 이후 확장에 따라 어셈블리 언어에서는 임의의 명령에 임의의 피연산자를 지정할 수 있게 되면서 이러한 특징은 사라졌다.

4. 1. 마이크로컨트롤러

르네사스의 RL78과 ST마이크로일렉트로닉스의 STM8과 같이 일부 현대 마이크로컨트롤러는 여전히 누산기를 채택하여 저비용 고성능을 실현하고 있다.[11][12][13] 이러한 마이크로컨트롤러는 누산기와 하버드 아키텍처를 결합하여 효율성을 높인다.

4. 2. x86 프로세서

현대의 x86 프로세서는 범용 레지스터를 사용하지만, MUL, DIV 등의 일부 명령어에서는 EAX 및 EDX 레지스터가 여전히 누산기처럼 사용된다.[12] 이는 하위 호환성을 유지하기 위한 것으로, 기계어 레벨에서는 여전히 누산기의 특징이 남아있다. AX 레지스터(8비트 프로세서 시대의 A 레지스터에서 유래, 32비트에서는 EAX)는 함수의 반환값을 저장하는 레지스터로 사용되는 등 "자주 사용되는 레지스터"로 여겨지기도 한다. 초기 명령어 집합에서는 일부 명령어의 소스와 대상이 암묵적으로 AX와 DX로 고정되었고, AX를 대상으로 하는 명령어에는 단축형이 있었다. 그러나 이후 확장에 따라 어셈블리 언어 레벨에서는 임의의 명령에 임의의 피연산자를 지정할 수 있게 되면서 이러한 특징은 사라졌다.

5. 누산기의 장점과 단점

누산기는 시스템의 성능을 향상시키지만, 프로그램의 유연성을 떨어뜨리고 여러 연산을 동시에 처리하기 어렵게 만든다는 단점이 있다.[7]

누산기는 한 연산의 결과를 다음 연산에 거의 또는 전혀 성능 저하 없이 공급할 수 있는 임시 저장 공간을 제공하여 시스템의 성능을 획기적으로 향상시킨다. 예를 들어, 기본 주급이 계산되어 누산기에 저장되면 소득세 계산에 즉시 사용될 수 있다. 이렇게 하면 저장 및 읽기 연산이 제거되는데, 이러한 연산은 일반적으로 곱셈 자체보다 수십 배에서 수백 배 더 오래 걸렸다.[7]

5. 1. 장점

누산기는 한 연산의 결과를 다음 연산에 거의 또는 전혀 성능 저하 없이 공급할 수 있는 임시 저장 공간을 제공하여 시스템의 성능을 획기적으로 향상시킨다. 예를 들어, 기본 주급이 계산되어 누산기에 저장되면 소득세 계산에 즉시 사용될 수 있다. 이렇게 하면 저장 및 읽기 연산이 제거되는데, 이러한 연산은 일반적으로 곱셈 자체보다 수십 배에서 수백 배 더 오래 걸렸다.[7]

5. 2. 단점

누산기 방식은 CPU 구조를 단순화하여 트랜지스터 수를 줄일 수 있지만, 프로그램의 유연성이 떨어지고 여러 개의 연산을 동시에 처리하기 어렵다.[7]

6. 결론

자르곤 파일의 accumulator 항목의 머리말에는 "Archaic term for a register."라고 쓰여 있다.[7] 이는 "누산기"란 현재 해석으로는 레지스터의 일종을 고풍스럽게 부르는 것이라는 의미이다. 다만 이 설명은 불충분하며, 누산기는 레지스터의 일종이지만 실제로는 특별한 위치를 차지하며 연산 장치(ALU)와의 관계가 특별하다. 누산기는 연산 장치(ALU)에서 수행된 연산의 결과 값을 반드시 전달받는 레지스터이며, 다음 연산 시에는 그 값이 두 개의 오퍼랜드(피연산자) 중 하나로 취급되어 다시 연산 장치로 보내진다. 1970년대와 1980년대 CPU는 탑재 가능한 트랜지스터 수가 상당히 제한되었기 때문에, 구조를 간소화하여 트랜지스터 수를 줄이고자 누산기 방식 아키텍처가 채용되었다. CPU 내부에서 수의 총합을 구하는 작업은 빈번하게 이루어지는데, 오퍼랜드를 차례로 주어 덧셈을 반복하면 이 레지스터에 총합 값(누적 값)이 들어가게 된다. 이러한 사용법이 누산기의 전형적인 사용법이므로 누산기(누적 장치)라고 불렸다.

예를 들어 인텔 8080의 A 레지스터는 누산기이다.[8] Z80도 마찬가지로 누산기를 채용하여 "누산기 머신"이라고 불린다.[9] MOS 6502 역시 누산기를 채용하고 있다.[10]

참조

[1] 웹사이트 HC16 Overview http://www.freescale[...] Freescale.com 2008-09-22
[2] 논문 A Survey of Digital Computer Memory Systems
[3] 웹사이트 The Feasibility of Ludgate's Analytical Machine http://www.fano.co.u[...]
[4] 서적 ENIAC in Action: Making and Remaking the Modern Computer MIT Press
[5] 간행물 Programmed Data Processor-1 Manual http://bitsavers.tra[...] Digital Equipment Corporation 1961
[6] 서적 Assembly Language for Intel-Based Computers Pearson Prentice Hall
[7] 웹사이트 accumulator http://catb.org/jarg[...]
[8] 웹사이트 Intel 8080 http://www.st.rim.or[...]
[9] 웹사이트 https://www.salutewe[...]
[10] 웹사이트 https://kikb.web.fc2[...]
[11] 뉴스 50억個を売ったルネサスのマイコン「RL78」、第2世代品が登場 https://xtech.nikkei[...] 日経XTECH
[12] 웹사이트 https://cir.nii.ac.j[...]
[13] 뉴스 マイコンのアーキテクチャって何? https://edn.itmedia.[...] EDN 菅井賢(STマイクロエレクトロニクス)
[14] 문서
[15] 서적 ENIAC in Action: Making and Remaking the Modern Computer MIT Press
[16] 간행물 PROGRAMMED DATA PROCESSOR-1 MANUAL http://bitsavers.tra[...] Digital Equipment Corporation 1961



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com