혼공컴운 - Chapter 3

JJuuuunn·2024년 1월 8일
0

명령어

소스 코드와 명령어

고급 언어와 저급 언어

  • 고급 언어 : 사람을 위한 언어
  • 저급 언어 : 컴퓨터가 직접 이해하고 실행할 수 있는 언어
    * 기계어 : 0과 1의 명령어 비트로 이루어진 언어
    • 어셈블리어 : 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 언어

저급 언어를 알아야하는 이유

하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발하는 임베디드 개발자, 게임 개발자, 정보 보안 분야 등의 개발자는 어셈블리어를 많이 사용한다. 이런 분야 개발자들에게는 어셈블리어를 읽으면 컴퓨터가 프로그램을 어떤 과정으로 실행하는지, 즉 프로그램이 어떤 절차로 작동하는지를 가장 근본적인 단계에서부터 하나하나 추적하고 관찰할 수 있다.
개발자들에게 어셈블리어란 '작성의 대상'일 뿐만 아니라 매우 중요한 '관찰의 대상'이기도 함.

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

  1. 컴파일 언어
    • 소스 코드 전체가 저급 언어로 변환되어 실행(컴파일)
    • 컴파일러 라는 도구를 통해 컴파일과정을 수행
    • 컴파일러를 통해 저급언어로 변환된 코드를 목적 코드라고 함.
  2. 인터프리터 언어
    • 소스 코드가 한 줄씩 실행

=> 일반적으로 인터프리터 언어가 컴파일 언어보다 느림.

목적 파일 vs 실행 파일

목적파일

  • 이미지로 이루어진 파일을 이미지 파일이라 부르고, 텍스트로 이루어진 파일을 텍스트 파일이라 부르듯
    목적코드로 이루어진 파일
  • 목적코드가 실행 파일이 되기 위해서는 링킹이라는 작업이 필요

실행파일

  • 실행 코드로 이루어진 파일

명령어의 구조

연산 코드와 오퍼랜드

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

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

오퍼랜드

  • 연산에 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담김
  • 그래서 오퍼랜드 필드를 주소 필드라고 부르기도 함
    • 오퍼랜드가 0개 : 0-주소 명령어
    • 오퍼랜드가 1개 : 1-주소 명령어
    • 오퍼랜드가 2개 : 2-주소 명령어
    • 오퍼랜드가 3개 : 3-주소 명령어

연산 코드

  • 종류는 매우 많지만, 기본적으로 4가지 코드 유형으로 나눔
    (데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어)

주소 지정 방식

  • 오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 이유 : 명령어의 길이 떄문
    만약 하나의 명령어가 n비트로 구성되고, 그주 ㅇ연산 코드 필드가 m비트라고 가정하면, 가장 많은 공간을 하당할 수 있는 1-주소 명령어일지라도 n-m비트가 되고, 2, 3-주소 명령어는 더욱 크기가 작음.
  • 유효 주소 : 연산의 대상이 되는 데이터가 저장된 위치
  • 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법

  • 주소 지정 방식 종류
    1. 즉시 : 연산에 사용할 데이터 직접 명시
    2. 직접 : 유효 주소를 직접 명시
    3. 간접 : 유효 주소의 주소를 명시
    4. 레지스터 : 레지스터를 직접 명시
    5. 레지스터 간접 : 유효 주소를 저장한 레지스터를 명시

  1. 즉시 주소 지정 방식(Immediate Addressing) : 이 방식은 연산에 사용될 데이터를 명령어의 일부분으로 직접 명시하는 방식입니다.
    예를 들어 'ADD 5'라는 명령어는 5를 현재 값에 더하라는 의미입니다.

  2. 직접 주소 지정 방식(Direct Addressing) : 이 방식은 메모리 주소를 직접 명시하여 그 주소에 있는 데이터를 사용하는 방식입니다.
    예를 들어 'LOAD 1000'이라는 명령어는 메모리의 1000번지에 있는 데이터를 레지스터로 로드하라는 의미입니다.

  3. 간접 주소 지정 방식(Indirect Addressing) : 이 방식은 유효 주소의 주소를 명시하는 방식입니다.
    즉, 명령어가 가리키는 메모리 위치에는 실제 데이터가 아니라 다른 메모리 위치의 주소가 저장되어 있습니다.
    이 방식은 주로 데이터 구조의 동적 할당이나 배열, 포인터 등에 사용됩니다.

  4. 레지스터 주소 지정 방식(Register Addressing) : 이 방식은 CPU 내부의 레지스터를 직접 명시하여 그 레지스터에 있는 데이터를 사용하는 방식입니다.
    이 방식은 메모리 접근 시간을 줄여 연산 속도를 빠르게 할 수 있습니다.

  5. 레지스터 간접 주소 지정 방식(Register Indirect Addressing) : 이 방식은 레지스터가 가리키는 메모리 위치의 데이터를 사용하는 방식입니다.
    즉, 레지스터에 저장된 값이 실제 데이터의 메모리 주소를 가리킵니다. 이 방식 역시 데이터 구조의 동적 할당이나 배열, 포인터 등에 사용됩니다.

profile
포기하지않겠습니다.

0개의 댓글