작성
·
120
0
안녕하세여 교수님
소스파일 작성에 질문이 있습니다..!
소스 파일은 우리가 c문법에 맞게 끔 타이핑한 것들(코딩)이다. 소스 파일을 구성하는 타이핑한 문자 하나하나가 아스키 코드 값 형태로 저장이 된다. a라고 내가 타이핑을 했을때,
a 아스키 코드값이 65니까 1byte인 2진수 01000001 형태의 bit열로 소스코드를 구성하는 그 캐릭터 하나하나가 전부 다 여기 이진수 형태로 바뀌어서 저장이되고 이 저장된 형태의 파일을
(아스키 코드값 형태로 저장된) 텍스트 파일이라고 한다.
소스파일도 이 텍스트 파일의 형태로 저장이된다.
질문1. (o,x로 대답해주세요)
소스파일에서
A = 3라고 적었을때, 소스파일은 텍스트 파일이니까 하나하나 문자가 다 아스키 코드값으로만 저장된다.
'A'(01000001)
'='는 아스키값으로 61이니까 (00111101)
3은 51이니까 (00110011)
즉 01000001 00111101 00110011 이렇게 저장되는 게 맞는겁니까?
HIGH-LEVEL 언어는 사람이 직접 이해할 수 있는 수준의 언어로 사람에게 가장 가까운 언어이다.
예제를 보면,서로 다른 메모리 공간에 어떤 값을 저장한 뒤에, 이 값들을 더하여 다른 메모리
공간에 저장하는 식을 볼 수 있다. 이 과정에 변수라는 개념을 이용하여 메모리 공간을 사람이 이해하기 쉬운 방식으로 표현한 것과 수학의 덧셈과 비슷하게 표현한 것을 확인할 수있다.
이렇게 high-level 언어는 사람이 이해하고 사용하기에는 편하지만 당연히 cpu는 이해할 수 없어 컴파일,로딩,링킹 등 기계어로 번역하는 여러 가지 과정을 거쳐 cpu가 수행하게 된다.
따라서 이것은 cpu가 이해할 수 없어서, cpu가 뭔가 실행하려면 cpu가 이해할 수 있는 명령어 인스트럭션의 bit로 바껴있어야한다. 그래서 그작업을 해주는 것이 컴파일 이라고 한다.
오브젝트 파일은 아스키 코드값 형태인 비트열(텍스트 파일)이 아니고 실제 cpu가 이해할 수 있는 명령어의 비트 열이다.
질문2. (만약 질문 1이 맞다면) 위에 있는 명령어 인스트럭션의 bit라는 것이 예를 들어
A=3
B=4
C= A+B라고 적혀있을 때,
+가 아스키 코드값으로는 10진수로 43이니까 2진수로 00101011입니다.
근데 cpu에선 +가 ADD (어셈블리언어) 로 생각해야하니까 다른 이진수로 바뀌어서 명령어 인스트럭션 bit열로 재구성 된다는 건가요??
항상 고생이 많으십니다. 늘 좋은 강의 듣고있습니다 감사합니다 교수님
답변 1
1
안녕하세요? 공부를 열심히 하고 계시다는 느낌이 드는 질문글입니다. 제가 퀴즈 보는 기분이네요.
1.
NO
리터럴이나 데이터에 대해서는 일단 지금까지 공부하신 내용으로는 이론상 그렇게 저장될거라고 추측하실 수 있습니다. 그러나 그 이론이 실제 컴파일러 제작에 반영될 때 어떻게 될 지는 컴파일러를 만드시는 분들이 결정하는 문제입니다. 예를 들면 OS 특성에 따라 이진수를 저장하는 순서가 반대가 되기도 할 수 있고 (이것도 뒤에 나옵니다) 데이터의 양을 줄이기 위해 압축을 할 수도 있습니다. 13장의 파일 입출력에서 바이너리 입출력에 대해서 더 배우시기 됩니다.
2.
NO
간단히 공부하신 내용으로 이후 내용을 추측해보는 것은 좋은 공부 습관입니다. 앞으로 공부 속도가 빠르실 것 같습니다. 그러나 컴파일러 공부를 별도로 하셔야 할 것 같습니다. 안타깝게도 질문하신 내용은 본 강의의 범위에서 너무 멀어졌네요. 제 전공 분야가 아니라서 간단히 설명드리기도 어려운 측면이 있으니 별도로 연구를 해보셔야할 것 같습니다.
* 질문하실 때 주의사항 알려드립니다. 처음 몇 번은 질문 요령을 안내해드리고 가급적 답변을 드리지만 반복될 경우에는 답변을 아예 받지 못하실 수도 있습니다.
https://blog.naver.com/atelierjpro/221547580916