Cute Running Puppy

cs/[OS] 혼자 공부하는 컴퓨터 구조 + 운영체제

[혼공컴운] chapter 03. 명령어

R.silver 2024. 1. 5. 14:28
반응형

03-1. 소스 코드와 명령어

고급 언어와 저급 언어

  • 고급 언어: 사람을 위한 언어
  • 저급 언어: 컴퓨터를 위한 언어
    • 예) 기계어, 어셈블리어
  • 기계어: 0과 1의 명령어 비트로 이루어진 언어

고급 언어로 작성된 소스 코드는 반드시 저급 언어(명령어)로 변환되어야 한다

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

  • 컴파일 방식: 소스 코드 전체를 저급 언어로 변환 -> 목적코드 생성
  • 인터프리터 방식: 소스 코드를 한 줄씩 실행

목적 파일 vs 실행 파일

  • 목적 파일: 목적 코드로 이루어진 파일
  • 실행 파일: 실행 코드로 이루어진 파일
  • 링킹: 목적 코드를 실행 코드로 변환하는 과정

03-2. 명령어의 구조

연산 코드와 오퍼랜드

  • 명령어 = 연산 코드 + 오퍼랜드
  • 연산 코드 (== 연산자): 명령어가 수행할 연산
  • 오퍼랜드 (== 피연산자): 연산에 사용할 데이터, 데이터가 저장된 위치
  • 연산 코드 필드: 연산 코드가 담기는 영역
  • 오퍼랜드 필드: 오퍼랜드가 담기는 영역
오퍼 랜드

연산에 사용할 데이터, 데이터가 저장된 위치
오퍼랜드 필드 == 주소 필드

  • 0-주소 명령어: 오퍼랜드 0개인 명령어
  • 1-주소 명령어: 오퍼랜드가 1개인 명령어
    0~3까지 존재
연산 코드

명령어가 수행할 연산

  1. 데이터 전송
    • move, store, load(fetch), push, pop
  2. 산술/논리 연산
    • add/substract/multiply/divide
    • increment/decrement
    • and/or/not
    • compare
  3. 제어 흐름 변경
    • jump
    • conditional jump
    • halt
    • call
    • return
  4. 입출력 제어
    • read(input)
    • write(output)
    • start io
    • test io

주소 지정 방식

오퍼랜드와 연산 코드를 담을 수 있는 공간은 한정되어 있음
오퍼랜드의 값을 다 담기 보다 주소를 활용하여 데이터의 위치를 가르킴

  • 유효 주소: 연산의 대상이 되는 데이터가 저장된 위치
  • 주소 지정 방식: 연산에 사용된 데이터의 위치를 주소를 사용하여 찾는 방법

다양한 주소 지정 방식

즉시 주소 지정 방식
  • 연산에 사용할 데이터 저장
    연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
    연산에 사용할 데이터들을 메모리, 레지스터로부터 찾는 과정이 없기에 다른 방식들 보다 빠르다
직접 주소 지정 방식
  • 유효 주소 (메모리 주소) 저장
    오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
    즉시 주소 지정 방식보다 표현할 수 있는 데이터의 크기가 커짐
    그러나 여전히 오퍼랜드 필드의 길이가 연산 코드의 길이만큼 짧아져 표현할 수 있는 유효 주소에 제한이 있다
간접 주소 지정 방식
  • 유효 주소의 주소 저장
    유효 주소의 주소를 오퍼랜드 필드에 명시
    표현할 수 있는 유효 주소의 범위가 직접 주소 지정 방식 보다 넓어짐
    그러나 두 번의 메모리 접근이 필요하여 앞서 설명한 방식들보다 느림
레지스터 주소 지정 방식
  • 유효 주소 (레지스터 이름) 저장
    직접 주소 지정 방식과 유사하게 레지스터를 오퍼랜드 필드에 직접 명시
    cpu 외부 메모리에 접근하는 것 보다 빠름
    표현할 수 잇는 레지스터 크기에 제한이 생길 수 있음
레지스터 간접 주소 지정 방식
  • 유효 주소를 저장한 레지스터 저장
    연산에 사용될 데이터를 메모리에 저장하고
    그 주소를 레지스터에 담고
    그 주소를 오퍼랜드 필드에 저장하는 방식
    간접 주소 지정 방식 보다 바르다

+) 스택과 큐

스택 (stack)

한쪽 끝이 막혀있는 저장 공간
막혀 있지 않은 부분으로 데이터를 저장하고, 데이터를 빼내는 방식
-> LIFO 방식: 나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식(후입선출)

in ↓↓ ↑↑out
data 2
data 1
data 0
push # 새로운 데이터 저장 
pop # 데이터 출력 (가장 마지막에 넣은 데이터 출력)

큐 (queue)

양쪽이 뚫려 있는 저장 공간
한쪽으로 데이터를 저장하고, 다른쪽으로 데이터를 꺼내는 방식
-> FIFO 방식: 가장 먼저 저장된 데이터부터 빼내는 데이터 관리 방식 (선입 선출)

↓↓ in ↓↓
data 2
data 1
data 0
↓↓ out ↓↓
push # 새로운 데이터 저장 
pop # 데이터 출력 (가장 처음에 넣은 데이터 출력) 
반응형