검수요청.png검수요청.png

"기계어"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (같이 보기)
잔글
 
(사용자 2명의 중간 판 2개는 보이지 않습니다)
8번째 줄: 8번째 줄:
 
== 역사 ==
 
== 역사 ==
 
컴퓨터는 아주 단순한 지시사항을 매우 빠르게 수행하는 기계이고 [[인스트럭션]]은 0과 1로 이루어져 있다. 이런 형태의 인스트럭션을 기계어라한다. 1940 ~ 1950년대의 컴퓨터는 사실상 [[프로그래밍]]을 한다는 것이 불가능에 가까웠다. 그것들은 '배선(wiring)'을 통해 조절되었기 때문에 기판상에 있는 작은 전설들을 조작해서 연결이 이루어진 곳을 1, 연결이 없는 곳은 0을 나타나게 해놓았다. 전선 연결의 조합이 당시의 프로그래밍이었는데, 이런 형태의 배선은 만드는데 아주 시간이 오래 걸리고, 하기도 힘들 뿐 아니라, 뭔가 문제가 생겼을 때 에러를 찾아낸다는 것이 거의 불가능했다. 어떤 문제가 발생하면, 문자 그대로 전선 하나하나를 따라가며 어느 선에서 문제가 생겼는지를 찾아내야 했다. 문제는 전선이 수천, 수만개가 얽혀 있기 때문에 문제가를 해결하기란 거의 불가능에 가까웠고 또한, 새로운 프로그램을 추가하는 것도 일일이 새로운 배선을 해주어야 했기 때문에 많은 시간과 노동력을 요구했다.
 
