본문 바로가기
CS

[CS] 혼자 공부하는 컴퓨터구조+운영체제 03. 명령어

by 게게겍 2023. 3. 22.

혼자 공부하는 컴퓨터구조 + 운영체제 > 책과 강의를 통해 개인적으로 공부한 기록입니다.

 

3.1 소스 코드와 명령어

고급언어와 저급언어

고급 언어(high-level programming language): 사람이 이해하기 쉬운 언어이다.

저급 언어(low-level programming language): 컴퓨터가 이해하고 실행하는 언어이다.

저급 언어에는 기계어와 어셈블리어가 있다.

기계어(machine code): 0과 1로 이루어진 이진수로 이루어진 언어이다.

어셈블리어(assembly language): 기계어와 1:1 대응되는 기호로 이루어진 언어이다.

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

컴파일 언어(compile language): 컴파일러에 의해 저급 언어로 변환되는 언어이다. 소스코드가 컴파일러에 의해 목적 코드가 생성된다.

→ 외국어를 모르는 사람한테 통채로 번역해서 전달해주는 방식

인터프리터 언어(interpreter language): 소스코드가 인터프리터에 의해 한 줄씩 실행된다.

→ 외국어를 모르는 사람한테 한줄씩 읽어주는 방식

사실 정확하게 둘의 경계를 나누는것은 아닙니다. 이러한 방식이 저급언어를 이해하는 방식이다 개념으로 접근할것.

3.2 명령어의 구조

연산 코드와 오퍼랜드

명령어는 연산 코드와 오퍼랜드로 구성된다.

연산 코드(operation code): 명령어의 기능을 나타내는 코드이다. 명령어가 수행할 연산을 나타낸다.

오퍼랜드(operand): 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 메모리 주소이다.

오퍼랜드 필드를 주소 필드라고도 한다. 오퍼랜드는 0개 또는 1개 이상일 수 있다.

연산 코드는 CPU의 종류에 따라 다르다. 대표적으로는 데이터 전송, 산술/논리 연산, 제어 연산, 입출력 연산이 있다.

주소 지정 방식

이 저장된 위치를 쓰는 이유: 명령어 내에서 표현할 수 있는 데이터 크기가 제한되어 있기 때문이다.

16bit의 경우 오퍼랜드에 저장할 수 있는 데이터 크기는 $2^6$ 이고 오퍼랜드가 더 많아지면 공간이 더 좁아지기 때문이다

유효 주소(effective address): 명령어가 오퍼랜드를 참조하는 주소이다.(연산에 사용할 데이터가 저장된 위치)

명령어 주소 지정 방식(addressing mode): 명령어가 오퍼랜드를 참조하는 방법이다.(연산에 사용할 데이터가 저장된 위치를 찾는 방식으로써 유효주소를 찾는 방법으로 이해하면 됨)

  • 즉시 주소 지정 방식(immediate addressing mode): 명령어에 직접 오퍼랜드를 기술하는 방법이다.
  • 직접 주소 지정 방식(direct addressing mode): 오퍼랜드가 메모리 주소인 경우, 메모리 주소를 직접 명시하는 방법이다.(유효주소 표현크기가 연산코드만큼 줄어듦)
  • 간접 주소 지정 방식(indirect addressing mode): 오퍼랜드가 메모리 주소인 경우, 메모리 주소가 저장된 메모리 주소를 기술하는 방법이다.
  • 레지스터 주소 지정 방식(register addressing mode): 오퍼랜드가 레지스터인 경우, 레지스터 번호를 기술하는 방법이다.

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

  • 레지스터 간접 주소 지정 방식(register indirect addressing mode): 오퍼랜드가 레지스터인 경우, 레지스터 번호가 저장된 메모리 주소를 기술하는 방법이다.

스택과 큐

스택

스택(stack): 후입선출(LIFO, Last In First Out) 구조이다. 데이터를 넣는 것을 푸시(push), 데이터를 꺼내는 것을 팝(pop)이라고 한다.

큐(queue): 선입선출(FIFO, First In First Out) 구조이다. 데이터를 넣는 것을 인큐(enqueue), 데이터를 꺼내는 것을 디큐(dequeue)라고 한다