Lecture #10 8086 어셈블러 설계.

Slides:



Advertisements
Similar presentations
내 마음의 버 스 이천신하교회 청년부. 이름 : 한상훈 나이 : 30 살 종교 : 기독교 ( 모태신앙 ) 생활신조 : 인생은 한방 ! 로또나 사자 이상형 : 청순 가련한 모태미녀 특이사항 : 걸그룹 노래에 환장함 식스팩을 갖기엔 슬픈 몸을 타고 남.
Advertisements

독서골든벨 2009 학년도 6 학년 1 학기 6-10 반. 1. 이야기 삼국유사 정대한 원효대사는 수행을 위해 떠나던 중 피곤하여 숲 속에서 잠이 들었다. 잠결에 너무 목이 마른 나머지 어디에 담겨있는 물을 맛있게 마셨나요 ?
두 손 들고 두 손 들고 찬양합니다 두 손 들고 찬양합니다 다시 오실 왕 여호와께 다시 오실 왕 여호와께 두 손 들고 찬양합니다 두 손 들고 찬양합니다 다시 오실 왕 여호와께 다시 오실 왕 여호와께 오직 주만이 나를 다스리네 오직 주만이 나를 다스리네 나 주님만을.
한울농원.  1. 암 수 다른 나무이다.  2. 병충해가 없다.  3. 수명이 길다.  4. 체질이 강건하여 잘 자란다.  5. 가시가 길고 크다.  6. 가을에 붉은 열매를 수확한다.  7. 나무가 단단하고 잘 부러지지 않는 다.
지금은 기도 하는 시간입니다 1. 송구영신예배를 위해서 2. ‘크리스마스 이브’ 행사를 준비하는 교육 기관을 위하여
上海華東師大 연수설명회.
PGS 후기 헛 !.
Shellcode 작성 김영성.
현대사회의 여성문제와 여성복지 3조 권경욱 강향원 황대인 변갑수 박창욱 김지현.
4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
고교평준화의 득과 실 김영주 이지영 최윤영.
유대력과 성서력 유대 절기.
제4장 어셈블리어.
제4장 어셈블리어.
기본 컴퓨터 프로그래밍 Lecture #6.
알기 쉽게 해설한 Java 8th edition
Lecture #12 인터럽트 Interrupt.
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
제 7 장 링커와 로더 설계.
제 3 장 로더와 링커(Loaders and Linkers)
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
PowerPC ABI 김종화.
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
Computer Architecture
누구나 즐기는 C언어 콘서트 제2장 기초 사항.
제 5장 매크로 프로세서 설계.
제 5장 매크로 프로세서 설계.
어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS 이 종 태
Chapter 06 명령어와 번지지정 방식.
제 6 장 8086 어셈블러 설계.
제 6장 8086 어셈블러 설계.
2010년 직원연수 자료 제1차 : 4월 16일 ~ 17일 제2차 : 4월 23일 ~ 24일
제 1장 시스템 소프트웨어의 개요.
임베디드 소프트웨어 설계.
10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식.
명령어 구조 컴퓨터 하드웨어의 구성 프로그램 명령어 프로그램 실행 동작.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
명품 C++ 프로그래밍 1장. C++ 시작.
제1장 시스템 소프트웨어의 개요 컴퓨터시스템 및 하드웨어 구성 컴퓨터의 구성과 기능 시스템프로그램의 개요
Buffer Overflow
컴퓨터 시스템 개관 시스템 프로그래밍 - Lecture #1 신라대학교 컴퓨터공학과 시스템 프로그래밍.
Sequence Logic.
프로그래밍 보고서 작성법 순천향대학교 컴퓨터공학과 하 상 호.
기억장치 관리(Memory Management)
운영체제 (Operating Systems) (Memory Management Strategies)
연구를 위한 준비 참고문헌 카드 만들기.
과거사 청산, 밝은 미래를 위하여 역사 청산 비교 분석-독일과 우리나라.
Lecture #9 매크로 프로세서 설계 & 구현.
제 2 장 어셈블러(Assemblers) 2.1 기본 어셈블러 기능 단순 SIC 어셈블러
                              데이터베이스 설계 및 실습 #4 - loadcompany 만들기 한국외국어대학교 DaPS 연구실                              
