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
과제 관련 질문에서는 자신이 작성한 소스 코드를 보이지 말아야 함.
보충 온라인 강의도 필수 수강
알고리즘은 결국 머리에 어떻게 만들지가 그려져 있어야 한다.
컴퓨터 시스템은 위와 같이 구성된다.
CPU : Central Processing Unit
IO devices : Input Output Devices
DISK : 저장장치
Memory : 프로그램과 데이터를 저장, SW 가 들어가 있음
Hardware가 인식하여 실행할 수 잇는 프로그램
Assembly Language
컴퓨터가 할 수 있는 가장 적합한 일
컴퓨터가 만능인가?
컴퓨터 프로그램에서는 step-by-step의 단계적 과정으로 문제를 해결하고 이러한 방법을 알고리즘이라고 부른다.
어셈블리 프로그램
Assembly instruction으로 구성된 finite sequence
Assembly Instruction
Machine Instruction(기계어)을 symbolize 한 것
Machine Instruction(=machine language) : 컴퓨터가 이해하고 실행할 수 있는 가장 기본적인 이진수 형태의 명령
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언어는 고수준 언어이면서도 어셈블리 언어와 가장 유사한 형태를 갖는 언어이다.
embeded programs(냉장고, 가전제품, 전화기 등등...)
Real-time applications
Computer game consoles
embedded programs
computer hardware, OS, application programs간의 관계 이해(어셈블리를 사용)
몇몇 high-level 언어는 bit level code 필요. 함수를 assembly로 효율적으로 작성
device drivers(LAN, 기타 IO장치 구동하는 SW)
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언어도 일련의 숫자들로 이루어지게 된다.
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
우리가 다루게 되는 데이터는 모두 2진수이다. 이게 너무 어려우면 16진수로 바꾸어 사용할 수도 있다. 혹은 해석을 다르게 할 수도 있다.(정수, 실수, 문자 등등...)
각 digit(bit)가 0 또는 1인 수를 이진수라고 한다.
8 bit 이진수를 byte 또는 octet(통신)라고 부른다.
CPU 계산 모듈 ALU가 할 수 있는 일은 연산이다.
1. logical operation (nor, and, or ...)
2. arithemetic(+, -, * , /, %)
T, F는 논리적인 값이다.
일반적으로 T : 1, F : 0 으로 정의