Search
🧸

명령어

생성일
2023/08/04 02:49
태그
혼공컴구
컴퓨터 구조
날짜
3 more properties

소스코드와 명령어

고급 언어와 저급 언어

고급 언어

사람을 위한 언어

저급 언어

컴퓨터가 이해하고 실행할 수 있는 언어
기계어
어셈블리어

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

컴파일 언어

컴파일: 저급 언어로 변환하는 과정
소스 코드 → 컴파일 → 목적 코드 (Object Code)

인터프리터 언어

한 줄씩 실행됨
컴파일언어와 달리 오류 만나기 전까지는 정상 실행

경계선

C, C++은 컴파일언어다. 하지만 그 외의 언어는 양 쪽을 다 사용. Python도 일부 컴파일 되면 Java는 인터프리트도 동시에 수행

목적 파일과 실행 파일

목적 파일: 목적 코드로 이루어진 파일
실행 파일: 실행 코드로 이루어진 파일 (.exe)
목적 코드가 실행되기 위해선 링킹이 필요하다
ex) Import …
링킹을 거치고 나면 하나의 실행파일이 됨

명령어 구조

명령어 = 연산자 + 피연산자
연산자 = 연산 코드 = operation code
피연산자 = operand = 연산에 사용할 데이터, 혹은 데이터가 저장된 위치

오퍼랜드

1.
연산에 사용할 데이터
a.
숫자, 문자 등을 나타내는 데이터
2.
연산에 사용할 데이터가 저장된 위치 (주로 !!)
a.
메모리나 레지스터 주소
→ 그래서 주소 필드라고도 부른다
오퍼랜드가 N 개인 명령어
N=0) 0-주소 명령어
N=1) 1-주소 명령어
N=2) 2-주소 명령어
N=3) 3-주소 명령어

연산 코드

연산의 종류

1.
데이터 전송
2.
산술 및 논리 연산
3.
제어 흐름 변경
4.
입출력 제어

데이터 전송

MOVE: 데이터를 옮겨라
STORE: 메모리에 저장하라
LOAD(FETCH): 메모리에서 CPU로 데이터를 가져와라
PUSH: 스택에 데이터를 저장하라
POP: 스택의 최상단 데이터를 가져와라

산술 논리

ADD SUBTRACT MULTIPLY DIVIDE: 덧셈 뺄셈 곱셈 나눗셈
INCREMENT DECREMENT 오퍼랜드에 +1, -1
AND OR NOT: AND OR NOT 연산을 수행하라
COMPARE 두 개의 숫자 또는 TRUE FALSE 값 비교하라

제어 흐름 변경

JUMP: 특정 주소로 실행 순서를 옮겨라
CONDITIONAL JUMP: 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
HALT: 프로그램의 실행을 멈춰라
CALL: 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
RETURN: CALL을 호출할 때 저장했던 주소로 돌아가라

입출력 제어

READ(INPUT): 특정 입출력 장치로부터 데이터를 읽어라
WRITE(OUTPUT): 특정 입출력 장치로 데이터를 써라
START IO: 입출력 장치를 시작하라
TEST IO: 입출력 장치의 상태를 확인하라

주소 지정 방식

Q. 왜 오퍼랜드 필드에 메모리나 레지스터의 주소를 담을까? <연산 코드, 연산 코드에 사용될 데이터> 형식으로 명령어를 구성하면 안 될까?
A. 가능은 하지만 피연산자가 많아지면 오러랜드에 할당할 비트 수가 적어진다. 표현할 가지 수가 적어지니, 값 대신 주소를 저장하는 것.
오퍼랜드 필드에 데이터가 저장된 위치를 명시
이 때 데이터의 위치를 찾는 방법 = 주소 지정 방식 (Addressing Mode)
유효 주소
연산에 사용할 데이터가 저장된 위치

즉시 주소 지정 방식

Immediate Addressing Mode
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
표현할 수 있는 데이터의 크기는 작아짐
연산에 사용할 데이터를 메모리나 레지스터로부터 찾을 필요가 없어서 빠름

직접 주소 지정 방식

Direct Addressing Mode
오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
아까보단 나은데 여전히 연산코드 때문에 표현할 수 있는 주소의 범위가 적다

간접 주소 지정 방식

Indirect Addressing Mode
표현 범위가 최대로 늘어남
두 번의 메모리 접근이 필요해서 느리다

레지스터 주소 지정 방식

Register Addressing Mode
직접 주소 지정 방식과 비슷하게
CPU 외부에 있는 메모리가 아니라 내부의 레지스터에 접근하는 게 더 빠르다
직접 주소 지정 방식과 비슷한 문제 공유

레지스터 간접 주소 지정 방식

Register Indirect Addressing Mode
연산에 사용 할 데이터를 메모리에 저장 → 해당 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
메모리 접근이 한 번으로 줄어서, 간접 주소 지정 방식보다 빠르다
정리하면, XX 주소 지정 방식