루브르 박물관 작품 Review 웹 기획을 하는 방법 이라기 보단 더 잘하기 위한 노력이 중요하다.
4.DECODE 함수를 이용한 IF 처리의 효율화
쉽게 풀어쓴 C언어 Express 제2장 프로그램 개발 과정 C Express.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
수학8가 대한 108~110 쪽 Ⅴ. 부등식 2. 일차부등식 §1.일차부등식의 풀이(5/10) 일차부등식의 풀이.
세일즈의 원칙과 기술.
세계영화사 입문 3강 소련영화의 혁명 소비에트 몽타주.
Report #4 (1) (due 4/4) 문제 #1 3개의 막대 A, B, C와 원판 n개를 전달받아 Hanoi 탑 문제를 해결하는데 필요한 원판의 이동 회수를 구하여 반환하는 hanoi_tower(n, A, B, C)를 작성하라. 여기서 원판 n은 막대 A에 쌓여 있고.
볼링 지도 – 학습 과정안.
찬양의 힘 – 시 135:1~3.
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
나-는 믿음으로 주 얼굴 보리니- 아침에 깰 때에 주형상에 만족하리 나주님 닮기 원하네 믿음으로 주얼굴 보리라 -
제 10 장  코드 생성.
프로그래밍 기법 최적화 프로그래밍.
4-1. 명령어 형식.
Report #3- 문제 1 Set(집합) 추상 데이터 타입을 정의하고, 다음과 같은 연산자들을 포함시켜라. 여기서 S, S1, S2는 집합을 나타내고, i는 집합 원소를 나타낸다. 연산 의미 create() Return {} insert(S, i) If i є S then.
Presentation transcript:

Lecture #10 8086 어셈블러 설계

학습내용 어셈블러의 개요 이중 패스 어셈블러의 필요성 및 기능 패스-1 & 패스-2의 알고리즘 어셈블러, 링커, 로더의 역할 이중 패스 어셈블러의 필요성 및 기능 어셈블러의 역할 패스1, 패스2의 기능 명령어의 상대주소와 기호표의 생성 패스-1 & 패스-2의 알고리즘 패스-1 & 패스-2와 관련된 데이터베이스 단일 패스 어셈블러의 처리과정

어셈블러의 개요 어셈블리 명령어의 기계어 코드 번역 일반적으로 이중 패스(패스1 & 패스2)로 구성 기계어와 일대일 대응으로 번역 작업과정이 컴파일러보다 간단 입력- 어셈블리 소스 프로그램 출력- 목적 코드 파일(Object Code File) 일반적으로 이중 패스(패스1 & 패스2)로 구성 어셈블리 프로그램에서 변수 및 상수에 대한 전향 참조(Forward Reference)를 허용 패스1 과정 – 변수 및 상수에 대한 심볼 테이블 구성 패스2 과정 – 어셈블리 명령어를 기계어 코드로 변환

프로그램의 작성 및 실행 과정 원시 모듈 목적 모듈 적재모듈 목적모듈 원시 모듈 목적 모듈 링커 원시 모듈 목적 모듈 컴파일러 어셈블러 원시 모듈 목적 모듈 적재모듈 목적모듈 컴파일러 어셈블러 원시 모듈 목적 모듈 링커 원시 모듈 컴파일러 어셈블러 목적 모듈 주기억장치 로더 실행

