본문 바로가기
학교강의/컴퓨터구조

컴퓨터구조 5주차

by Fel.Forest 2024. 4. 25.

소스코드와 명령어

 

고급 언어와 저급 언어

고급 언어

  • 사람을 위한 언어
  • 프로그램을 만들 때 사용하는 프로그래밍 언어
  • 컴퓨터가 이해하는 언어가 아닌 사람이 이해하고 작성하기 쉽게 만들어진 언어

저급언어

  • 컴퓨터가 직접 이해하고 실행할 수 있는 언어
  • 명령어로 이루어짐
  • 종류
    • 기계어
      • 0과 1의 명령어 비트로 이루어진 언어
    • 어셈블리어
      • 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 언어
      • 어셈블리어를 이용해 복잡한 프로그램을 만들기 쉽지 않다 -> 고급 언어 필요

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

컴파일 언어

  • 컴파일 방식으로 작도하는 프로그래밍 언어
  • 대표적인 언어 : C
  • 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급언어
  • 컴파일
    • 컴파일 언어로 작성된 소스 코드 전체가 저급 언어로 변환되는 과정
    • 실행 속도는 컴퓨터 성능에 따라 다름
  • 컴파일러
    • 컴파일을 수행하는 도구
    •  소스 코드에 문법적인 오류는 없는지, 실행 가능한 코드인지, 실행하는 데 불필요한 코드는 없는 지 등을 따져 소스코드를 처음부터 끝까지 저급언어로 컴파일 한다
    • 소스코드 내에서 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패함

인터프리터 언어

  • 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
  • 대표적인 언어 : Python
  • 인터프리터 : 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해 주는 도구
  • 컴퓨터와 대화하듯 소스 코드를 한 줄씩 실행하기 때문에 소스 코드 전체를 저급 언어로 변환하는 시간을 기다릴 필요가 없음
  • 소스 코드를 한 줄씩 실행하기 때문에 소스 코드  N번째 줄에 문법 오류가 있더라도 N-1번째 줄까지는 올바르게 수행됨
  • 일반적으로 인터프리터 언어는 컴파일 언어보다 느리다.
    • 컴파일을 통해 나온 켤과물, 즉 목적 코드는 컴퓨터가 이해하고 실행 할 수 있는 저급 언어인 반면, 인터프리터 언어는 소스 코드 마지막에 이를 때 까지 한 줄 한 줄 씩 저급 언어로 해석하며 실행해야 하기 때문이다.

요즘은 컴파일 + 인터프리터 방식임 : 피드백을 줌

소스 코드 

  • .c 

목적코드

  • .o, .obj

링커

  • 필요한 프로그램끼리 묶는거임

실행코드

  • .exe

순서

소스 코드 -> 변환(번역) -> 목적코드 -> 링크 -> 실행코드

명령어 구조

명령어 구조

  • 연산 코드
    • 연산자
    • 명령어가 수행할 연산
  • 오퍼랜드
    • 피연산자
    • 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치
  • 주소 지정 방식

연산코드

  • 명령어가 수행할 연산
  • 기본적인 연산 코드 유형
    • 데이터 전송
    • 산술/논리 연산
    • 제어 흐름 변경
    • 입출력 제어
  • 데이터 전송
    • MOVE : 데이터를 옮겨라
    • STORE : 메모리에 저장하라
    • LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라.
    • PUSH : 스택에 데이터를 저장하라.
    • POP : 스택의 최상단 데이터를 가져와라.
  • 산술/논리 연산
    • ADD/SUBTRACT/MULTIPLY/DIVIDE : 덧셈/뺄셈/곱셈/나눗셈을 수행하라.
    • INCREMENT/DECREMENT:오퍼랜드에 1을 더하라/ 1을 빼라.
    • AND/OR/NOT : AND/OR/NOT 연산을 수행하라.
    • COMPARE : 두 개의 숫자 또는 TRUE/FALSE 값을 비교하라
  • 제어 흐름 변경
    • JUMP : 특정 주소로 실행 순서를 옮겨라
    • CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
    • HALT : 프로그램의 실행을 멈춰라
    • CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
    • RETURN : CALL을 호출할 때 저장했던 주소로 돌아가라
  • 입출력 제어
    • READ(INPUT) : 특정 입출력 장치로부터 데이터를 읽어라
    • WRITE(OUTPUT) : 특정 입출력 장치로 데이터를 써라
    • START IO : 입출력장치를 시작하라
    • TEST IO : 입출력장치의 상태를 확인하라.

