4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의

Slides:



Advertisements
Similar presentations
제주특별자치도교육청. 목 차 일상생활 속에서의 정보보안 안전한 컴퓨터 사용  보안업데이트 자동설정  가짜 백신 프로그램 주의  믿을 수 있는 웹사이트만 접속  자동 로그인 기능 사용 안함  사용 후 반드시 로그아웃 확인 
Advertisements

03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
1 Prof. Young Jin Nam, Daegu University 컴퓨터 구조 (Computer Architecture) 명령어 세트 : 특성과 기능 남영진
제6장 조건문.
ISA 심화 및 start.S code 분석 SIOR 15th 최재훈.
Part01. 시스템 해킹을 위한 기초 지식 Chapter01. 운영체제에 대한 이해
9장 가로채기(Interrupt) Slide 1 (of 15).
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
제4장 어셈블리어.
제4장 어셈블리어.
기본 컴퓨터 프로그래밍 Lecture #6.
Lecture #12 인터럽트 Interrupt.
인터럽트 Interrupt 시스템 프로그래밍 - Lecture #8 신라대학교 컴퓨터공학과 시스템프로그래밍.
Lecture #5 어셈블리어 (2) 매크로 어셈블리어 시스템프로그래밍.
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
제 7 장 링커와 로더 설계.
제 1 장 마이크로프로세서의 기본동작.
1 PROJECT TITLE 기획 PAGE NO. 웹 페이지 구성 화 면 번호 화 면 설 명 연 결 화 면 L1 L4 L7
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
Lecture # 어셈블러 설계.
3장 MPU 내부구조 Slide 1 (of 28).
7장 마이크로프로세서의 명령어수행과 주소지정 방식 Slide 1 (of 29).
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
어셈블리 문법 보강 4월 10일.
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
+ 가상 메모리 -> 물리 메모리 Selector Offset DIR Page Segmetatation
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
Computer Architecture
제 5장 매크로 프로세서 설계.
제 5장 매크로 프로세서 설계.
리버스 엔지니어링 안녕하십니까? 리버스 엔지니어링 발표를 맡은 정창하입니다. 지금부터 리버스 엔지니어링 발표를
어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS 이 종 태
Chapter 06 명령어와 번지지정 방식.
제 6 장 8086 어셈블러 설계.
냉난방 시스템 설계 논리회로 설계 및 실험 텀 프로젝트 제안서 16조 김태광 정상훈.
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.
PLC.
제 2 장 변수와 상수.
제3장 8086 프로세서의 내부구조.
제 2장 컴퓨터동작의 기본 개념.
10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식.
명령어 구조 컴퓨터 하드웨어의 구성 프로그램 명령어 프로그램 실행 동작.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
명품 C++ 프로그래밍 1장. C++ 시작.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
adopted from KNK C Programming : A Modern Approach
제 장 학습내용 C 언어에서의 인터럽트 사용 레지스터를 위한 자료구조 인터럽트를 수행하기 위한 명령어
어셈블리어 (2) 매크로 어셈블리어 시스템 프로그래밍 - Lecture #4
Computer System Architecture
자전거를 배우려면 안장에 올라가 페달을 밟아라.
Lecture #9 매크로 프로세서 설계 & 구현.
3-16. 디지털 시계.
제 2 장 어셈블러(Assemblers) 2.1 기본 어셈블러 기능 단순 SIC 어셈블러
11장. 마이크로 프로세서 내부 구조.
파일 구조의 이해 PE Format 안녕하십니까
Chapter 4 변수 및 바인딩.
Lua script cpp서 사용하기 Lua 버전
4. 어휘 분석(Lexical analysis)
사업계획서.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자바 5.0 프로그래밍.
제4강 학습내용 인텔프로세서의 발전 과정 8086 프로세서와 80i86프로세서 개요 인텔 펜티엄 IV프로세서 개요
Finger-gesture 인식을 위한 가위바위보게임의 구현
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
세계영화사 입문 3강 소련영화의 혁명 소비에트 몽타주.
프로그래밍 기법 최적화 프로그래밍.
Presentation transcript:

4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의 코딩 => 어셈블링 => 링킹 => 실행 (원시코드) (목적코드) (실행코드) 어셈블리 언어 요소 설명문 (Comment) 예약어 (Reserved Word) 식별자 (Identifier) 문장 (Statement) 지시어 (Directive) 예제 프로그램 데이터 정의 주의 : 어셈블리 코드 작성시, 디버그와 다르게 숫자는 10진수를 나타냄. 16진수는 H (123H) 2진수는 B (1010B) 사용 MOV AX, 10

