[Study] 2주차(2)

hyo_d·2023년 3월 29일
0

Study

목록 보기
3/9

혼자 공부하는 컴퓨터 구조+운영체제

명령어

모든 소스 코드는 컴퓨터 내부에서 명령어로 변환된다.

고급 언어

  • 프로그램을 만들 때 컴퓨터가 이해하는 언어가 아닌 사람이 이해하고 작성하기 쉽게 만들어진 언어
  • C, C++, Java, Python과 같은 프로그래밍 언어
  • 컴퓨터가 이해하고 실행하기 위해 저급 언어로 변환 되어야 한다.

저급 언어

  • 컴퓨터가 이해하고 실행하는 언어
  • 기계어어셈블리어 두 가지 종류가 있다.
  • 어셈블리어는 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급 언어

고급 언어 👉 저급 언어

  • 컴파일 언어

    • 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
    • 컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드라고 한다.
  • 인터프리터 언어

    • 인터프리터에 의해 소스 코드를 한 줄씩 저급 언어로 변환하여 실행하는 고급 언어
  • 인터프리터 언어가 컴파일 언어보다 빠르다고 생각 할 수도 있지만, 일반적으로 인터프리터 언어는 컴파일 언어보다 느리다.


명령어의 구조

  • 연산 코드와 오퍼랜드로 구성
    • 연산 코드 : 명령어가 수행할 연산 = 연산자
    • 오퍼랜드 : 연산에 사용할 데이터 혹은 저장된 위치 = 피연산자
      • 주소 지정 방식 : 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법

오퍼랜드

  • 연산에 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담긴다.
  • 오퍼랜드 필드 == 주소 필드
mov eax, 0 # 오퍼랜드가 두 개인 경우
pop rbp # 오퍼랜드가 한 개인 경우
ret # 오퍼랜드가 없는 경우

연산 코드

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

주소 지정 방식

  • 추가 예정
profile
햇병아리

0개의 댓글