제 6장 8086 어셈블러 설계.

Slides:



Advertisements
Similar presentations
일정 관리 다이어리 제작 JSP Programming with a Workbook. 학습 목표  사용자의 일정을 관리할 수 있는 다이어리에 대하여 알아보자. JSP Programming with a Workbook2.
Advertisements

프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
천안천일고등학교 Copyright © by Ryu Bin All rights reserved 프로그래밍 실무.
예비보고서1 : 8개의 푸시버튼 스위치가 있다. 이 스위치에 각각 0~7개까지의 번호를 부여하였다고 하자
2.3.2 기호 정의문 EQU 프로그래머 기호 정의하고 그 값 지정 기호 정의 기호 값 예 기호 EQU 값
4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의
Database Laboratory, Hong Ik University
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제4장 어셈블리어.
Excel 일차 강사 : 박영민.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
연결리스트(linked list).
제 9 장 구조체와 공용체.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
Lecture #5 어셈블리어 (2) 매크로 어셈블리어 시스템프로그래밍.
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
제 7 장 링커와 로더 설계.
Lecture # 어셈블러 설계.
어셈블리 문법 보강 4월 10일.
System Programming 제1장 배경지식 시스템 프로그래밍.
컴퓨터 기본 원리 프로그래밍 언어 C 프로그래밍 환경 C 프로그래밍 작성, 컴파일, 링크 및 실행
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
4-1장. MySQL 제13장.
제 5장 매크로 프로세서 설계.
제 5장 매크로 프로세서 설계.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
FTP 프로그램 채계화 박재은 박수민.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Error Detection and Correction
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
제 6 장 8086 어셈블러 설계.
컴퓨터응용과학부 Java Enterprize(DB) 제 15 주
임베디드 실습 # LED, 7’Segment 제어
LCD 모듈의 특징 LCD 컨트롤러 내장으로 모든 디스플레이 기능을 명령어로 제어 8비트 혹은 4비트로 인터페이스
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
Method & library.
프로그래밍 개요
Chap 6.Assembler 유건우.
어셈블리어 (2) 매크로 어셈블리어 시스템 프로그래밍 - Lecture #4
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
27장. 모듈화 프로그래밍.
Device Driver 임베디드 시스템 I.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
UNIX Unbounded A Beginning Approach
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
CHAP 5. 레이아웃.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Lecture #9 매크로 프로세서 설계 & 구현.
제 9장 트랜스레이터.
10장 부프로그램 구현 순천향대학교 컴퓨터공학과 하 상 호.
컴퓨터 시스템 하드웨어 컴퓨터 시스템 소프트웨어 C P U Control Unit 입 력 장 치 출 력 장 치 ALU
자바 5.0 프로그래밍.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
계산기.
Fucntion 요약.
CHAP 21. 전화, SMS, 주소록.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
TVM ver 최종보고서
3.2 분기 명령어.
제 4 장 Record.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
CHAP 15. 데이터 스토리지.
 6장. SQL 쿼리.
Assembly 05 방호남 07 반지훈 09 박상욱.
6 객체.
Presentation transcript:

제 6장 8086 어셈블러 설계

제 6-1장 학습내용 어셈블러의 개요 레이블,외부기호,내부기호 개념 프로그램의 실행 과정 어셈블러,링커,로더의 역할 이중패스의 필요성 및 기능

어셈블러의 개요 어셈블리어 명령어의 번역 기계어와 일대일 대응으로 번역 작업과정이 컴파일러보다 간단 일반적으로 패스1과 패스2로 구성

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

어셈블러와 링커/로더 원시프로그램이 커지면 여러 개의 원시모듈로 나누어 작성 프로그램 및 유지보수가 용이 링커 : 여러 개의 목적모듈을 연결하여 적재모듈을 생성 로더 : 적재모듈을 주 기억장치에 적재

어셈블러와 링커/로더 어셈블러와 링커/로더를 분리한 이유 기억 장소의 낭비 시간 낭비 프로그램의 실행동안 어셈블러가 기억장소에 있어야 하므로 시간 낭비 번역된 목적 프로그램이 저장되어 있지 않으므로 실행시 마다 번역 과정을 수행

어셈블러의 입력과 출력 어셈블러는 링커와 로더가 필요로 하는 정보 제공 링크 로더 원시 모듈 어셈 블러 목적 외부참조 테이블 재배치시 변경할 주소 테이블

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