오퍼랜드

  • 오퍼랜드 필드에 메모리나 레지스터 주소를 담는 이유?
    • 명령어 길이
    • 명령어의 크기가 16비트, 연산 코드 필드가 4비트인2-주소 명령어인 경우
      • 오퍼랜드 필드당 6비트
      • 하나의 오퍼랜드 필드로 표현할 수 있는 정보의 가짓수 2^6

  • 명령어의 크기가 16비트, 연산 코드 필드가 4비트인 3-주소 명령어의 경우
    • 오퍼랜드 필드 당 4비트
    • 하나의 오퍼랜드 필드로 표현할 수 있는 정보의 가짓수 2^4

  • 만약 오퍼랜드 필드 안에 메모리 주소가 담긴다면?
    • 표현할 수 있는 데이터의 크기: 하나의 메모리 주소에 저장할 수 있는 공간만큼 커짐
      • 주소 당 저장할 수 있는 메모리 크기 : 16bit
      • 표현할 수 있는 정보의 가짓수 2^16 

  • 표현할 수 있는 정보의 가짓수는 해당 레지스터가 저장할 수 있는 공간만큼 커짐

 

주소 지정 방식

  • 보통 변수길이를 고정형으로 주기 때문에 하는 것임
    • ex) 총 16bit 연산코드 4bit  오퍼랜드 12bit  -> 오퍼랜드가 3개면 4bit,4bit,4bit 이렇게 되기 때문
      • 주소로 하면 찾아가서 사용하기 때문에 사용가능한 bit가 더 큼 -> 이득!
  • 유효주소 : 연산할 데이터가 있는 주소
  • 종류(5개)
    • 즉시 주소 지정 방식
      • 실질적으로 주소는 아님
      • 연산할 데이터를 직접 집어넣는 경우
      • 값이 들어가 있음
      • 빠름
      • ex) POP 3, PUSH 4
    • 직접 주소 지정 방식
      • 연산할 데이터가 있는 메로리 주소 : 유효주소
      • ex) POP 12번 방
    • 간접 주소 지정 방식
      • 연산할 데이터가 있는 주소를 알고 있는 주소를 넣는 경우
      • ex) POP 12번 방(10번 방)
  • 속도 차이 때문에 구분
    • 레지스터 주소 지정 방식
      • CUP 안의 메모리
      • 메모리중 가장 빠름
      • 비싸다 (Cash)
      • 그만큼 공간이 작아서 자주 지워짐
      • 레지스터 주소가 들어감 : 연산에 필요한 데이터가 있음
      • ex) FETCH R1
    • 레지스터 간접 주소 방식
      • 레스스터 주소에 유효주소가 들어가 있는 경우
      • FETCH R1(R2)
    • 정리하면
      • 값을 넣으면 : 즉시
      • 유효주소를 넣으면 : 집접
      • 요효주소를 가지는 주소를 넣으면 : 간접 

'학교강의 > 컴퓨터구조' 카테고리의 다른 글

컴퓨터구조 8주차  (0) 2024.05.03
7주차 컴퓨터구조  (0) 2024.04.25
컴퓨터구조 6주차  (0) 2024.04.25
컴퓨터구조 4주차  (1) 2024.03.29
3주차 컴구  (3) 2024.03.22