728x90
저급언어
- 기계어 : 0과 1로 이루어짐
- 어셈블리어 : 기계어를 읽기 편한 형태로 번역
고급언어
- C, JAVA, Python 등등
- 고급언어가 저급언어로 변환되는 방법
- 컴파일 언어
- 소스코드(고급언어) -> 컴파일러(컴파일) -> 목적코드(저급언어)
- 인터프리트 언어
- 인터프리터에 의해 한 줄씩 실행
- 컴파일 언어
Compiler Explorer
godbolt.org
명령어
명령어는 연산코드와 오퍼랜드로 이루어져 있다. (연산코드는 필수, 오퍼랜드는 0개 이상)
- 연산코드 : 수행할 연산
- 데이터 전송
- MOVE : 데이터를 옮겨라
- STORE : 메모리에 저장하라
- LOAD(FETCH)
- PUSH
- POP
- STACK : Last In First Out (LIFO) 후입선출
- QUEUE : First In First Out (FIFO)
- 산술/논리 연산
- ADD / SUBTRACT / MULTIPLY / DIVIDE
- INCREMENT / DECREMENT
- AND / OR / NOT
- 제어 흐름 변경
- JUMP : 특정 주소로 실행 순서를 옮겨라
- CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
- HALT : 프로그램의 실행을 멈춰라
- CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행순서를 옮겨라
- RETURN : CALL을 호출할 때 저장했던 주소로 돌아가라
- 입출력 제어
- 데이터 전송
- 오퍼랜드 : 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치(주소 필드)
- 유효 주소(effective address)
-
- 연산에 사용할 데이터가 지정된 위치
-
- 명령어 주소 지정 방식(addressing modes)
- 연산에 사용할 데이터가 저장된 위치를 찾는 방법
- 유효 주소를 찾는 방법
- 다양한 명령어 주소 지정 방식
- 즉시 주소 지정 방식 (immediate addressing mode)
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 간단한 형태의 주소 지정 방식
- 연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름
- 직접 주소 지정 방식 (direct addressing mode)
- 오퍼랜드 필드에 유효 주소 직접적으로 명시
- 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦
- 간접 주소 지정 방식(indirect addressing mode)
- 오퍼랜드 필드에 유효 주소의 주소를 명시
- 앞선 주소 지정 방식들에 비해 속도가 느림
- 레지스터 주소 지정 방식 (register addressing mode)
- 연산에 사용할 데이터가 저장된 레지스터 명시
- 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름
- 레지스터 간접 주소 지정 방식 (register indirect addressing mode)
- 연산에 사용할 데이터를 메모리에 저장
- 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
- 유효 주소(effective address)
C 언어 컴파일 과정
전처리기(preprocessor) -> 컴파일러(compiler) -> 어셈블러(assembler) -> 링커(linker)
- 전처리과정(preprocessing)
- 본격적으로 컴파일하기 전에 처리할 작업들
- 외부에 선언된 다양한 소스 코드, 라이브러리 포함 ( #include)
- 프로그래밍의 편의를 위해 작성된 매크로 반환 (#define)
- 컴파일할 영역 명시 (#if, #ifdef )
- 컴파일 과정(compiling)
- 전처리가 완료 되어도 여전히 소스 코드
- 전처리 완료된 소스 코드를 저급 언어(어셈블리 언어)로 변환
- 어셈블 과정(assembling)
- 어셈블리어를 기계어로 변환
- 목적 코드(object file)를 포함하는 목적 파일이 됨
- 목적파일 vs 실행파일
- 목적 파일과 실행 파일은 둘 다 기계어로 이루어진 파일
- 목적 파일은 링킹(linking)을 거친 이후에야 실행 파일이 된다
728x90
'△ > Computer Engineering' 카테고리의 다른 글
명령어 사이클과 인터럽트 (interrupt) (0) | 2024.04.02 |
---|---|
ALU와 제어장치 / 레지스터 (0) | 2024.03.27 |
컴퓨터로 숫자 문자 표현하는 방법 (이진수, 십육진수, 아스키코드) (1) | 2024.01.19 |
컴퓨터 구조 (1) | 2024.01.04 |
의사코드(pseudo-code)란? (슈도코드, 수도코드, 의사코드) (0) | 2023.03.02 |
댓글