외부기호와 내부기호 외부기호(external symbol) * 외부 모듈에서 정의된 기호나 프로그램 이름 내부기호(internal symbol) * 같은 모듈에서 정의된 기호

외부기호 PUBLIC symbol[, …] EXTRN name:type[, …] 여기 프로그램을 외부사용자가 연결하여 수행하여도 좋다. EXTRN name:type[, …] 어떤 프로그램을 사용하고자 한다. 그 프로그램을 나의 프로그램과 연결시켜 프로그램을 완성하라.

외부기호 EXTRN name:type[, …] name : 데이터 세그먼트 내의 심볼 type : BYTE, WORD, DWORD.. name : procedure 이름 type : NEAR, FAR name : EQU, = 으로 정의된 상수 type : ABS

링커와 로더의 역할 링커의 역할 * 모듈들 간의 결합 * 외부기호의 주소값을 결정 로더의 역할 * 결합된 모듈의 적재 * 기호의 절대주소 결정

재배치의 개념 상대주소를 절대주소로 전환 재배치 정보는 어셈블러가 생성 로더는 재배치 정보이용 재배치는 재배치로더가 담당

이중패스의 필요성 전향참조의 경우 MOV AX,FOUR ADD AX,FIVE MOV SUM,AX ... FOUR DW 4 FIVE DW 5 SUM DW ?

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

제 6-1장 요약 어셈블러의 개념 이해 레이블, 외부기호, 내부기호 이해 프로그램의 번역과 실행 이해 이중패스의 필요성 및 기능 이해

제 6-2장 학습내용 어셈블러의 역할 패스1, 패스2의 기능 명령어의 상대주소와 기호표의 생성 프로그램의 적재와 어셈블러 지시어 패스1, 패스2의 알고리즘

0000 MAIN SEGMENT ASSUME CS:MAIN, DS: MAIN 0000 8C C8 MOV AX,CS 0002 8E D8 MOV DS, AX 0004 A1 0012 mov ax, four 0007 03 06 0014 add ax, five 000B A3 0016 mov sum, ax 000E B4 4C mov ah, 4ch 0010 CD 21 int 21h 0012 0004 four dw 4 0014 0005 five dw 5 0016 0001 sum dw 1 0018 MAIN ENDS END

어셈블러의 역할 명령어 처리 * 기호표의 작성 어셈블러 지시어 처리 * 지시어표 지시대로 처리 * 명령어에 상응하는 기계코드 생성 * 기호를 기호값으로 대체 어셈블러 지시어 처리 * 지시어표 지시대로 처리

패스1의 기능 명령어표를 참조 명령어들의 상대주소 결정 기호의 재배치 여부 결정 각 기호표 작성

패스2의 기능 명령어 자체를 2진코드로 대체 (교재의 경우 연상코드 사용) 명령어의 기호대신 기호표에서 찾은 값으로 대체

명령어의 상대주소 상대주소 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

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

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

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

어셈블러지시어의 역할 어셈블러가 해야할 역할 지정 FOUR DW 4 TEN EQU 10 상대주소 6에 4를 저장 번역되지 않음

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

패스1의 알고리즘 else { 기호는 기호표에 기입; LC의 값을 기호표에 기입; } LC ← LC + 명령어의 길이: end procedure

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

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

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

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

제 6-2장 요약 패스1과 패스2의 기능 이해 상대주소와 기호의 생성과정 이해 어셈블러지시어 이해 패스1과 패스2의 알고리즘 이해

제 6-3장 학습내용 패스1, 패스2의 순서도 패스1에 관련된 데이터베이스 패스2에 관련된 데이터베이스 단일패스 어셈블러의 처리과정

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

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

패스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 ...

단일패스 어셈블러 단순전향참조 JMP OVER의 처리 10 ADD AX, BX 12 JMP 0 14 MOV... ... 기호 값 확정표기 주소 OVER - 0 12 10 ADD AX, BX 12 JMP 0 14 MOV... ... 30 OVER MOV...

단일패스 어셈블러 다수전향참조처리 10 ADD AX, BX 12 JMP 0 14 MOV … 16 JMP 12 ... 기호 값 확정표기 주소 OVER - 0 20 10 ADD AX, BX 12 JMP 0 14 MOV … 16 JMP 12 ... 20 JMP 16 30 OVER MOV …

제 6-3장 요약 패스1, 패스2의 순서도 이해 패스1과 패스2에 관련된 DB 이해 명령어표의 구성 이해 단일패스 어셈블러 이해