어셈블리란 무엇인가?

어셈블리란 무엇인가?

볼리스틱 연구소에서 ENIAC을 조작하는 글렌 벡과 베티 스나이더.
볼리스틱 연구소에서 ENIAC을 조작하는 글렌 벡과 베티 스나이더.

ENIAC은 최초의 범용 전자 컴퓨터였습니다. 펜실베이니아 대학교에서 만들어져 1945년에 완성되었습니다. 스나이더는 그것을 손으로 프로그래밍한 여섯 명의 여성 중 한 명이었습니다.

ENIAC과 같은 기계가 등장하기 전에는 컴퓨터라는 말이 손으로 계산하는 사람을 뜻했고, ENIAC을 프로그래밍한 여섯 명의 여성도 그런 일을 하도록 고용되었습니다. 기계를 프로그래밍하려면 그들은 배선을 다시 연결했습니다. 문제가 바뀔 때마다 케이블을 꽂고 스위치를 설정했습니다. 이 배선 재연결이 어셈블리 언어가 존재하는 역사적 이유입니다. 몇 년 안에 유럽과 미국의 엔지니어들은 전선과 스위치 설정을 명령을 나타내는 짧은 문자 코드로 대체하기 시작했고, 그래서 사람이 커넥터를 건드리지 않고도 프로그램을 읽고 바꿀 수 있게 되었습니다.

먼저, CPU(중앙 처리 장치)는 컴퓨터의 중심에 있는 칩이며 한 가지 일을 합니다. 바로 명령이라고 불리는 작은 명령어들의 긴 목록을 하나씩 차례로, 초당 수십억 개씩 실행하는 것입니다. 각 명령은 그 자체로는 간단합니다. 예를 들어 두 수를 더하거나, 값을 옮기거나, 다른 곳으로 점프하는 것입니다.

어셈블리는 CPU가 실행하는 명령 중 사람이 읽을 수 있는 형태입니다. 각 줄은 (거의) 하나의 기계 명령입니다. 루프, 객체, 문자열은 없습니다. 레지스터라는 프로세서 내부의 작은 저장 슬롯과 메모리 사이에서 수를 옮깁니다.

케임브리지 대학교에서 EDSAC의 일부를 살펴보는 모리스 윌크스.
케임브리지 대학교에서 EDSAC의 일부를 살펴보는 모리스 윌크스.

EDSAC은 데이비드 휠러의 Initial Orders를 실행했습니다. 이는 작성된 명령을 기계어로 번역한 최초의 프로그램 중 하나입니다.

모든 프로세서에는 작성된 명령을 읽고 하드웨어가 실행하는 원시 비트를 생성하는 프로그램, 즉 어셈블러가 필요합니다. 이 페이지의 어셈블러는 하나의 명령어 집합을 대상으로 합니다.

이 시뮬레이터는 RISC-V를 사용합니다. 이는 실제 칩에 쓰이고 대학에서 가르치는 현대적인 명령어 집합입니다. 여기서 배우는 내용은 하드웨어에 직접 적용됩니다.

2013년에 초기 RISC-V 프로토타입 칩을 들고 있는 이윤섭.
2013년에 초기 RISC-V 프로토타입 칩을 들고 있는 이윤섭.

RISC-V는 개방형 명령어 집합 아키텍처입니다. 누구나 공개된 명세를 하드웨어로 구현할 수 있으며, 비용이나 허가가 필요하지 않습니다.

어떤 명령어 집합 설계든 하나의 명령이 얼마나 많은 일을 수행하는지 결정해야 합니다. 대부분의 데스크톱과 노트북 컴퓨터에 들어 있는 x86 아키텍처를 포함한 CISC(복합 명령어 집합 컴퓨터) 칩은 각 명령에 많은 일을 넣습니다. 하나의 명령이 메모리에서 값을 읽고, 산술 연산을 수행하고, 결과를 다시 저장하는 일을 모두 한 단계에서 할 수도 있습니다. RISC-V는 Patterson & Ditzel, 1980이 주장한 설계를 따릅니다. 각 명령은 하나의 단순한 연산을 수행하고, 복잡한 동작은 이런 명령을 많이 조합해서 만들어집니다.

RISC는 Reduced Instruction Set Computer의 약자입니다. 하드웨어는 적은 수의 단순한 명령을 빠르게 실행하도록 만들어집니다. 복잡한 동작은 이 단순하고 빠른 단계들을 조합해서 만들어집니다.

ARC를 위한 캐슬린 부스의 어셈블러(Booth, 1947)와 EDSAC을 위한 데이비드 휠러의 Initial Orders(Wilkes, Wheeler & Gill, 1951)는 가장 초기에 작동한 어셈블러 중 하나로 꼽히며, 역사가들은 어느 쪽이 먼저였는지 계속 논쟁하고 있습니다. 이 시뮬레이터가 실행하는 명령어 집합인 RISC-V는 누구나 구현할 수 있는 작고 개방된 명령 목록을 정의합니다(Asanović & Patterson, 2014). 이 시점 이후의 모든 레슨은 그 명령어 집합을 직접 가르칩니다.