TITLE A04SAM1 Skeleton of an .EXE Program page 60, 132 TITLE A04SAM1 Skeleton of an .EXE Program STACKSG SEGMENT PARA STACK ‘Stack’ ………. STACKSG ENDS DATASG SEGMENT PARA ‘Data’ DATASG ENDS CODESG SEGMENT PARA ‘Code’ MAIN PROC FAR ASSUME SS:STACKSG, DS:DATASG, CS:CODESG MOV AX, DATASG ; Set address of data MOV DS, AX ; segment in DS … MOV AX, 4C00H ; End processing INT 21H MAIN ENDP CODESG ENDS END MAIN

언어 요소 설명문 예약어 세미콜론으로 시작되는 문장 판독성을 향상시키나 기계 코드로 번역되지 않음 예) ADD AX, BX ; Accumulate total quantity 예약어 명령어 (ADD, MOV, …) 지시어 (END, SEGMENT, …) 연산자 (FAR, NEAR, …) 미리 정의된 기호 (레지스터 이름, .STACK, …) 부록 C 참조

식별자 2가지 용도 정의 규칙 이름 (name): 데이터의 주소를 참조하기 위해서 사용 COUNTER DB 0 레이블 (label): 명령어, 프로시쥬어, 세그먼트의 주소를 참조 MAIN PROC FAR 정의 규칙 첫번째 문자는 알파벳이나 특수 문자(‘.’은 제외), 다음에는 알파벳, 디지트 혹은 특수 문자가 올 수 있다. 특수 문자: ‘?’, ‘_’, ‘$’, ‘@’, ‘.’ 어셈블러는 @로 시작되는 특수어를 사용한다. 식별자의 길이는 최대 31 대, 소 문자는 구분이 안된다. 예) TOTAL, QTY250, $P50

문장 문장의 유형 문장 형식 명령어(Instruction): 기계 코드로 번역된다. 지시어(Directive): 어셈블러의 특정 행동을 지시 문장 형식 식별자 연산 피연산자들 ;설명문 COUNT DB 1 ; define a byte with 0 P30 MOV AX, 0 ; move 0 to AX RET ; return INC BX ; increment BX by 1

지시어(directives) 용도 PAGE TITLE 프로그램이 어셈블되고 출력되는 방법을 제어하는 수단 어셈블리 과정에서만 사용; 기계 코드로 번역되지 않음 PAGE 형식: PAGE [길이] [, 너비] 프로그램의 출력 형태 지정: 길이는 페이지당 줄 수, 너비는 줄 당 문자 개수 디폴트 값: PAGE 50, 80 TITLE 형식: TITLE 텍스트 [설명문] 각 페이지의 두 번째 줄에 텍스트가 출력된다.

SEGMENT 지시어 name SEGMENT [ align ] [ combine ] [ ‘class’ ] ….. name ENDS align: 세그먼트가 시작되는 경계 명시(디폴트: PARA) combine: 링킹 단계에서 다른 세그먼트와의 결합 여부 명시 다른 어셈블된 프로그램과 결합하고자 할 때 사용 PUBLIC, COMMON, STACK / 생략 혹은 NONE class: 링킹 단계에서 관련된 세그먼트를 그룹화시킬 때 데이터, 코드, 스택 세그먼트에 대해서 각각 ‘data’, ‘code’, ‘stack’을 사용 예) name SEGMENT PARA STACK ‘Stack’

PROC 지시어 segname SEGMENT PARA procname PROC FAR ….. procname ENDP segname ENDS 코드 세그먼트는 한 개 이상의 프러시쥬어를 포함한다 프로시쥬어는 PROC 지시어로 정의된다 PROC의 피연산자 FAR는 이 프로시쥬어가 실행의 시작점으로 사용된다는 것을 알려준다 다른 프로시쥬어의 피연산자는 생략되거나 NEAR이다.

지시어 ASSUME END ASSUME SS:stackname, DS:datasegname, CS:codesegname, .. 각 세그먼트의 용도를 알려준다 SS:stackname은 스택 세그먼트 이름을 SS 레지스터에 연관시킨다는 것을 의미한다. END END [procname] 프로그램 전체에 대한 끝을 명시한다. procname은 FAR로 명시된 프로시쥬어 이름이다 프로그램이 데이터 정의만을 포함할 경우에는 procname이 생략된다

DS 초기화 MOV AX, DATASG MOV DS, AX 프로그램 시작시 제일먼저 반드시 실행 CS와 SS를 초기화시키지 않은 이유 EXE. 프로그램을 적재시킬 때, 로더가 CS:IP, SS:SP를 초기화하나 DS, ES를 초기화하지 않기 때문 이때 DS, ES는 무슨 값을 가지고 있는가?