어셈블러의 역할 어셈블리 원시 프로그램 모듈을 입력으로 받아 독립적으로 번역하여 목적 프로그램 모듈을 생성 후처리(링커 & 로더)에 필요한 형식에 맞추어 목적 모듈을 생성 번역 과정 원시 프로그램내의 어셈블리 명령어를 기계어 코드로 변환 내부 참조 기호에 대해서는 주소 변환을 수행 다른 모듈의 기호에 대한 외부 참조(external reference)에 대해서는 링커의 링킹(linking) 처리를 위해 정보를 생성하여 치환

외부 참조 변수는 링킹 정보로 변환, 링커에 의해 주소로 변환 명령어와 기호(Symbol) 어셈블리 명령어는 기계어로 변환 MOV AX,FOUR ... FOUR DW 40 MAIN CALL CLRMEM CLRMEM PROC MOV AX,BX CLRMEM ENDP … ① 내부 참조 변수는 모듈 내의 상대 주소로 변환 … ② 외부 참조 변수는 링킹 정보로 변환, 링커에 의해 주소로 변환

링커와 로더의 역할 링커(Linker)의 역할 로더(Loader)의 역할 목적 모듈들을 결합하여 적재 모듈(Load Module)을 생성 적재 모듈 생성시에 여러 모듈들의 상대적인 위치를 결정 하여 배열 외부 기호의 상대적인 주소값을 결정하여 외부 참조 부분을 치환한다 생성된 적재 모듈은 재배치 가능(Relocatable) 로더(Loader)의 역할 실행을 위하여 적재 모듈을 메모리에 적재 프로그램의 상대 주소에 대해 절대 주소가 결정

재배치(Relocation)의 개념 프로그램의 주소 공간은 메모리에서 적재되는 위치에 따라 달라진다 프로그램내의 주소는 상대 주소를 이용하여 표현 프로그램을 적재하여 실행할 때에 상대주소를 절대주소로 전환하여 사용 재배치 정보는 어셈블러가 생성 로더는 재배치 정보이용 재배치는 재배치 로더(Relocation Loader)가 담당

어셈블러, 링커, 로더의 역할 로더 목적모듈 AA 원시모듈 AA 어셈 블러 MOV...... ......... 원시모듈 BB (상대주소)(목적코드) 0 MOV ... 2 ....... ... . 11 MOV...... ......... 원시모듈 BB 목적모듈 BB 어셈 블러 ADD...... ......... (상대주소)(목적코드) 0 ADD ... 2 ....... ... . 5 기억장치 물리주소 적재모듈 (상대주소)(목적코드) 0 MOV ... 2 ....... ... 12 ADD ... 100 MOV.... ... ADD.... 링 커 102 로더 112 ... 117

이중 패스 어셈블러 이중 패스 처리의 필요성 MOV AX,FOUR ADD AX,FIVE MOV SUM,AX ... 어셈블리 프로그램에서 변수 및 상수 그리고 프로시저에 대한 전향 참조(Forward Reference)를 허용 전향 참조 예: MOV AX,FOUR ADD AX,FIVE MOV SUM,AX ... FOUR DW 4 FIVE DW 5 SUM DW ?

이중 패스 어셈블러의 기능 기호표 리터럴테이블 목적 프로그램 원시 프로 그램 원 시 프로그램 사 본 패스-1 패스-2 링커 원 시 프로그램 사 본 패스-1 패스-2 링커 오류 및 기타 정보 원시프로그램 오류정보 등 명령어표

어셈블러의 동작 어셈블리 명령어 번역 어셈블러 지시어 처리 기호표(Symbol Table) 작성 어셈블리 명령어에 상응하는 기계어 코드 생성 기호를 주소값으로 변환 어셈블러 지시어 처리 지시어표(Assembler Directive Table) 지시대로 처리 e.g) DW, EQU 등

패스-1의 기능 명령어표(Instruction Table)를 참조하여 명령어와 데이터의 상대 주소를 결정 상대 주소를 추적하기 위해 위치 계수기(LC:Location Counter) 변수를 사용 기호표(Symbol Table) 작성 프로그램 내에서 사용한 기호와 이를 대치할 주소값을 가진 기호표를 작성 기호의 재배치 여부 결정하여 기호표 내에 명시

