[시스템 프로그래밍] 00. Introduction

2024. 4. 2. 19:59·Computer Science/시스템 프로그래밍
목차
  1. Programming Language hierarchy
  2. Machine language란?
  3. Assembly Language와 Machine Language의 관계
  4. C++(High-level Language)과 Assembly Language와의 관계
  5. 어셈블리 언어의 특징
  6. 오늘날 프로그램의 작성

Programming Language hierarchy

 

  • C와 같은 High-Leve Language로 작성된 코드 는 컴파일러에 의해 Assembly Language로 변환되고, 이는 어셈블러에 의해 Machine Language로 변환된다.
  • Linker는 컴파일러, 어셈블러에 의해 변환된 Object file을 하나의 실행파일로 연결(i.e. .EXE)
  • 생성된 실행 파일은 운영체제에 의해 메모리에 로드되고, CPU는 기계어를 실행
    • 이 때, CPU의 아키텍쳐에 따라 기계어의 해석이 진행된다(ex. X86, Arm 등)

 

Machine language란?

  • CPU가 해석할 수 있는 numeric language
  • 모든 X86 프로세서는 공통적인 기계어(X86에 해당하는 기계어)를 해석할 수 있음

 

Assembly Language와 Machine Language의 관계

  • 어셈블리어는 ADD, MOV, SUB, CALL과 같은 짧은 mnemonics(니모닉)들로 작성된 명령어로 구성됨
  • 어셈블리어는 기계어와 1 : 1(one-to-one) 관계를 가지고 있다

 

C++(High-level Language)과 Assembly Language와의 관계

  • High-level Language는 어셈블리어와 1대다(one-to-many) 관계를 가지고 있음
    • C++의 명령어 하나는 여러개의 Assembly 언어와 기계어로 확장된다
  • 예시) 
int Y;
int X = (Y + 4) * 3;
mov eax, Y	; Y의 값을 eax 레지스터로 이동
add eax, 4	; eax 레지스터에 4를 더한다
mov ebx, 3	; 3을 ebx 레지스터로 이동
imul ebx	; eax에 ebx의 값을 곱한다
mov X, eax	; eax의 값을 X에 대입

 

어셈블리 언어의 특징

  • non-Portable
    • 특정 Processor family를 위해 디자인됨 (X86 어셈블리어를 다른 아키텍쳐 Processor에서 읽을 수 없음)
    • ex) 인텔 프로세서에서 작성된 기계어를 Apple Silicon의 프로세서가 읽을 수 없음
  • embedded program을 작성하는데 유리함
    • 메모리를 효율적으로 관리할 수 있음
  • real-time application을 작성하는데 유리함
    • High-level 언어로 작성된 코드는 컴파일러에 의해 기계어로 번역되기 때문에 정확한 control을 할 수 없다
    • 어셈블리어는 프로그램 코드를 보다 정확하게 지정할 수 있다
  • Console-game 코드를 작성하는데 유리함
    • 하드웨어에 직접적으로 접근할 수 있기 때문에, 속도 향승을 위한 직접적인 코드 작성이 가능함

오늘날 프로그램의 작성

  • 과거에는 memory가 적고, 프로세서의 연산 처리가 느렸기 때문에 대부분 어셈블리어로 코드를 작성함
  • 오늘날에는 하드웨어의 성능이 좋아졌기 때문에 프로그램들이 복잡해지고, 어셈블리어로 큰 규모의 프로그램을 작성하는 것은 쉽지 않음
  • 속도 향상을 위해 프로그램의 특정부분을 최적화 하거나, 하드웨어에 직접 접근하기 위해 어셈블리어를 사용한다

'Computer Science > 시스템 프로그래밍' 카테고리의 다른 글

[시스템 프로그래밍] 03. Assembly Language Fundamentals(1) - Basic Language Elements, 'Assembling, Linking and Running'  (0) 2024.04.09
[시스템 프로그래밍] 02. x86 Processor Architecture(3) - Components of a Typical x86 Computer, I/O System  (0) 2024.04.09
[시스템 프로그래밍] 02. x86 Processor Architecture(2) - Memory Management, 64-Bit x86-64 Processors  (0) 2024.04.09
[시스템 프로그래밍] 02. x86 Processor Architecture(1) - Basic Microcomputer Design, Basic Execution Environment  (0) 2024.04.09
[시스템 프로그래밍] 01. Data Representation  (0) 2024.04.02
  1. Programming Language hierarchy
  2. Machine language란?
  3. Assembly Language와 Machine Language의 관계
  4. C++(High-level Language)과 Assembly Language와의 관계
  5. 어셈블리 언어의 특징
  6. 오늘날 프로그램의 작성
'Computer Science/시스템 프로그래밍' 카테고리의 다른 글
  • [시스템 프로그래밍] 02. x86 Processor Architecture(3) - Components of a Typical x86 Computer, I/O System
  • [시스템 프로그래밍] 02. x86 Processor Architecture(2) - Memory Management, 64-Bit x86-64 Processors
  • [시스템 프로그래밍] 02. x86 Processor Architecture(1) - Basic Microcomputer Design, Basic Execution Environment
  • [시스템 프로그래밍] 01. Data Representation
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Spring
        • MVC
        • DB
        • 핵심 원리
        • JPA
      • WEB
        • HTML
        • CSS
        • HTTP
        • Application
      • Computer Science
        • Network
        • Database
        • OS
        • 시스템 프로그래밍
        • 컴퓨터구조
      • Algorithm
        • Divide&Conquer
        • Sort
        • Greedy
        • DP
        • Backtracking
        • NP-Complete
        • Graph
      • Data Structure
        • 자료구조
        • C++ STL
        • Java Collection
      • 소프트웨어 공학
        • 시험 공부 정리
        • Theorem
      • Programming Language
        • Python
        • Java
        • C
        • C++
        • Rust
        • Theory
      • Unix_Linux
        • Common
      • React
      • PS
        • BOJ
        • Tip
        • 프로그래머스
        • CodeForce
      • Book Review
        • Clean Code
      • Math
        • Linear Algebra
      • AI
        • DL
        • ML
        • DA
        • Concepts
      • 우아한테크코스
        • 프리코스
      • Project Review
      • LegacyPosts
      • Android
      • Apple
        • Mac
        • IPhone
        • IPad
      • 모니터
      • Diary
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
lumana
[시스템 프로그래밍] 00. Introduction
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.