프로그램 종료 MOV AH, 4CH MOV AL, 00 INT 21H AH에는 인터럽트 처리기의 함수 코드가 저장된다. 위의 두 MOV는 한 개의 MOV로 표현될 수 있다:

예제 프로그램: 4-2

간단한 세그먼트 지시어 메모리 모델을 먼저 초기화한다 .MODEL 메모리-모델 모델 코드 세그먼트 수 데이터 세그먼트 수 모델 코드 세그먼트 수 데이터 세그먼트 수 TINY * * (.com용) SMALL 1 1 MEDIUM 1개 이상 1 COMPACT 1 1개 이상 LARGE 1개 이상 1개 이상

간단한 세그먼트 지시어 세그먼트 정의 지시어 ASSUME 지시어는 자동으로 생성 .STACK [크기] .DATA .CODE [이름] 디폴트 세그먼트 이름: STACK, _DATA, _TEXT 새로운 코드 세그먼트 이름 부여 가능 스택의 디폴트 크기는 1,024 바이트 DS 초기화 코드 변경 MOV AX, @data MOV DS, AX ASSUME 지시어는 자동으로 생성 따라서 프로그램에서 ASSUME 지시어 불필요

예제 프로그램: 4-3

데이터 정의 name Dn expression Dn: DB, DW, DD, DF, DQ, DT BYTE, WORD, DWORD, FWORD, QWORD, TWORD 식(expression) FLDA DB ? FLDB DB 25 FLDC DB 21, 22, 23, 24, 25, 26, …; MOV AL, FLDC + 3 DW 10 DUP(?) ; 20바이트 정의 DB 5 DUP(12) ; 12를 5번 반복(5바이트) DB 3 DUP(5 DUP(4)) ; 모두 4로 15바이트

문자 스트링 표현 스트링은 단일 인용 부호나 이중 인용 부호로 표현 3개 이상의 문자로 구성된 스트링은 반드시 DB로 정의 스트링은 ASCII 코드 형태로 메모리에 저장된다 DB ‘PC’ DB “PC” DB ‘Strawberry Jam’ DB “Crazy Sam’s CD Emporium” DB ‘Crazy Sam’’s CD Emporium”

수치 상수 이진수: 수치 다음에 B가 명시된다 십진수: D 혹은 생략 16진수: H, 첫번째 디지트는 반드시 0 ~ 9 예제: 3DH, 0DE8H 어셈블러는 모든 수치 값을 이진수로 변환하고, 이를 16진법으로 표현한다. 즉, 12, hex C, 1100은 동일한 값을 생성한다 문자와 수치 상수간의 차이 예) DB ‘24’ DB 24

데이터 정의 지시어 데이터 정의 단위 지시어 byte DB word DW double word DD farword DF 데이터 정의 단위 지시어 byte DB word DW double word DD farword DF quadword DQ ten bytes DT * 주의: 수치 상수는 2진수로 변환, 16진수로 표현, 역순으로 저장된다는 것에 주의. 예) DW 12345D  3039H  DD 12345678D  00BC614EH 

데이터 정의 지시어 DT Fig 4-4: 문자 스트링과 수치 값들의 정의 Fig 4-5: Fig 4-4의 데이터가 저장된 형태 packed BCD 수치 값을 정의하는데 사용 수치 상수를 16진수가 아닌 십진수로 저장 예) 12345678  Fig 4-4: 문자 스트링과 수치 값들의 정의 Listing의 내용은 DW, DD의 경우 반전 안 함. Fig 4-5: Fig 4-4의 데이터가 저장된 형태

EQU 지시어 C의 매크로(#define)와 같은 것을 정의한다. 어셈블러는 매크로를 정의된 값으로 대체한다. 예) FACTOR EQU 12 TABLEX DB FACTOR DUP(?) LIMITX EQU 25 …. MOV CX, LIMITX TOTSALES DW 0 TS EQU TOTSALES MPY EQU MUL

어셈블링 .LST 파일: .CRF 파일 오류 진단 어셈블 결과로, 번역된 기계 코드와 소스 코드를 보여준다 스택 세그먼트 데이터 세그먼트 코드 세그먼트 세그먼트와 그룹 테이블 심볼 테이블 Fig. 5-2, Fig. 5-4 .CRF 파일 프로그램에 정의된 심볼들에 대한 리스트를 보여준다. Fig. 5-5 오류 진단

링킹 역할 여러 어셈블 모듈을 한 개의 실행 모듈로 결합 .EXE 실행 모듈을 생성하고 초기화한다 링크 맵 생성

연습문제