5주차. [10] DATE : 2015-11

Download Report

Transcript 5주차. [10] DATE : 2015-11

시스템 프로그래밍
박진희
컴퓨터 시스템 연구실
어셈블리 프로그래밍 개요
고급 프로그래밍 언어
• 사람이 알기 쉽도록 작성된 프로그래밍 언어
• 가독성이 높고 다루기 간단함
• Basic, C, C++, Java
저급 프로그래밍 언어
• 컴퓨터 내부에서 바로 처리 가능한 프로그래밍 언어
• 성능이 뛰어나나 배우기 어려움
• 기계어, 어셈블리어
2
어셈블리 프로그래밍 개요
어셈블리어
• 특징
- 기계어를 사람이 알기 쉽도록 니모닉 기호로 일대일 대응시킨 저급
언어
- CPU의 종류에 따라 고유한 어셈블리어를 가짐
• 적용분야
- 하드웨어에 대한 정교한 제어가 필요한 응용 : 장치 드라이버, 로봇 제어
- 임베디드 시스템 : 가전제품등의 내장 프로그램
- 소프트웨어 최적화 : 성능 향상 및 메모리 사용량 최소화
- 고급언어를 사용할 수 없는 경우 : 시스템 초기화, ECU 제어
· ECU(Electronic Control Unit) : 자동차 엔진, 자동변속기, ABS 등의 상태를
컴퓨터로 제어하는
전자제어 장치
3
어셈블리 프로그래밍 개요
어셈블러 종류
• GAS : GNU Assembler
- GCC에서 사용하는 어셈블러
· GNU : GNU's Not UNIX, GCC : GNU Compiler Collection
- Dev-C/C++에 기본적으로 포함
- AT&T CPU 기반의 문법 사용
• NASM : Netwide Assembler
- BSD License에 따른 오픈소스 기반 어셈블러
- 기타 다른 어셈블러에 비해 문법이 쉬움
- 인텔 CPU 기반의 문법 사용
• MASM : Microsoft Macro Assembler
- Microsoft사의 어셈블러로써 Windows에서만 사용 가능
- MS Visual Studio 2005서부터 기본적으로 포함
- 인텔 CPU 기반의 문법 사용
4
어셈블리 프로그래밍 개요
어셈블리 명령어 기본 구조
• movl $20, %eax
- eax 레지스터에 값 20을 저장
- % : 레지스터를 지정
- $ : 값을 직접 지정
레지스터
• 8bit 용량의 데이터 저장공간
• 종류
- 범용 레지스터 : ax, bx, cx, dx
- 세그먼트 레지스터 : cs, ds, ex, ss
- 인덱스 레지스터 : si, di, ip
- 스택 레지스터 : bp, sp
- 특별 목적용 레지스터 : ip, flag
5
어셈블리 프로그래밍 개요
6
어셈블리 프로그래밍 개요
어셈블리 프로그램 구조 1
• eax 레지스터에 정수 저장 후 프로그램 종료
주석(// 가 아닌 #임에 주의)
.globl : 어셈블리 지시어, main을 링커가 인식하도록 해줌
main 함수 시작
eax 레지스터에 20을 저장
프로그램 종료
7
어셈블리 프로그래밍 개요
어셈블리 프로그램 구조 2
• eax 레지스터에 저장된 값의 factorial을 계산하여 ebx 레지스터에
저장
#eax에 저장된 값과 0을 비교
#0==eax 이면 L2로 건너뜀 ( je - jump if equal)
label
# ebx = ebx*eax
#eax 감소
# L1으로 무조건 건너뜀
8
어셈블리 프로그래밍 개요
어셈블리 프로그램 구조 3
• hello world 출력하기
9
어셈블리 프로그래밍 환경 구축
Dev-C/C++
• 다운로드
- http://sourceforge.net/projects/dev-cpp/files/Binaries/DevC%2B%2B%204.9.9.2/devcpp-4.9.9.2_setup.exe/download
- 설치 패키지에 따라서 make 명령어 및 gcc가 포함되어 있지 않으므로
확인 필요
- 버전 및 설치경로 확인
· 이 경로를 PATH 설정에 입력함
10
어셈블리 프로그래밍 실습
어셈블리 프로그램 환경 설정
11
어셈블리 프로그래밍 실습
어셈블리 프로그램 작성 1
• test1.s 파일 작성
• 작성은 Dev 편집기를 사용해도 되나, 컴파일은 console 창에서 실행
• 컴파일 명령어
- as –o test1.o test1.s
- gcc –o test1.exe test1.o
12
어셈블리 프로그래밍 실습
어셈블리 프로그램 작성 1
• test1.s 파일 작성
• 작성은 Dev 편집기를 사용해도 되나, 컴파일은 console 창에서 실행
• 컴파일 명령어
- as –o test1.o test1.s
- gcc –o test1.exe test1.o
13
어셈블리 프로그래밍 실습
어셈블리 프로그램 작성 1
• test1.s 파일 작성
• 작성은 Dev 편집기를 사용해도 되나, 컴파일은 console 창에서 실행
• 컴파일 명령어
- as –o test1.o test1.s
- gcc –o test1.exe test1.o
14
어셈블리 프로그래밍 실습
어셈블리 프로그램 작성 2
• test3.s 파일 작성
• hello world 출력하기
15
어셈블리 프로그래밍 실습
어셈블리 프로그램 작성 3
• test4.c 작성
• c언어 소스코드를 어셈블리 소스코드로 변환
- gcc –S test4.c
16
어셈블리 프로그래밍 실습
코드 비교
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
17