명령어의 상대주소 상대주소 2 4 6 8 10 원시 코드 MOV AX,FOUR ADD AX,FIVE MOV SUM,AX 2 4 6 8 10 원시 코드 MOV AX,FOUR ADD AX,FIVE MOV SUM,AX FOUR DW 4 FIVE DW 5 SUM DW ? END LC 변수를 이용하여 상대 주소를 trace

기호표의 생성 기호 FOUR FIVE SUM 값(주소) 6 8 10 재배치 여부 1

패스-2의 기능 명령어표를 이용하여 명령어 자체를 2진 코드로 대체 기호의 전향 참조에 대해 기호표에서 찾은 주소값으로 대체 교재의 경우 연상코드 사용 기호의 전향 참조에 대해 기호표에서 찾은 주소값으로 대체 내부 참조 변수에 대해 모듈 내의 상대 주소로 변환 외부 참조 변수에 대해 링킹 정보로 변환  링커에 의해 상대 주소로 변환

번역된 코드의 형태 상대주소 번역된 코드(연상기호) MOV AX, [6] 2 ADD AX, [8] 4 MOV [10], AX 2 4 6 8 10 번역된 코드(연상기호) MOV AX, [6] ADD AX, [8] MOV [10], AX 4 5 -

기억장치에 적재된 형태 주기억장치 100 102 104 106 108 110 MOV AX, 106 ADD AX, 108 5

어셈블러 지시어의 역할 어셈블러가 번역과정에서 수행할 기능을 지정 예 1) FOUR DW 4 예 2) TEN EQU 10 상대주소 6에 4를 저장하고 번역되지는 않음 예 2) TEN EQU 10 TEN의 값으로 10을 저장, 10은 주소가 아니며 상수(재배치할 필요가 없음)

