이후 복잡한 기계어를 간략하게 기호화(symbolize)한 어셈블리어를 사용하게 되었으며, 시간이 흐름에 따라 컴퓨터의 상업적 이용이 늘어나게 되었고 그 결과 코볼, 파스칼, 포트란, C 등의 고급 언어가 등장하게 되었다.

어셈블리어는 기계어의 연산 코드와 피연산자를 프로그래머가 좀 더 이해하기 쉬운 기호 형태로 일대일 대응시킨 프로그래밍 언어이다. 연산 코드를 기호화한 것은 니모닉(mnemonic)이라고 부르며, 연산 코드의 예로 LDA(LoaD Address), ADD(ADD), STA(STore Address) 등이 사용된다. 기계어에 비하여 프로그래밍이 간소화되었으며, 연산 코드와 니모닉이 일대일 대응되기 떄문에 기계어의 장점인 중앙처리장치와 같은 하드웨어 장치에 대한 강력한 통제 역시 가능하다는 장점이 있다. 그러나 어셈블리이어도 사용자보다는 컴퓨터를 고려한 언어이므로 기계어보다는 이해가 쉬우나 사람에게는 여전히 어려운 언어이다.

[표 7.1]은 4장에서도 살펴보았던 간단한 연산식 C=A+B를 처리하는 프로그램을 기계어와 어셈블리어로 나타낸 것이다. 어셈블리어는 기호화가 되어있어 기계어보다 이해하기 쉬운 것을 알 수 있다.

표 7.1 두 정수의 합을 위한 명령어 집합

그러나 어셈블리어도 CPU마다 명령어가 다르고 레지스터의 종류와 이용 방법 등도 이해해야 프로그래밍이 가능하므로 사람에게 친숙한 언어는 아니다. 이렇듯 컴퓨터에게 친근한 언어라는 의미에서 기계어와 어셈블리어를 저급 언어(low level language)라 한다.