본문 바로가기
STORY/My Stroy

프로그램에 대한 생각

by KANG Stroy 2017. 3. 15.
728x90
728x90


문득 프로그램을 하면서 이 놈의 C, C++은 누가 만들었는가? 그리고 왜 만들었을까? 라는 생각을 해 보았습니다. 대학교때 기계어도 있었고.. 어셈블리어도 있었습니다. 


그냥 C언어 책의 첫 장에 나오는 부분 이였습니다. 그런데 오늘 문득.. 그 때가 생각이 나면서 구글링을 한번 더 해 보았습니다. 그냥 C언어는 이런거야. 이렇게 쓰고 이런거 넣으고 컴파일 버튼 딱 돌리면 끝? 이라고 이야기 하는 나의 모습도 보이더군요.. 


언어에는 크게 고급어와 저급어라는 부분으로 나뉘어 집니다. 


기계어와 어셈블리어는 저급어에 속합니다. 


나머지는 고급 언어에 속한다고 보셔야 겠내요 ... [위키]에서


그럼 기계어란 무었일까? [ https://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B3%84%EC%96%B4 ]


링크에 나와 있는 부분 입니다. C언어가 나오지 않았다면 아마도 '0'과 '1'의 무덤속에서 살아야 하지 않았나 싶습니다. 모든 사물이 0와 1로만 보이는 영화 메트릭스처럼 모니터의 0과 1의 무한 반복에 빠져 있을 뻔 했겠내요 .. 


대학교때 담당 교수가 헥사를 보면서 프로그램의 잘 못을 잡아 내던 기억이 납니다... 그때 와.. 교수 대단하다 라는 생각을 해 보았던 기억이 .. 


   6      5     5     5     5      6 bits
[  op  |  rs |  rt |  rd |shamt| funct]  R-type
[  op  |  rs |  rt | address/immediate]  I-type
[  op  |        target address        ]  J-type

rsrtrd는 register 연산자를 지시한다; shamt는 변화량을 제공한다; address나 immediate 필드는 직접 연산을 포함한다.

이를테면, register 1과 2를 추가하여 register 6이라는 결과를 낳게 만들면 다음과 같이 인코딩된다:

[  op  |  rs |  rt |  rd |shamt| funct]
    0     1     2     6     0     32     decimal
 000000 00001 00010 00110 00000 100000   binary

값을 register 3에 나열된 위치 뒤의 메모리 셀 68 셀에서 가져온 register 8로 불러들인다:

[  op  |  rs |  rt | address/immediate]
   35     3     8           68           decimal
 100011 00011 01000 00000 00001 000100   binary

address 1024로 Jump:

[  op  |        target address        ]
    2                 1024               decimal
 000010 00000 00000 00000 10000 000000   binary


바이너리 000 과 111이 모여서 헥사가 되고 헥사는 프로그램 언어가 되는 과정 같내요.. 

728x90

댓글