어셈블리 프로그래밍 01

TonyHan·2021년 3월 2일
0

106

어셈블리 프로그래밍은 컴퓨터 개발에 꼭 필요하고 내장형 시스템 개발에 특히 필요한 기술이다.

컴퓨터의 동작원리를 이해하는데 많은 도움이 되는 과목이다.


이렇게 들어야 한다.

강의 : 줌을 통한 녹음된 강의(0900-1015)를 틀어줌, 필요시 직접 강의

줌 또는 온라인 강의를 수강하면 축석으로 인정

수시로 짧은 퀴즈 시험 실시 가능

시험 55
기말 실기 15
과제물 25
참여도 5

시험은 화목 9시 시작

과제물/실기시험결과물은 반드시 VS2017에서 빌드가 가능해야 함 Win10의 명령 프롬프트에서 실행가능해야 함. VS2019는 호환 문제때문에 비추천

서술실 과제/시험에 대비하여 A4답안을 스캔하여 pdf로 바꾸는 앱을 다운받아 설치하고 이의 사용법을 익히어두어야 함

주교재 : Assembly Language for Intel-Based Computers, 8th Ed.
부교재 : http://wps.pearsoned.co.uk/wps/media/access/Pearson_Default/16014/16399300/login.html

과제 관련 질문에서는 자신이 작성한 소스 코드를 보이지 말아야 함.

보충 온라인 강의도 필수 수강

알고리즘은 결국 머리에 어떻게 만들지가 그려져 있어야 한다.

Computer System


컴퓨터 시스템은 위와 같이 구성된다.

CPU : Central Processing Unit
IO devices : Input Output Devices
DISK : 저장장치
Memory : 프로그램과 데이터를 저장, SW 가 들어가 있음

Hardware가 인식하여 실행할 수 잇는 프로그램

  • 이진수로 구성된 command sequence = instruction sequence(binary number sequence로 구성됨, 이진수인 경우 machine instruction이라 부름 기능은 +,-,이동 등등)을 machine language라고 부름
  • Machine language program이라고 하며, 일일이 작성하기 매우 어렵다.

Assembly Language

  • Machine language를 Symbolized machine instruction으로 바꾼다.
  • 즉 machine instruction과 1:1 매칭(symbol assembly instruction)

    Machine language program을 비교적 쉽게 해주는 directive제공

컴퓨터가 할 수 있는 가장 적합한 일

  • 반복적인 작업

컴퓨터가 만능인가?

  • 현재, 컴퓨터는 프로그램을 통하여 사람이 시키는 일만 수행 한다.

컴퓨터 프로그램에서는 step-by-step의 단계적 과정으로 문제를 해결하고 이러한 방법을 알고리즘이라고 부른다.

1.1 Assembly Language Programming

  • 어셈블리 프로그램
    Assembly instruction으로 구성된 finite sequence

  • Assembly Instruction
    Machine Instruction(기계어)을 symbolize 한 것
    Machine Instruction(=machine language) : 컴퓨터가 이해하고 실행할 수 있는 가장 기본적인 이진수 형태의 명령

Instruction Set Architecture

computer architecture 분야

  • CPU에 적합하도록 설계된 최적의 instructions

  • Computer programming에 꼭 필요한 instruction들로 구성
    Data movement : instructions (register/memory 간의 데이터 이동)
    Arithmetic(산술 연산) instructions
    Logical(논리 연산, 조건 체크) instructions
    Control instructions(if, for등의 구현에 필요한 instructions)
    Input/Output instructions

  • 이러한 instruction들은 고수준 언어의 command들과 자연스럽게 매치된다.

  • 특히 C언어는 고수준 언어이면서도 어셈블리 언어와 가장 유사한 형태를 갖는 언어이다.

