[아키텍처] 어셈블리 언어

Eugene CHOI·2022년 2월 16일
0

Architecture

목록 보기
2/2

언어의 구분

1. 자연어

  • 사람들이 일상적으로 쓰는 언어를 말합니다.
  • 한국어, 영어 등

2. 고급 언어

  • 일반적으로 언급되는 프로그래밍 언어
  • 기계어를 고도로 추상화한 표현으로써 인간이 이해하기 쉬운 형태에 속합니다.(High Level)
  • 프로그램을 개발한 기종에 상관없이 어느 컴퓨터에서든 실행가능합니다.
  • 컴파일 과정에서 불필요한 instruction이 생성되므로 비교적 속도가 느립니다.
  • 고급언어를 컴파일러가 어셈블리어로 번역합니다.
  • C언어, Python, Java 등이 있습니다.

    #include <stdio.h>
    int main(){
    \quad printf("Hello World!");
    }

3. 어셈블리어

  • 기계사고방식의 언어입니다.
  • 컴파일러나 어셈블리어가 생성하는 불필요한 instruction을 최소화 가능합니다.
  • 기계적 사고 방식을 강요하기 때문에 프로그램 구성을 위한 요소가 크고 개발 효율이 떨어집니다.
  • 컴파일러로부터 생성된 어셈블리어는 기계가 이해할 수 있는 형태로 번역됩니다.

    mov eax, 1
    push eax
    push DWORD "Hello World!"
    call printf

4. 기계어

  • 기계어는 기수가 2인 숫자(2진법)로 구성됩니다.
  • 숫자 단위 하나는 bit입니다.
  • 컴퓨터가 이해할 수 있는 비트들의 집합입니다.

    1101010101101010101011010101010101

High vs Low

  • 개발 효율에 있어서는 고급 언어가 좋습니다.
  • 실행속도에 있어서는 기계어가 효율적입니다.
  • 현재는 CPU의 기술 발전에 의하여 실행속도 차이가 적습니다.

시스템 소프트웨어

  • 공통적으로 필요한 서비스를 제공하는 소프트웨어
  • 운영체제, 컴파일러, 로더, 어셈블러 등이 시스템 소프트웨어에 속합니다.
  • 프로그램과 하드웨어간의 인터페이스 역할

Grammer

어셈블리어는 정해진 표준이 없기 때문에 여러 종류의 문법이 있습니다. 대표적으로 AT&T 문법과 Intel 문법이 있습니다.

Opcode Operand1, Operand2
  • AT&T 문법은 Operand1이 Source가 되고
  • Intel 문법은 Operand2가 Source가 됩니다.

Source를 Destination에 연산하게 되는데 두 문법은 이 순서가 반대입니다.

주로 Intel 문법을 사용합니다.

General Register

32bit16bit64bit풀네임
EAXAXRAXExtended Accumulator Register누산기(Accumulator)라 불리고, 산술 연산에서 중간 결과값이 저장되며 최종 리턴값이 누산되어 저장된다.
EBXBXRBXExtended Base Register산술 연산에 사용되지만 리턴값이 저장되지 않는다
ECXCXRCXExtended Counter Register반복문의 인덱스와 같은 레지스터, 숫자가 역순으로 줄어든다
EDXDXRDXExtended Data RegisterEAX, ECX, EBX가 부족하면 사용하는 여분의 레지스터
ESIExtended Source Index메모리를 옮기거나 복사할 때 소스의 데이터가 복사된다
EDIExtended Destination Index복사할 때 목적지의 데이터가 복사된다
EBPExtended Base PointerStackFrame의 시작지점 주소
ESPExtended Stack PointerStackFrame의 종료지점 주소

Opcode

인텔 문법 기준입니다.

명령어
MOV
LEAMOV와 같지만, MOV는 값을 저장하고 LEA는 주소를 저장합니다.
ADD/SUBOperand2를 Operand1에 더하고 빼는 연산을 합니다.
INC/DEC1을 더하고 빼는 연산을 수행 합니다.
CMP두 Operand를 비교합니다.
CALL함수를 호출하는 명령입니다.
RETCALL로 호출된 함수를 종료하고 CALL 다음 명령줄로 이동합니다.
NOP아무것도 하지 않는 명령어입니다.
profile
Hi, my name is Eugene CHOI the Automotive MCU FW developer.

0개의 댓글