컴퓨터 언어에서 단어를 명령어(instruction)라고 하고 그 어휘를 명령어 집합(instrcution set)이라고 한다.
기본적으로 모든 컴퓨터는 산술 연산을 할 수 있어야 한다. 다음 MIPS 어셈블리 언어는 두 변수 b와 c를 더해서 그 합을 a에 넣으라고 컴퓨터에 지시하는 것이다.
add a, b, c
MIPS 산술 명령어는 한 종류의 연산만 지시하며 항상 변수 3개를 갖는 형식을 엄격히 지킨다.
다음은 네 변수의 합을 구하는 명령어들이다.
add a, b, c # The sum of b and c is placed in a
add a, a, d # The sum of b, c and d is now in a
add a, a, e # The sum of b, c, d and e is now in a
한 줄에 명령어 하나만을 쓸 수 있으며, 줄이 끝나면 주석도 끝난다.
덧셈 같은 연산의 피연산자(operand)는 더해질 숫자 2개와 합을 기억할 장소 하나, 모두 3개인 것이 자연스럽다. 이렇게 모든 명령어가 피연산자를 반드시 3개씩 갖도록 제한하는 것은 하드웨어를 단순하게 하자는 원칙과 부합한다. 피연산자의 개수가 가변적이면 하드웨어가 복잡해진다. 이런 관점에서 하드웨어 설계의 3대 원칙 중 첫 번째를 도출할 수 있다.
설계 원칙 1: 간단하게 하기 위해서는 규칙적인 것이 좋다.
복잡한 C 치환문 번역
f = (g + h) - (i + j);
MIP 명령어는 한 번에 하나의 연산만을 하기 때문에 컴파일러는 이 문장을 여러 개의 어셈블리 명령어로 나누어야 한다. 첫 MIP 명령어는 g와 h의 합을 구하고 결과를 어딘가에 저장해야 한다. 컴파일러는 t0라는 임시 변수를 생성한다.
add t0, g, h # tempotrary variable t0 contains g + h
다음 연산은 뺄셈이지만 뺄셈을 하기 전에 i와 j의 합을 구할 필요가 있다. 따라서 두 번째 명령어는 i와 j의 합을 t1이라 불리는 또 다른 임시 변수에 저장한다.
add t1, i, j # tempotrary variable t1 contains i + j
마지막으로 뺄셈 명령어가 첫 번째 합에서 두 번째 합을 빼고 결과치를 f 변수에 저장하게 된다.
sub f, t0, t1 # f gets t0 - t1, which is (g + h) - (i + j)