컴퓨터구조 + 운영체제

[컴퓨터구조 + 운영체제] 3일차 명령어

Hwone 2023. 8. 18. 19:42

저급언어 

기계어: 0과1로 이루어진 명령어로 구성된 저급 언어 

어셈블리어: 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급언어 

 

고급언어 

컴파일 언어; 컴파일 언어로 작성된 소스코드는 컴파일러에 의해 저급언어로 변환되고(이 과정을 컴파일) 컴파일 결과로 저급 언어인 목적코드가 생성됨 

인터프리트 언어: 인터프리터에 의해 한줄씩 실행되고 소스 코드 전체가 저급언어로 변환되기까지 기다릴 필요가 있다 

*컴파일은 전체적으로 살펴보고 통째로 저급언어로 변환 

 

명령어의 구조 
수행할 연산 + 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치
(연산 코드 + 오퍼랜드)

-연산코드 
1. 데이터 전송 2.산술/논리연산 3.제어흐름변경 4.입출력 제어
(데이터 전송 명령어들을 보면 github에서 자주 쓰는 push, pull 등이 보인다)  

 

-오퍼랜드
명령어의 오퍼랜드 공간안에 자주 담기는 값은 저장된 위치라서 주소필드라고도 한다 
오퍼랜드는 아예 없을 수 도 있고 1개 이상일 경우도 있다 
*유효 주소 : 연산에 사용할 데이터가 저장된 위치

명령어 주소 지정 방식 
연산에 사용할 데이터가 저장된 위치를 찾는 방법 
유효 주소를 찾는 방법 
다양한 명령어 주소 지정 방식들 

-즉시 주소 지정 방식 
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시(가장 간단) 
연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름 

-직접 주소 지정 방식 
오퍼랜드 필드에 유효 주소 직접적으로 명시 
유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦 

-간접 주소 지정 방식 
오퍼랜드 필드에 유효 주소의 주소를 명시 
앞선 주소 지정 방식들에 비해 속도가 느림 
*메모리 접근을 최소화 하는게 제일 빠르다 

-레지스터 주소 직접 지정 방식 
연산에 사용할 데이터가 저장된 레지스터 명시 
메모리에 접근하는 속도보다 더 빠름 

-레지스터 간접 주소 지정 방식 
연산에 사용하 데이터를 메모리에 저장 
그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시 

 

*번외
C#의 컴파일 과정 
1. 소스 코드 작성 .cs
2. 컴파일러 호출 : 소스코드를 컴파일러에게 전달하여 컴파일러가 읽고 분석
3. 토큰화 및 파싱 : 코드의 구조와 의미를 파악(변수, 함수,클래스 등의 구성요소를 인식하고 이해) 
4. 코드 검사 : 오류를 찾아 코드의 안정성 확보 
5. 중간 코드 생성 : 검사가 완료되면 중간언어로 변환하여 실행 가능한 코드로 컴파일된다 
6. 코드 최적화 : 중간언어는 성능을 향상시키기 위해 최적화 단계를 거쳐서 불필요한 코드를 제거하거나 효율적으로 재구설 
7. 네이티브 코드 생성 : 최적화된 중간 언어는 실행 환경에 맞게 네이티브 코드로 변환하여 실행 가능한 형태로 만들어짐 
8. 실행! : .NET 런타임 환경에서 실행된다 

C++의 컴파일 과정 
1. 소스 코드 작성 .cpp
2. 컴파일러 호출 : C#과 동일 
3. 프리 프로세싱 : 소스코드에 포함된 전처리 지시문 ( #include, #define 등)을 처리하여 소스코드를 수정 
4. 컴파일링 : 수정된 코드를 컴파일러가 읽어서 기계어 코드로 변환, 컴퓨터가 직접 실행할 수 있는 형태 
5. 링킹 : 여러개의 소스 파일과 라이브러리를 사용하는 경우, 링커가 하나의 실행 가능한 파일로 합침 
6. 실행 !