컴퓨터는 아주 단순한 지시사항을 매우 빠르게 수행하는 기계이고 [[인스트럭션]]은 0과 1로 이루어져 있다. 이런 형태의 인스트럭션을 기계어라한다. 1940 ~ 1950년대의 컴퓨터는 사실상 [[프로그래밍]]을 한다는 것이 불가능에 가까웠다. 그것들은 '배선(wiring)'을 통해 조절되었기 때문에 기판상에 있는 작은 전설들을 조작해서 연결이 이루어진 곳을 1, 연결이 없는 곳은 0을 나타나게 해놓았다. 전선 연결의 조합이 당시의 프로그래밍이었는데, 이런 형태의 배선은 만드는데 아주 시간이 오래 걸리고, 하기도 힘들 뿐 아니라, 뭔가 문제가 생겼을 때 에러를 찾아낸다는 것이 거의 불가능했다. 어떤 문제가 발생하면, 문자 그대로 전선 하나하나를 따라가며 어느 선에서 문제가 생겼는지를 찾아내야 했다. 문제는 전선이 수천, 수만개가 얽혀 있기 때문에 문제가를 해결하기란 거의 불가능에 가까웠고 또한, 새로운 프로그램을 추가하는 것도 일일이 새로운 배선을 해주어야 했기 때문에 많은 시간과 노동력을 요구했다.
[[버그]](bug)라는 단어가 이때 유래 되었다는 말도 있다. 당시 거대한 컴퓨터 안에서 어슬렁 거리다가 사망한 진짜 벌레의 시체가 전선과 전선 사이에 또다른 연결을 만들어서 에러를 내었다는 것이다. 조금 시간이 지나 1950 ~ 1960년대의 기계어는 직접 배선을 해주어야 하는 수준은 벗어나게 되었다. 대신 '[[메모리]]'내의 값을 이용해서 프로그래밍을 하게 되었다. 새로운 방식의 기계어는 예전의 무식한 방식보다는 분명 향상된 것이었고, 바른 프로그램 수저을 가능캐 해주었지만 수많은 0과 1로 이루어진 패턴과 씨름하다 보니 에러가 나는 것은 마찬가지였다. 이후 사람들은 보다 쉽게 기억하기 위해 0과 1로 이루어진 비트 패턴 대신 어느 정도 이해가 되는 일종의 약어를 사용하기 시작했다. 약어는 [[비트]] 패턴의 기능 설명으로부터 만들어진 용어이다. 예를 들면  move, jump, branch 처럼 표현할수 있다. 이러한 명령어들은 [[어셈블러]](assembler)라 불리우는 프로그램에 의해 이진수 패턴 형태로 바뀌게 된다. 이렇게 축약어로 이루어진 언어를 [[어셈블리어]] 라고 하게 된다.<ref>이명헌, 〈[http://www.emh.co.kr/content.pl?history_of_programming_languages [언어] 프로그래밍 언어의 역사: 기계어, 어셈블리어, 절차적 언어, 객체 지향 언어]〉, 《이명헌 경영스쿨》</ref>
+
[[버그]](bug)라는 단어가 이때 유래 되었다는 말도 있다. 당시 거대한 컴퓨터 안에서 어슬렁 거리다가 사망한 진짜 벌레의 시체가 전선과 전선 사이에 또다른 연결을 만들어서 에러를 내었다는 것이다. 조금 시간이 지나 1950 ~ 1960년대의 기계어는 직접 배선을 해주어야 하는 수준은 벗어나게 되었다. 대신 '[[메모리]]'내의 값을 이용해서 프로그래밍을 하게 되었다. 새로운 방식의 기계어는 예전의 무식한 방식보다는 분명 향상된 것이었고, 바른 프로그램 수정을 가능하게 해주었지만 수많은 0과 1로 이루어진 패턴과 씨름하다 보니 에러가 나는 것은 마찬가지였다. 이후 사람들은 보다 쉽게 기억하기 위해 0과 1로 이루어진 비트 패턴 대신 어느 정도 이해가 되는 일종의 약어를 사용하기 시작했다. 약어는 [[비트]] 패턴의 기능 설명으로부터 만들어진 용어이다. 예를 들면  move, jump, branch 처럼 표현할수 있다. 이러한 명령어들은 [[어셈블러]](assembler)라 불리우는 프로그램에 의해 이진수 패턴 형태로 바뀌게 된다. 이렇게 축약어로 이루어진 언어를 [[어셈블리어]] 라고 하게 된다.<ref>이명헌, 〈[http://www.emh.co.kr/content.pl?history_of_programming_languages [언어] 프로그래밍 언어의 역사: 기계어, 어셈블리어, 절차적 언어, 객체 지향 언어]〉, 《이명헌 경영스쿨》</ref>
  
 
== 특징 ==
 
== 특징 ==
36번째 줄: 36번째 줄:
 
* [[어셈블리어]]
 
* [[어셈블리어]]
  
{{로고 필요}}
+
{{로고 없음}}
 
{{프로그래밍 언어|검토 필요}}
 
{{프로그래밍 언어|검토 필요}}

2021년 1월 6일 (수) 13:54 기준 최신판

기계어(機械語, machine language)란 컴퓨터가 별도의 해석 과정을 거치지 않고 직접 읽을 수 있는 프로그래밍 언어를 말한다. 기계어는 0과 1로 구성된 2진 숫자로 이루어져 있다. 기계어는 인간이 이해하기 어렵기 때문에 알파벳아라비아 숫자 및 부호를 사용하여 소스 코드(source code)를 만든 뒤, 어셈블러(assembler) 또는 컴파일러(compiler) 등을 통해 기계어로 번역하여 컴퓨터에게 전달한다. 기계어를 1세대 프로그래밍 언어라고 한다.

개요[편집]

프로그램은 기계어로 번역되어야만 컴퓨터가 그 내용을 이해하고 작동한다. 즉, 기계어는 컴퓨터의 하드웨어가 유일하게 이해할 수 있는 단어이다. 인간이 짠 소스 코드를 기계어로 번역하려면 어셈블러컴파일러가 필요하다.

기계어는 CPU나 그 주변 장치에 의존하므로 특정 기종을 위해 만들어진 기계어 프로그램은 다른 기종에서는 움직이지 않는 경우가 많다. 기계어는 이해하기 어렵고 컴퓨터 구조에 대한 지식이 없으면 프로그램 작성을 하기 어렵기 때문에 범용성이 부족하고 사람이 이해하기 어려운 언어기 때문에 능숙하게 사용하려면 오랜 숙달 과정과 시간이 필요하다.

역사[편집]

컴퓨터는 아주 단순한 지시사항을 매우 빠르게 수행하는 기계이고 인스트럭션은 0과 1로 이루어져 있다. 이런 형태의 인스트럭션을 기계어라한다. 1940 ~ 1950년대의 컴퓨터는 사실상 프로그래밍을 한다는 것이 불가능에 가까웠다. 그것들은 '배선(wiring)'을 통해 조절되었기 때문에 기판상에 있는 작은 전설들을 조작해서 연결이 이루어진 곳을 1, 연결이 없는 곳은 0을 나타나게 해놓았다. 전선 연결의 조합이 당시의 프로그래밍이었는데, 이런 형태의 배선은 만드는데 아주 시간이 오래 걸리고, 하기도 힘들 뿐 아니라, 뭔가 문제가 생겼을 때 에러를 찾아낸다는 것이 거의 불가능했다. 어떤 문제가 발생하면, 문자 그대로 전선 하나하나를 따라가며 어느 선에서 문제가 생겼는지를 찾아내야 했다. 문제는 전선이 수천, 수만개가 얽혀 있기 때문에 문제가를 해결하기란 거의 불가능에 가까웠고 또한, 새로운 프로그램을 추가하는 것도 일일이 새로운 배선을 해주어야 했기 때문에 많은 시간과 노동력을 요구했다. 버그(bug)라는 단어가 이때 유래 되었다는 말도 있다. 당시 거대한 컴퓨터 안에서 어슬렁 거리다가 사망한 진짜 벌레의 시체가 전선과 전선 사이에 또다른 연결을 만들어서 에러를 내었다는 것이다. 조금 시간이 지나 1950 ~ 1960년대의 기계어는 직접 배선을 해주어야 하는 수준은 벗어나게 되었다. 대신 '메모리'내의 값을 이용해서 프로그래밍을 하게 되었다. 새로운 방식의 기계어는 예전의 무식한 방식보다는 분명 향상된 것이었고, 바른 프로그램 수정을 가능하게 해주었지만 수많은 0과 1로 이루어진 패턴과 씨름하다 보니 에러가 나는 것은 마찬가지였다. 이후 사람들은 보다 쉽게 기억하기 위해 0과 1로 이루어진 비트 패턴 대신 어느 정도 이해가 되는 일종의 약어를 사용하기 시작했다. 약어는 비트 패턴의 기능 설명으로부터 만들어진 용어이다. 예를 들면 move, jump, branch 처럼 표현할수 있다. 이러한 명령어들은 어셈블러(assembler)라 불리우는 프로그램에 의해 이진수 패턴 형태로 바뀌게 된다. 이렇게 축약어로 이루어진 언어를 어셈블리어 라고 하게 된다.[1]

특징[편집]

프로그래밍에서 컴퓨터가 이해하기 쉽고 가까운 언어일수록 저급언어로 분리되는데 저급언어란 컴퓨터가 이해하기 쉬운 이진법으로 이루어져있고 컴퓨터가 바로 이행 할수 있지만 가독성 및 생산성이 낮다. 또한 프로그램 속도가 빠르고 프로그램 크기 또한 고급 언어보다 작다. 이에 대표적인 언어가 바로 기계어이다. 저급언어인 기계어는 대부분 어셈블리어를 거쳐 짜여지게 되며, 컴퓨터가 알아들을 수 있는 유일한 프로그래밍 언어라고 볼 수 있다.[2]

저급언어와 고급언어[편집]

저급언어[편집]

저급언어는 컴퓨터 내부에서 바로 처리 가능한 프로그래밍 언어로, 일반적으로 기계어와 어셈블리어 언어가 있다. 전류가 흐르는 상태인 on은 숫자 1, 전류가 흐르지 않는 상태인 off는 0으로 표시되어 오직 0과 1로만 나타내는 언어를 기계어라고 한다. 컴퓨터는 0과 1만 인식하다보니 사람이 알아보기에는 너무 어려웠기 때문에 기계어를 사람이 알 수 있는 형식으로 만들필요가 있었는데 이렇게 기계어를 문자적으로 표헌한 것이 어셈블리어 이다. 어셈블리어는 숫자가 0,1로 아루어진 명령어를 ADD, MOV와 같은 문자로 표헌한 언어이다. 어셈블리어를 컴퓨터가 알 수 있는 기계어로 번역해 주어야 하는 과정이 필요한데, 이러한 과정을 어셈블(Assemble)이라고 한다. 어셈블리어를 기계어로 번역하는 주체는 어셈블러라고 하는 언어 번역기가 담당한다.

고급언어[편집]

고급언어는 사람이 알기 쉽도록 씌어진 프로그래밍 언어로서, 저급언어보다 가독성이 높고 다루기가 간단하다는 장점이 있다. 컴파일러(Complier)나 인터프리터에 의해 저급언어로 번역되어 컴퓨터에서 실행된다. C, C++, 자바, 베이직 언어들이 이런 고급언어에 속한다. 구체적으로는 고급언어는 어셈블리어와 마찬가지로 컴퓨터가 직접 인식하지 못하여 기계어로 번역을 해우저야 하는데 고급언어에서는 이러한 과정을 컴파일(Compile)한다고 하고, 번역해주는 주체를 컴파일러 라고 한다.

차이점[편집]

저급언어와 고급언어의 가장 큰 차이점은 그 언어가 사용자 위주의 언어인가, 하드웨어 위주의 언어인가에 따라 다르다. 저급언어는 하드웨어와 밀접한 관계가 있기 때문에 하드웨어를 직접 제어할 수 있는 반면에 전문가가 아닌 이상은 다루기가 어렵다. 반면 고급언어는 사용자와 밀접한 관계가 있기 때문에 사용자가 다루기 쉬운 반면 하드웨어를 직접 제어 해야 할 경우에는 한계를 보인다.[3]

각주[편집]

  1. 이명헌, 〈[언어 프로그래밍 언어의 역사: 기계어, 어셈블리어, 절차적 언어, 객체 지향 언어]〉, 《이명헌 경영스쿨》
  2. Baobob, 〈고급언어와 저급언어(기계어, 어셈블리어)〉, 《다음 티스토리》, 2017-12-16
  3. ygszzang11, 〈저급언어와 고급언어의 설명 및 차이점〉, 《네이버 블로그》, 2011-03-06

참고문헌[편집]

같이 보기[편집]

 

  검수요청.png검수요청.png 이 기계어 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.