크래프톤정글/혼공컴운

[혼공컴운] CH03 명령어

아람2 2024. 10. 2. 19:04
반응형

CH03 명령어

03-1 소스 코드와 명령어 

 

고급 언어 - 개발자가 이해하기 쉽게 만든 언어 ex. C언어, JAVA, C++ 

저급 언어 - 컴퓨터가 이해하고 실행하는 언어 

출처 https://youtu.be/B8TDaBp3UWo?si=XrRY72E5wLsYLLST

 

어셈블리어 

 

컴파일 언어와 인터프리트 언어 

고급 언어에서 저급 언어로 변환되는 과정은 크게 두 가지가 있다

1) 컴파일 방식 2) 인터프리트 방식 

1) 컴파일 방식 

컴파일러가 소스 코드 전체를 0과 1의 명령어로 이루어진 저급 언어로 변환 

컴파일된 저급 언어를 목적 코드라고 한다 

 

 

2) 인터프리트 언어

인터프리터에 의해 한 줄씩 실행

소스 코드 전체가 변환되기까지 기다릴 필요 없음 

 

컴파일 언어와 인터프리트 언어의 차이 

컴파일 언어 - 컴파일 중 오류가 발생하면 소스 코드 전체가 실행되지 않음 

인터프리트 언어 - 인퍼프리트 중 오류가 발생하면 오류 발생 전까지의 코드는 실행 

 

컴파일과 인터프리트 언어 과정 살펴보기

https://godbolt.org/  참고

 

03-2 명령어의 구조 

무엇을 대상으로, 무엇을 수행하라

 

출처 https://youtu.be/bWPHUi6BPxo?si=ks-Sa9uwyX4J6FoI

 

수행할 연산 - 연산에 사용될 데이터 or 연산에 사용될 데이터가 저장된 위치 -> 연산 코드 - 오퍼랜드 구조 

+ 기계어와 어셈블리어도 명령어다 

 

오퍼랜드 

연산에 사용될 데이터 or 연산에 사용될 데이터가 저장된 위치 (주소 필드)

 

연산 코드

수행할 연산

연산 코드가 담고 있는 내용 

1) 데이터 전송

2) 산술/ 논리 연산

3) 제어 흐름 변경 

4) 입출력 제어 

대표적인 연산 코드의 종류

1) 데이터 전송

MOVE 데이터를 옮겨라

STORE 메모리에 저장하라

LOAD (FETCH) 메모리에서 CPU 로 데이터를 가져와라

PUSH 스택에 데이터를 저장하라 

POP 스택의 최상단 데이터를 가져와라 

2) 산술/ 논리 연산

ADD/ SUBTRACT/ MULTIPLY/ DIVIDE - 덧셈/ 뺄셈/ 곱셈/ 나눗셈을 수행하라 
INCREMENT/ DECREMENT - 오퍼랜드에 1을 더하라/ 오퍼랜드에 1을 빼라 

AND/ OR/ NOT - AND/ OR/ NOT 연산을 수행하라 

COMPARE - 두 개의 숫자 또는 TRUE/ FALSE 값을 비교하라

3) 제어 흐름 변경

JUMP - 특정 주소로 실행 순서를 옮겨라

CONDITIONAL JUMP - 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라

HALF - 프로그램의 실행을 멈춰라

CALL - 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라

RETURN - CALL 을 호출할 때 저장했던 주소로 돌아가라 

4) 입출력 제어

READ (INPUT) 특정 입출력 장치로부터 데이터를 읽어라

WRITE (OUTPUT) 특정 입출력 장치로부터 데이터를 써라

START IO 입출력 장치를 시작하라

TEST IO 입출력 장치의 상태를 확인하라 

 

오퍼랜드에 주소를 넣는 이유

명령어 내에서 표현할 수 있는 데이터 크기가 제한되기 때문

오퍼랜드 개수가 많아지면 하나의 오퍼랜드에 표현할 수 있는 크기가 작아진다 

표현할 수 있는 크기에 제한 받지 않게 하기 위해서 아래처럼 주소를 저장한다 

오퍼랜드에 주소 저장
오퍼랜드에 레지스터 주소 저장

유효 주소 Effective Address 

연산에 사용할 데이터가 저장된 위치 

명령어 주소 지정 방식 Addressing Modes

연산에 사용할 데이터가 저장된 위치를 찾는 방법

유효한 주소를 찾는 방법

다양한 명령어 주소 지정 방식들 

 

1) 즉시 주소 지정 방식 Immediate Addressing Mode

연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시

가장 간단한 형태의 주소 지정 방식

연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름

2) 직접 주소 지정 방식 Direct Addressing Mode

오퍼랜드 필드에 유효 주소 직접적으로 명시

유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦

3) 간접 주소 지정 방식 Indirect Addressing Mode  

오퍼랜드 필드에 유효 주소의 주소를 명시 

앞선 주소 지정 방식들에 비해 속도가 느림

4) 레지스터 주소 지정 방식 Register Addressing Mode

연산에 사용할 데이터가 저장된 레지스터 명시 

메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름

5) 레지스터 간접 주소 지정 방식 Register Indirect Addressing Mode 

연산에 사용할 데이터를 메모리에 저장 

그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시 

반응형