컴퓨터 공학/컴퓨터 구조

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

hhzinistic 2023. 7. 6. 21:58

2023.07.06 - [컴퓨터 공학/컴퓨터 구조] - [혼공컴운] chapter.02 데이터

 

[혼공컴운] chapter.02 데이터

이전글 - 2023.07.06 - [컴퓨터 공학/컴퓨터 구조] - [혼공컴운] chapter.01 컴퓨터 구조 시작하기 02-1 0과 1로 숫자를 표현하는 방법 정보 단위 - 비트(bit):0과 1을 나타내는 가장 작은 정보 단위 ( 이진법:

zinistic.tistory.com

 

03-1 소스 코드와 명령어

  • 고급 언어와 저급 언어
    - 고급 언어: 사람이 이해하기 위해 만들어진 컴퓨터 언어
    ex) 파이썬, 자바 등
    - 저급 언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어
    ex) 어셈블리어, 기계어

    - 어셈블리어: 읽기 편한 형태의 저급 언어



    <어셈블리어의 예시>
LDA	0XFE
STR	0XFF
SUB	0XFD
BZ 	0X12
STR	0XFE
ADD	0XFF
STR	0XFF
LDA	0XFE
JMP	0X04
JMP	0X12

 

  • 컴파일 언어와 인터프리터 언어
    • 컴파일 언어: 컴파일 방식으로 작동하는 프로그래밍 언어
      ex) c, c++ 등
      - 컴파일 : 소스 코드 전체가 저급 언어로 변환 후 프로그램이 실행
      - 컴파일러: 컴파일을 수행하는 툴

      <컴파일 과정>
      소스 파일 → 컴파일 → 오브젝트 파일

    • 인터프리터 언어: 인터프리터에 의해 소스 코드가 한 줄 씩 실행되는 포로그래밍 언어
      ex) 파이썬, Ruby 등
      - 인터프리터: 소스 코드를 한 줄 씩 저급 언어로 변환하여 실행하는 툴

    • 컴파일러와 인터프리터의 차이점
  컴파일러 인터프리터
중간 객체 코드를 생성하는가? O X
속도가 빠른가? O X
메모리가 많이 필요한가? O X
오류 감지가 쉬운가? X O
컴파일이 실행 전에 수행되는가? O X

→ 컴파일러는 중간 객체 코드 생성. 인터프리터는 생성 X
→ 컴파일러는 한 번에 전체 프로그램을 사용. 즉, 인터프리터 보다 빠르다.
→ 컴파일러는 객체 코드 생성 때문에 인터프리터 보다 많은 메모리가 필요.
→ 컴파일러는 모든 오류 동시에 표기, 인터프리터는 오류를 하나 씩 감지. 인터프리터가 오류를 감지하기에 더 쉽다.
→ 컴파일러는 소스 파일을 컴파일 후 실행이 일어남. 인터프리터는 동시에 일어남.

 

 

  • 오브젝트파일(목적파일)과 실행파일
    - 오브젝트파일: 목적 코드로 이루어진 파일 ( 실행 불가능 )
    - 실행파일: 실행 코드로 이루어진 파일 ( 실행 가능 )


    <링킹 과정>  → 오브젝트 파일이 실행되기 위해서는 링킹 과정 필수적! 

 

 

 


 

 

 

03-2 명령어의 구조

  • 연산코드와 오퍼랜드
    • 오퍼랜드: 연산에 사용할 데이터 혹은 데이터가 저장된 위치. 피연산자라고도 함.
      - 오퍼랜드 필드: 명령어에서 오퍼랜드가 저장되는 영역. 주소필드라고도 함.

      <오퍼랜드 필드의 개수에 따른 명령어 형식>
      - 0-주소 명령어: 오퍼랜드가 하나도 없는 명령어
      - 1-주소 명령어: 오퍼랜드가 하나인 명령어
      - 2-주소 명령어: 오퍼랜드가 두 개인 명령어
      - 3-주소 명령어: 오퍼랜드가 세 개인 명령어

       
    • 연산코드: 명령어가 수행할 연산. 연산자라고도 함.

      <연산자의 유형>
      1. 데이터 전송 { ex) MOV, STR, LDA  등 }
      2. 산술/논리 연산 { ex) ADD, SUB 등 }
      3. 제어 흐름 변경 { ex) JMP 등 }
      4. 입출력 제어 { ex) READ, WRITE 등 }




  • 주소 지정 방식
    - 유효 주소: 연산의 대상이 되는 데이터가 저장된 위치
    • 즉시 주소 지정 방식: 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
      - 데이터 표현 범위
      - 속도 빠름

    • 직접 주소 지정 방식: 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
      - 데이터 표현 범위 즉시 주소 지정 방식 보다 , 간접 주소 지정 방식 보다
      - 속도 즉시 주소 지정 방식 보다 느림

    • 간접 주소 지정 방식: 오퍼랜드 필드에 유효 주소의 주소를 명시하는 방식
      - 데이터 표현 범위
      - 속도 느림

    • 레지스터 주소 지정 방식: 오퍼랜드 필드에 연산에 사용할 데이터를 저장한 레지스터를 명시하는 방법
      - 데이터 표현 범위
      - CPU 내부 레지스터에 접근하는 방식으로 직접 주소 지정 방식 보다 빠름

    • 레지스터 간접 주소 지정 방식: 연산에 사용할 데이터를 메모리에 저장하고 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법
      - 데이터 표현 범위
      - CPU 내부 레지스터에 접근하는 방식으로 간접 주소 지정 방식 보다 빠름

 < 주소 지정 방식에 따른 범위와 속도 >
1. 속도 - 간접 < 직접 < 즉시
2. 데이터 표현 범위 - 즉시 < 직접 < 간접 
3. 같은 방식, 다른 저장 장소인 주소 지정 방식 속도 - 레지스터 > 메모리




  • 스택과 큐
    - 스택(stack): 나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식
     = Last In First Out ( LIFO, 후입선출 )

    - 큐(queue): 저장한 순서대로 데이터를 빼내는 데이터 관리 방식
     = First In First Out( FIFO, 선입선출 )

    스택과 큐는 자료구조, 알고리즘 등 컴퓨터 공학에서 매우 중요한 개념