728x90
반응형
해당 강의를 듣고 정리한 내용입니다.
소스코드와 명령어
컴퓨터가 명령어를 실행하려면
개발자가 이해하기 쉽게 만든 고급 언어 ⇒ 컴퓨터가 이해하는 저급 언어로 변환하는 과정이 필요함
저급 언어
기계어
0과 1로 명령어로 구성된 저급 언어
어셈블리어
0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급 언어
고급 언어
컴파일 언어
- 컴파일이라는 과정을 거쳐 컴파일 언어로 작성된 소스 코드는 저급 언어인 목적 코드가 생성
- 컴파일 중 오류 발생하면 코드 전체가 실행 X
- C, C++, C#, JAVA
인터프리터 언어
- 인터프리터에 의해 한 줄씩 실행
- 소스코드 전체가 저급 언어로 변환되기까지 기다릴 필요 없음
- 인터프리트 중 오류 발생하면 발생 전까지의 코드는 실행
- Python, Javascript, Ruby
차이
컴파일, 인터프리터 방식은 흑과 백같은 개념이 아님.
명령어
연산 코드
수행할 연산을 담고 있는 명령
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
연산코드는 CPU마다 다름
오퍼랜드
- 연산에 사용될 데이터, 혹은 데이터가 저장된 위치(주소 필드)
- 명령어에 없는 경우도, 하나 이상인 경우도 있음
명령어 주소 지정 방식
오퍼랜드에서 표현할 수 있는 정보가 제한적이기 때문에, 주소값을 저장
유효 주소 (effective address)
연산에 사용할 데이터가 저장된 위치
즉시 주소 지정 방식
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 간단한 형태의 주소 지정 방식
- 연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름
직접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소 직접적 명시
- 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 감소
간접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소의 주소를 명시
- 앞선 주소 지정 방식들에 비해 속도가 느림
레지스터 주소 지정 방식
- 연산에 사용할 데이터가 저장된 레지스터 명시
- 메모리에 접근하는 속도보다 레지스터 접근 속도가 빠름
레지스터 간접 주소 지정 방식
- 연산에 사용할 데이터를 메모리에 저장
- 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
C언어 컴파일 과정
전처리기
- 본격적 컴파일 전 처리할 작업들
- 외부 소스 코드, 라이브러리 (#include)
- 매크로 변환 (#define)
- 컴파일할 영역 명시 (#if, #ifdef)
컴파일러
- 전처리가 완료 되어도 여전히 소스코드
- 저급 언어(어셈블리어)로 변환
어셈블러
- 어셈블리어를 기계어로 변환
- 목적 코드(object file)를 포함하는 목적 파일이 됨
목적 파일 VS 실행 파일
- 모두 기계어로 이루어짐
- 목적 파일은 링킹 후에 실행 파일이 됨
링커
- 각기 다른 목적코드를 하나의 실행파일로 묶어주는 작업
노션에서 티스토리로 복사하며 좀 깨지긴 했지만... 오늘은 정말 3년 전 처음 배우던 내용들(다 까먹은...) 에 대해서 다시 한번 차근차근 알아보는 시간을 가져서 좋았다.
특히 주소 지정 방식은 처음 배운 내용이라 더 많은 공부의 필요성을 느꼈다 ☹️
강의를 듣는 것뿐만이 아니라 직접 정리하면서 그래도 더 기억에 남는 것 같다. 이제 영어 공부 해야지 😭
728x90
반응형
'CS' 카테고리의 다른 글
[컴퓨터 구조] 레지스터 (0) | 2024.01.30 |
---|---|
[컴퓨터 구조] 0과 1로 데이터 표현하기 (0) | 2024.01.16 |
[컴퓨터 구조] 컴퓨터 구조의 큰 그림 (0) | 2024.01.15 |