처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.05.31 23

1980년산 인텔 8087 칩 속 마이크로코드를 트랜지스터까지 뜯어보다

Hacker News 원문 보기
1980년산 인텔 8087 칩 속 마이크로코드를 트랜지스터까지 뜯어보다

켄 시리프(Ken Shirriff)라는 분이 계세요. 옛날 반도체 칩들을 현미경으로 들여다보고, 트랜지스터 하나하나의 연결을 추적해서 그 안의 동작 원리를 글로 풀어내는 분이에요. 이번엔 인텔의 첫 부동소수점 코프로세서인 8087의 마이크로코드, 그중에서도 레지스터 교환 명령이 어떻게 동작하는지를 분해해 공개했어요. 1980년에 나온 칩 이야기인데, 들여다보면 요즘 CPU 설계의 뿌리가 그대로 보여서 의외로 재미있어요.

8087이 도대체 뭐였길래

8086 CPU 알고 계시죠? 인텔 x86 아키텍처의 시작점인 그 칩이요. 그런데 8086은 정수 연산만 잘했지, 부동소수점(소수점 있는 실수) 연산은 처리하지 못했어요. 당시 부동소수점 연산은 보통 소프트웨어로 흉내내야 했고, 한 번 계산하는 데 수백 사이클이 걸렸죠. 그래서 인텔이 별도로 만든 게 8087이었어요. 메인보드에 8086 옆에 끼워 넣으면, 8086은 부동소수점 명령을 만났을 때 그걸 8087한테 떠넘기는 구조예요. 일종의 "수학 잘하는 친구한테 숙제 맡기기" 같은 거랄까요.

8087이 특별했던 이유는 또 있어요. 이게 IEEE 754 부동소수점 표준을 사실상 정의한 칩이거든요. 지금도 우리가 자바스크립트나 파이썬에서 0.1 + 0.2 = 0.30000000000000004 같은 결과를 보는 그 표준, 그 뿌리가 8087에 있어요.

마이크로코드가 뭐냐면

CPU 명령은 겉으로 보면 한 줄짜리 같지만, 안에서는 훨씬 잘게 쪼개진 단계들로 동작해요. 예를 들어 "두 레지스터의 값을 교환하라(FXCH)"는 명령 하나가 칩 안에서는 "값 A를 임시 공간에 복사 → 값 B를 A 위치로 옮김 → 임시 공간의 값을 B 위치에 넣음" 같은 식으로 풀어져 실행되거든요. 이 잘게 쪼개진 동작 하나하나를 "마이크로 명령"이라고 부르고, 이것들이 모인 게 "마이크로코드"예요. CPU 안에 있는 작은 프로그램이라고 생각하시면 돼요.

칩 안에는 이 마이크로코드를 저장하는 ROM이 있어요. 8087에선 이 마이크로코드 ROM이 칩 면적의 상당 부분을 차지했어요. 시리프는 칩의 뚜껑을 벗기고(decap), 현미경으로 ROM의 비트 패턴을 한 칸씩 읽어내서 마이크로코드를 추출했어요. 이게 말은 쉽지, 실제로는 수십 시간씩 트랜지스터를 추적하는 작업이에요.

레지스터 교환은 왜 까다로웠나

8087은 스택 기반 구조예요. 일반 CPU처럼 "1번 레지스터에 더해라" 식이 아니라, 스택 맨 위 두 값을 꺼내서 연산한 뒤 결과를 다시 스택에 올리는 방식이거든요. 그런데 이게 가끔 불편해요. 두 번째 위치에 있는 값을 먼저 쓰고 싶을 때가 있거든요. 그래서 FXCH라는 명령으로 스택의 두 자리를 바꿔치기할 수 있게 했어요.

문제는 이걸 단순히 "값을 옮기는" 식으로 구현하면 비효율적이라는 점이에요. 8087은 영리하게도 레지스터 자체를 옮기는 대신, 어느 위치를 가리키는지를 바꾸는 방식을 썼어요. 스택 포인터 비슷한 매핑 테이블이 있어서, 실제 메모리를 건드리지 않고도 논리적으로 두 값이 바뀐 것처럼 보이게 한 거예요. 요즘 CPU의 레지스터 리네이밍(register renaming) 기법과 발상이 비슷해요. 인텔이 1980년에 이미 이런 아이디어를 칩 안에 넣어둔 거죠.

업계 맥락에서 보면

지금 우리가 쓰는 인텔, AMD, 애플 실리콘 같은 CPU도 본질적으로는 마이크로코드의 후예예요. 다만 명령어 디코딩과 실행 사이의 계층이 훨씬 두꺼워지고, 마이크로코드 자체도 펌웨어 업데이트로 패치할 수 있게 됐어요. 멜트다운이나 스펙터 같은 보안 이슈가 터졌을 때 마이크로코드 업데이트로 일부 완화한 게 기억나실 거예요. 그 뿌리가 8087 같은 칩에 있어요.

한국 개발자에게는

당장 실무에 쓸 일은 없어요. 그래도 이런 글을 읽어두면 "추상의 가장 밑바닥엔 결국 트랜지스터가 있다"는 감각을 잃지 않게 돼요. 자바스크립트의 숫자가 왜 그렇게 동작하는지, 부동소수점 비교가 왜 위험한지, 컴파일러가 만든 어셈블리가 왜 그렇게 생겼는지 같은 질문에 더 단단한 답을 줄 수 있어요. 컴퓨터 아키텍처를 책으로만 봐서 추상적으로 느껴진다면, 이런 실물 분해 글이 좋은 보충 교재가 돼요.

정리하면

40년 넘은 칩 한 줄의 명령이 트랜지스터 수천 개의 협동으로 실현된다는 걸 눈으로 보는 건 묘한 감동이 있어요. 여러분은 평소 코드를 짤 때 "이게 결국 하드웨어에서 어떻게 돌아갈까"를 어디까지 생각하시나요? 그런 감각이 실제 코드 품질에 영향을 준다고 보시나요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.