패스-1 과정의 알고리즘 (1) Procedure pass_1 { LC ← 0; repeat { 다음 명령어를 읽음; if (END 명령어?) 패스1끝; if (기호가 있는가?) { if (이미 기호표에 존재?) 이중 기호이므로 오류표시;

패스-1의 알고리즘 (2) else { 기호는 기호표에 기입; LC의 값을 기호표에 기입; } LC ← LC + 명령어의 길이: } until (EOF(source_file))

어셈블러 지시어의 처리 (1) if (어셈블러 지시어?) { if (EQU) { 기호를 기호표에 기록; 지시어값을 기호값으로 대체; } if (DW<값>) { 주어진 값만큼 LC증가;

어셈블러 지시어의 처리 (2) if (DW<?>) { 확보할 크기 계산 후 LC증가; } else { 명령어표에서 명령어 길이 탐색; LC ← LC + 명령어의 길이:

패스-1 순서도  패스1시작 위치계수기 LC←0 다음 명령어를 읽음 기호를 기호표에 기입 LC값을 예 기호값으로 기입 패스1끝 명령어:END 아니오 아니오 기호정의가 있는가? 예 아니오  예 이미기호 표에 존재 이중으로 정의한 기호 오류표시 LC←LC+명령어의 길이

패스-1 순서도 예 어셈블러 지시어 어느 종류? 아니오 EQU DW 값 DW ? 명령어표에서 명령어 길이를 찾음 기호를 기호표에 기입하고 이 지시어의 값을 기호의 값으로 한다 주어진 데이터의 크기만큼 LC를 증가시킴 확보해야 할 기억장소의 크기를 계산하여 LC를 증가시킴 LC←LC + 명령어의 길이

패스-2의 알고리즘 (1) Procedure pass_2 { LC ← 0; repeat { 다음 명령어를 읽음; if (END 명령어?) 어셈블 끝; if (명령어가 명령어표에 있는가?) { 명령어표에서 기계어코드를 찾음; 기호표에서 기호의 값을 찾음;

패스-2의 알고리즘 (2) 명령어를 기계어코드로 완성 LC ← LC + 명령어의 길이; } else 정의되지 않은 명령어 오류표시; } Until(EOF(source_file))

패스-2 순서도  패스2시작 위치계수기 LC←0 다음 명령어를 읽음 예 명령어:END 패스2끝 아니오 정의되지 않은 명령어, 오류표시 명령어가 명령어표에 있는가? 아니오 예 명령어에서 기계어 코드를 찾음  명령어를 기계어 코드로 완성하여 출력 기호표에서 기호값을 찾음 LC←LC+명령어의 길이

패스-2 순서도 어느 종류? 예 어셈블러 지시어 EQU 아니오 DW <값> DW ? 연상항에 주어진 확보해야 할 명령어표에서 명령어 길이를 찾음 DW <값> DW ? 연상항에 주어진 상수값을 기계어 코드로 출력한다 확보해야 할 기억공간의 크기 결정 기호표에서 기호값을 찾음 명령어를 기계어 코드로 완성하여 출력한다 LC←LC+ 데이터 크기 LC←LC+ 확보해야 할 공간 크기 LC←LC+명령어의 길이

패스-1 관련 데이터 구조 입력 출력 원시프로그램 기호표 위치계수기(변수) 리터럴표 어셈블러지시어표 오류정보 명령어표 윈시프로그램 사본

명령어표의 예 2진코드 길 이 2 연상 코드 ADD MOV ... 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 d w mod reg r/w 2 1 0 0 0 1 0 d w mod reg r/w ...

패스-2 관련 데이터 구조 입력 출력 원시프로그램 위치계수기(변수) 어셈블러지시어표 명령어표 기호표 리터럴표 목적 프로그램

단일 패스 어셈블러 (1) 단일 패스를 이용한 단순전향참조 해결 어셈블리 명령어 번역과 기호에 대한 정보 수집을 동시에 수행 기호 위치에 후처리(Postprocessing)를 위한 표시 처리 기호표(Symbol Table)에 후처리 위치 정보를 저장 번역과정을 끝나면 기호표의 정보를 이용하여 후처리를 수행 기호 위치에 기호값, 즉 주소값을 대치 다수 전향 참조도 처리 가능

단일 패스 어셈블러 (2) 기호 값 확정표기 주소 10 ADD AX, BX OVER - 0 12 12 JMP OVER 기호 값 확정표기 주소 OVER - 0 12 10 ADD AX, BX 12 JMP OVER 14 MOV... ... 20 JMP OVER 30 OVER MOV... 10 ADD AX, BX 12 JMP 0 ...

단일 패스 어셈블러 (3) 기호 값 확정표기 주소 10 ADD AX, BX OVER - 0 20 12 JMP OVER ... 20 JMP 12 기호 값 확정표기 주소 OVER - 0 20 10 ADD AX, BX 12 JMP OVER 14 MOV... ... 20 JMP OVER 30 OVER MOV...

단일 패스 어셈블러 (4) 10 ADD AX, BX 기호 값 확정표기 주소 12 JMP OVER OVER - 0 20 14 MOV... ... 20 JMP 30 30 OVER MOV... 기호 값 확정표기 주소 OVER - 0 20 10 ADD AX, BX 12 JMP 0 ... 20 JMP 12 30 OVER MOV... 기호 값 확정표기 주소 OVER - 0 12

단일 패스 어셈블러 (5) 10 ADD AX, BX 기호 값 확정표기 주소 12 JMP 30 OVER - 0 12 14 MOV... ... 20 JMP 30 30 OVER MOV... 기호 값 확정표기 주소 OVER - 0 12 10 ADD AX, BX 12 JMP 0 ... 20 JMP 30 30 OVER MOV... 기호 값 확정표기 주소 OVER - 0 0