코드와 명령어

Eunjeon_g·2023년 10월 9일
0
post-thumbnail

🖥️ 1. 저급언어

  • 기계어
    0과 1로 이루어진 명령어로 이루어진 언어
  • 어셈블리어
    기계어를 읽기 편한 형태로 변역한 언어

🖥️ 2. 고급언어

2.1. 컴파일 언어

  • 소스코드 ➡️ 컴파일러 ➡️ 목적코드
  • 전체적인 코드 훑어보고 오류 없으면 소스코드로 변환

2.2. 인터프리트 언어

  • 한 줄씩 실행

✒️ 3. 명령어

  • 구조
    연산코드 + 오퍼랜드

3.1. 오퍼랜드

  • 연산에 사용될 데이터 or 연산에 사용될 데이터가 저장된 위치(주소필드)
  • 오퍼랜드의 개수는 0~n

❓데이터가 저장된 위치를 저장하는 이유(더 자주 사용)

명령어에서 표현할 수 있는 데이터 크기가 한정적이기 때문
만약 명령어가 16bit이고, 연산코드가 4bit일 때 오퍼랜드는 12bit밖에 사용하지 못함.

오퍼랜드의 개수가 많아질수록 오퍼랜드 하나가 사용하는 영역도 좁아짐 == 데이터 표현 영역이 적어짐

3.2. 연산코드

CPU마다 다른 연산코드 가지고 있음

  • 공통
    - 데이터 전송
    • 산술/논리 연산
    • 제어 흐름 변경
    • 입출력 제어

3.2.1. 데이터 전송

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

3.2.2. 산술/논리 연산

  • ADD / SUBSTRACT / MULTIPLY / DIVIDE
  • INCREMENT / DECREMENT
  • AND / OR / NOT
  • COMPARE

3.2.3. 제어 흐름 변경

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

3.2.4. 입출력 제어

  • READ(INPUT)
  • WRITE(OUTPUT)
  • START IO
  • TEST IO

3.3. 명령어 주소 지정 방식

  • 연산에 사용할 데이터가 저장된 위치를 찾는 방법
  • 유효 주소를 찾는 방법
    유효주소란 연산에 사용할 데이터가 저장된 위치

3.3.1. 즉시 주소 지정 방식

  • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
  • 가장 간단한 형태의 주소 지정 방식
  • 연산에 사용할 데이터의 크기가 자강질 수 있지만 빠름

3.3.2. 직접 주소 지정 방식

  • 오퍼랜드 필드에 유효 주소 명시
  • 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦

3.3.3. 간접 주소 지정 방식

  • 오퍼랜드 필드에 유효 주소의 주소 명시
  • 이전 방식들에 비해 느림

3.3.4. 레지스터 주소 지정 방식

  • 연산에 사용할 데이터가 저장된 레지스터 명시
  • 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름

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

  • 연산에 사용할 데이터를 메모리에 저장
  • 그 주소를 저장한 레지스터를 명시

0개의 댓글