오늘 알아볼것.
- 고급언어, 저급언어, 기계어란 무엇인가?
고급언어, 저급언어, 기계어란?
고급언어 (High-Level Language)
- 사람 중심의 언어 (사람이 이해하고 쓰기 좋은 언어)
- 실행을 위해서는 번역하는 과정이 필요함. --> 컴파일러 사용.
- 서로다른 기계에서 소스 수정 없이 실행이 가능한 언어.
고급언어에도 종류가 있는데 각 언어마다 컴파일러나 인터프리터등으로 번역하는 과정을 가진다.
고급언어 종류
- C : 1972년에 미국 벨 연구소에서 UNIX를 다룰려고 만든 언어. 고급 언어 프로그래밍과 저급 언어 프로그래밍도 가능하다 한다.
--> 시스템 프로그래밍에 가장 적합한 언어.
#include <stdio.h> int main() { printf("hello world"); return 0; } |
와 같은 구조를 가졌다. 이는 사람이 해석하기에 용이하고, 저 코드가 컴파일러(Compiler)로 인하여 저급 언어로 번역된다.
확실히 저급언어보다 이해하기 훨씬 쉽고 약간만 배운다면 바로바로 알 수 있는 언어인것을 알 수 있다.
- Java : 썬 마이크로시스템즈에서 개발한 객체 지향 프로그래밍 언어.
- python : 1991년 귀도 반 로섬이 발표한 고급 프로그래밍 언어.
저급 언어(Low-Level Language)
- 기계 중심의 언어 (기계가 바로바로 알아듣고 실행되기 좋은 언어)
--> 그러므로 사람이 바로바로 이해하기 어려운 언어이다.
- 실행 속도가 빠름 (위와 같은 이유)
- 서로다른 기계(아키텍쳐)마다 다른 코드를 가지게 된다.
여기서 저급언어는 고급언어에서 저급언어로 거쳐가는 과정을 꼭 밟고 간다.
저급언어 종류
- 어셈블리어(Assembly Language)(a.k.a 기호 코드) : 기계어와 1:1로 대응되는 기호로 이루어진 언어. 기계어랑 가장 유사하며, 기계어로 번역하기 위해서는 어셈블러가 필요함. (이러면 결국 번역과정을 밟게 되는게 아닌가?)
위의 사진은
size_t ft_strlen(const char *s)
{
size_t i;
i = 0;
while (s[i] != '\0')
i++;
return (i);
}
이라는 코드를 어셈블리어로 변환한 것을 보여주는 코드라고 한다.
[libasm] strlen 함수를 어셈블리어로 짠다면?
어셈블리어로 프로그램을 짜려면 먼저 함수 호출 규약을 알아야 한다. syscall 함수의 사용법과 에러 처리 방법도 함게 알아보자.
velog.io
위와 같이 고급언어를 저급 언어로 나타내게 된다면 사람이 이해하기 어려운게 보인다.
하지만 처음부터 저 저급언어로 적게 된다면 번역과정을 한번만(어셈블러) 밟게 되므로 빨라지는것은 확실하다.
기계어 (Machine Language)
- 컴퓨터가 직접 이해할 수 있는 언어.
- 0과 1의 2진수 형태로 표현되며, 수행시간이 빠르다.
- 비트 단위로 쓰인 컴퓨터 언어를 통틀어 일컫는다 한다.
- 전문적인 지식이 없으면 프로그램 작성 및 이해가 어렵다.
++ CPU 아키텍쳐마다 기계어가 다르므로 언어의 호환성이 없다.
+++ 프로그램 유지보수가 어렵다. (위와 같은 이유로)
구조
[ op | rs | rt | rd |shamt| funct]
0 1 2 6 0 32 decimal
000000 00001 00010 00110 00000 100000 binary
0은 op를 나타내며 1은 00001로써 rs를 나타낸다. 또, 6은 00110으로써 rd를 나타낸다고 한다.
이와 같은 형식으로 계속 이뤄져 나가서 일정한 행동을 취하게 된다고 한다.
즉, 0과 1로 나타낼 수 있는 모든걸 어떠한 함수로 연결하고 실행하는 언어라고 보면 좋을 것 같다.
'System & Reversing' 카테고리의 다른 글
어셈블리 핸드레이에 관한 고찰. (0) | 2023.03.13 |
---|---|
함수 프롤로그, 에필로그에 대한 간단한 고찰. (0) | 2023.03.13 |
컴퓨터 메모리 구조에 대한 간단하지 않은 고찰. (1) | 2023.03.12 |
어셈블리어에 대한 '간단한' 고찰. (0) | 2023.03.12 |
CPU 아키텍쳐에 대한 간단한 고찰. (2) | 2023.03.12 |