어셈블리 프로그램

  • 프로그램의 구성 요소인 어셈블리 instruction 자체는 이해하기 쉽다.
  • 그러나, instruction 각각이 가장 기본적인 일만 수행하기 때문에 간단한 문제를 위한 프로그램도 그 크기가 매우 크며 이해하기 쉽다.
  • 그래서 C, C++, JAVA, Python등과 같은 high level language들이 개발되어 널리 사용
  • 어셈블리 언어는 CPU dependent 하다
    즉 CPU, 운영체제마다 다른 어셈블리 언어가 존재할 수 있다.
    CPU가 달라지면 assemble 언어, cpu구조, programming skill 이해 필요

어셈블리 프로그래밍을 익히기

  • 이진수 이해하기
  • Instruction 이해하기
  • 어셈블리 언어에서 제공하는 directives, 매크로, operators, 프로그램 구조 등을 익혀야 한다.
  • 프로그래밍에 익숙해야 함

활용처

embeded programs(냉장고, 가전제품, 전화기 등등...)
Real-time applications
Computer game consoles

Why Learn Assembly Language?(중요)

embedded programs
computer hardware, OS, application programs간의 관계 이해(어셈블리를 사용)
몇몇 high-level 언어는 bit level code 필요. 함수를 assembly로 효율적으로 작성
device drivers(LAN, 기타 IO장치 구동하는 SW)

어셈블리 언어와 High-Level 언어와의 비교


1.2 Virtual Machines(중요)

HW와 SW의 관계를 설명할때 사용
machine language로 작성된 프로그램들을 L0라고 하자. 하지만 machine language로는 프로그래밍 하기 어려움 그래서 L1이라는 언어를 만들어서 프로그래밍하게 된다.


(대표적으로 왼쪽은 파이썬, 오른쪽은 C언어에서 주로 사용)

Interpretation : L1의 instruction을 L0의 instruction 글로 변환해서 인터프리터가 실행
Translation : L1 프로그램 전체를 L0 프로그램으로 바꾸고 컴파일러가 실행

virtual machine은 소프트웨어 프로그램 physical or virtual computer 기능을 emulate 한다.



어셈블리 코드를 예시로 들면 위와 같이 c언어도 일련의 숫자들로 이루어지게 된다.

A Specific Virtual Machine Levels


High-Level Language
L4 : C++, Java 등등
L3 : Assembly Language
L2 : Instruction Set Architecutre(ISA) machine language
L1 : CPU, Hardware


register set 각각의 데이터를 저장하기 위한 장치
IP(Instruction Pointer) = PC(Program Counter)

  • 메모리
    메모리안에 Instruction들이 들어가 있다. 그래서 PC, IP가 현재 실행할 instruction을 가리키고 있다.(address = pointer)

  • CPU

  1. Fetch an instruction : IP가 가르키는 것을 가지고 온다.
  2. Decode the instruction : Control Unit 에서 instruction을 해석하는 일을 한다.
    (instruction은 op code + data로 구성된다. 이때 op code를 해석하는 일을 해야한다.
  3. Fetch operands if any : data(operands)가 필요하면 주소와 함께 추가로 가지고 온다.
  4. Execute the instruction : ALU에 데이터를 넣어서 실행을 하게 된다.
  5. Store the result : 계산 결과를 레지스터나 메모리에 저장하게 된다.

Binary Numbers

우리가 다루게 되는 데이터는 모두 2진수이다. 이게 너무 어려우면 16진수로 바꾸어 사용할 수도 있다. 혹은 해석을 다르게 할 수도 있다.(정수, 실수, 문자 등등...)

각 digit(bit)가 0 또는 1인 수를 이진수라고 한다.
8 bit 이진수를 byte 또는 octet(통신)라고 부른다.

Boolean Operations

CPU 계산 모듈 ALU가 할 수 있는 일은 연산이다.
1. logical operation (nor, and, or ...)
2. arithemetic(+, -, * , /, %)







1/0 mapping

T, F는 논리적인 값이다.
일반적으로 T : 1, F : 0 으로 정의

드모르간 법칙

4x1 멀티플렉서

profile
예술가

0개의 댓글

관련 채용 정보