8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.

Slides:



Advertisements
Similar presentations
- 1 - IT COOKBOOK 컴퓨터 기술 IT COOKBOOK Chapter 01. 서론.
Advertisements

1 Prof. Young Jin Nam, Daegu University 컴퓨터 구조 (Computer Architecture) 명령어 세트 : 특성과 기능 남영진
Family 의 개요 의 외부 Pin 기능과 내부 기능 Memory 구조 Timing 2 장 8051 의 구조.
1/37 Chapter 4: 프로세서 성능과 휴대성을 위한 하드웨어 © The McGraw-Hill Companies, Inc., 세기의 가장 중요한 발명품 : 마이크로 프로세서 일상생활에 널리 사용됨 프로그램에 의한 적응성.
컴퓨터의 구조 2006년 2학기 컴퓨터의 개념 및 실습.
2.1 컴퓨터 시스템의 구성 2.2 컴퓨터 시스템의 정보 표현 2.3 중앙처리장치 2.4 저장장치 2.5 컴퓨터 주변기기
Understanding of Ubiquitous & Computers Plus
마이크로 컨트롤러 Microcontroller.
Chapter 9. 컴퓨터설계기초 9-1 머리말 9-2 데이터 처리장치 (Datapath)
2007년 1학기 전산학개론 성신여자대학교 컴퓨터정보학부
PC와 인터넷 정강수 컴퓨터 구조와 웹의 이해 PC와 인터넷 정강수
컴퓨터 하드웨어 Computer Hardware
Part01. 시스템 해킹을 위한 기초 지식 Chapter01. 운영체제에 대한 이해
2장 마이크로프로세서 구성요소 Slide 1 (of 19).
제 2장 컴퓨터 구조.
마이크로프로세서(Microprocessor,µP)
컴퓨터 과학 개론 √ 원리를 알면 IT가 맛있다 컴퓨터 과학도를 위한 첫 전공서 ehanbit.net.
기본 컴퓨터 프로그래밍 Lecture #6.
컴퓨터 과학 개론 √ 원리를 알면 IT가 맛있다 컴퓨터 과학도를 위한 첫 전공서 ehanbit.net.
2 Part 전자계산기 구조 1. 논리 회로 2. 자료 표현 및 연산 3. 명령어 및 프로세서 4. 명령 수행 및 제어 5.
Lecture #12 인터럽트 Interrupt.
10장 주변장치 (PIO) Slide 1 (of 28).
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제 1 장 마이크로프로세서의 기본동작.
3장 MPU 내부구조 Slide 1 (of 28).
임베디드 하드웨어 Lecture #6.
컴퓨터 구조학 정보보호학과.
컴퓨터 구조론 2001년 10월 22일 발표자 황영선.
DSP와 TMS320F28x의 이해.
6장. 기 억 장 치 Lecture #6.
7장 마이크로프로세서의 명령어수행과 주소지정 방식 Slide 1 (of 29).
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
컴퓨터 구조.
Chapter 02 시스템 구조(System Structure)
1 컴퓨터 시스템 소개.
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
직업 형태 변화 과정 일자리의 변화 ERP (Enterprise Resource Planning) 구분 18~19 세기
+ 가상 메모리 -> 물리 메모리 Selector Offset DIR Page Segmetatation
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
운영체제 (OS: Operating System)
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
Chapter 10. Interrupt.
1 마이크로프로세서의 원리 마이크로컨트롤러 AVR ATmega128.
Chapter 7. Pentium Processor
정보(information) 데이터(data) 어떤 사물에 대한 소식이나 자료 가공된 데이터
리버스 엔지니어링 안녕하십니까? 리버스 엔지니어링 발표를 맡은 정창하입니다. 지금부터 리버스 엔지니어링 발표를
어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS 이 종 태

6 중앙처리장치의 조직과 기능 IT CookBook, 컴퓨터 구조와 원리 2.0.
컴퓨터 시스템의 개요.
3주 컴퓨터구조.
제3장 8086 프로세서의 내부구조.
제 2장 컴퓨터동작의 기본 개념.
Computer System Architecture
Chapter 4 The Von Neumann Model.
Buffer Overflow
제 장 학습내용 C 언어에서의 인터럽트 사용 레지스터를 위한 자료구조 인터럽트를 수행하기 위한 명령어
컴퓨터 시스템 개관 시스템 프로그래밍 - Lecture #1 신라대학교 컴퓨터공학과 시스템 프로그래밍.
Computer System Architecture
6-1 중앙 처리 장치의 내부 구조 6-2 명령(instruction) 6-3 주소 지정 방식
1 컴퓨터 구조 IT CookBook, 컴퓨터 구조와 원리 2.0.
Chapter 12 Memory Organization
11장. 마이크로 프로세서 내부 구조.
Lecture #6 제5장 기억장치 (1).
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
제4강 학습내용 인텔프로세서의 발전 과정 8086 프로세서와 80i86프로세서 개요 인텔 펜티엄 IV프로세서 개요
임베디드 하드웨어 Lecture #6.
Lecture 7 7-Segment LED controller using u-controller
제 1 강 컴퓨터의 구조.
Presentation transcript:

8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍

컴퓨터 구조(1) 컴퓨터 시스템의 기본 구성 프로세서(Processor) – CPU 기억장치(Memory) RAM(Random Access Memory) ROM(Read Only Memory) 입출력장치(I/O Devices) Keyboard, Mouse, Monitor, Printer 등 Hard Disk, CD-ROM 등 Network Interface Card 시스템 버스(System Bus) Data Bus Address Buss Control Bud 신라대학교 컴퓨터공학과 시스템 프로그래밍

컴퓨터 구조(2) 기본 구성 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서(Processor) (1) Intel x86 Microprocessors(표 3.1 참조) 8086 8088 80186 80286 80386 80486 Pentium-I Pentium-II Pentium-III 등 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서(Processor) (2) 8086 프로세서의 구조 명령어 실행 장치(EU: Execution Unit) 산술논리 연산장치(ALU: Arithmetic Logic Unit) EU 제어 시스템(EU Control System) 범용 레지스터(General Purpose Registers) 플래그 레지스터(Flag Register) 버스 인터페이스 장치(Bus Interface Unit) 명령어 포인터(Instruction Pointer) 세그먼트 레지스터(Segment Register) 주소 계산기(Address Adder) 명령어 큐(Instruction Queue) 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서(Processor) (3) – 8086 Processor 구조 (1) 포인터 레지스터(Pointer Register) a) 스택 포인터(SP:Stack Pointer) : 스택 조작을 위해서 사용하는 레지스터로서 프로그램 실행 중에 데이타의 저장 주소를 기억하고 있는 레지스터이다. 스택은 기억 장치내의 어떠한 영역을 지칭한다. 이 스택을 이용하여 데이타를 저장하고 인출 할 때는 가장 나중에 저장한 데이타를 먼저 인출하게 된다. 이와 같은 순서로 입출력을 하는 방법을 LIFO(Last-In-First-Out)이라 한다. 반면에 입력된 순서대로 출력되는 방법은 FIFO(First-In-First-Out)이라 한다. FIFO의 대표적인 예는 먼저 도착한 손님을 먼저 서비스해주는 일반적인 대기행렬(queue)이 있다. b) 베이스 포인터(BP:base pointer) : 기본적으로 스택 영역 내의 주소를 지시하지만 스택 세그먼트 SS영역내에 배치한 데이타에 대한 베이스 주소를 저장해 두기 위해 사용된다. (2) 인덱스 레지스터(Index Register) 데이타의 주소를 나타내기 위해 사용하며 두가지 레지스터 SI, DI가 있다. 특히 스트링 명령에서 선두 데이타로 되는 스트링의 선두 주소를 SI 레지스터에, 출력 대상이 되는 선두 주소를 DI 레지스터에 설정해서 명령을 실행하도록 결정하고 있다. a) SI(Source Index Register) : 연산항 소스, 소스 데이타 지정에 사용된다. b) DI(Destination Index Register) : 연산항의 처리 대상, 또는 목적항 데이타를 나타내는데 사용된다. 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서(Processor) (4) 8086 프로세서 칩 구성 어드레스/ 세그먼트 정보 데이터/ 어드레스버스 논리마스커블 프로세서가 일을 하는데 필요한 데이타는 보통 기억장치(RAM)에 기억하여 사용한다. 그러나 이 방법은 앞에서 소개된 판독 사이클과 기록 사이클을 사용하는데, 이 작업들이 여러 단계를 거쳐야 하기 때문에 비교적 많은 시간을 필요로한다. 레지스터는 데이타를 빨리 기록하고 읽을 수있는 기억장소로서 프로세서내에 존재한다는 것이 특징이다. 8086에는 그림 3.7과 같이 16비트 레지스터 14개가 있다: 즉, 4개의 데이타 레지스터, 2개의 인덱스 레지스터, 3개의 포인터 레지스터, 4개의 세그먼트 레지스터, 1개의 플래그 레지스터로 구성되어 있다. 이중에서 데이타 레지스터는 2개로 분할해서 8비트로도 사용할 수 있고 포이터, 인덱스, 세그먼트 레지스터는 16비트로만 사용 가능하다. 논리마스커블 인터럽트 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서(Processor) (4) – 8086을 이용한 시스템구성 각종 데이타 처리를 할때 일시적인 결과를 기록하기 위해 사용하는 16비트 레지스터 및 8비트 레지스터로 프로그래머가 명령 중에 자유롭게 지정 가능한 범용 레지스터이다. 이들 레지스터들은 상위(AH, BH, CH, DH) 8비트 혹은 하위(AL, BL, CL, DL) 8비트를 엑세스 할 수 있다. a) AX(AL, AH) : 어큐뮬레이터(Accumulator), 산술, 논리 연산의 중심이 되는 레지스터로 곱셈, 나눗셈 명령 등에 있어서 하위 바이트용 레지스터 I/O 포트와의 출력 명령은 이 레지스터로서 사용된다. b) BX(BL, BH) : 간접 주소 지정시에 베이스 주소를 가르키는 레지스터로 사용된다. c) CX(CL, CH) : 스트링이나 루프에서 반복수를 카운터하는 카운트 레지스터로 쉬프트, 로테이트 명령의 로테이트수를 놓는다. d) DX(DL, DH) : 간접 주소에 의한 입출력 주소 지정에 사용되며 곱셈, 나눗셈에서의 상위 워드용 데이타 레지스터로 보조 어큐뮬레이터이다. 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서의 메모리 판독 사이클(1) 주소버스 시 스 템 버 데이터버스 제어버스 1 2 기억장치 프로세서 RAM ROM 1) 판독 요구 신호(read request) : 프로세서가 판독을 위해서는 먼저 버스를 사용해야 한다. 따라서 제어 버스(control bus)를 통하여 버스 사용 요구(bus request signal)를 보낸다. 이때 버스가 다른 일에 이용되고 있으면 프로세서는 기다려야 한다. 2) 주소 전송(send address) : 버스를 이용할 수 있게 되면, 판독할 자료가 있는 기억 소자의 주소를 주소 버스에 준다. 기억 장치는 이 지정된 주소를 받아야, 이 주소를 찾아 데이타를 읽는다. 2 기억장치 프로세서 RAM ROM 1단계: 판독요구신호 2단계: 주소전송 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서의 메모리 판독 사이클(2) 주소버스 시 스 템 버 데이터버스 제어버스 4 3 기억장치 프로세서 RAM ROM 1) 판독 요구 신호(read request) : 프로세서가 판독을 위해서는 먼저 버스를 사용해야 한다. 따라서 제어 버스(control bus)를 통하여 버스 사용 요구(bus request signal)를 보낸다. 이때 버스가 다른 일에 이용되고 있으면 프로세서는 기다려야 한다. 2) 주소 전송(send address) : 버스를 이용할 수 있게 되면, 판독할 자료가 있는 기억 소자의 주소를 주소 버스에 준다. 기억 장치는 이 지정된 주소를 받아야, 이 주소를 찾아 데이타를 읽는다. 3 기억장치 프로세서 RAM ROM 3단계: 데이터 전송 4단계: 판독완료신호 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서의 메모리 기록 사이클(1) 주소버스 시 스 템 버 데이터버스 제어버스 1 2 기억장치 프로세서 RAM ROM 1) 판독 요구 신호(read request) : 프로세서가 판독을 위해서는 먼저 버스를 사용해야 한다. 따라서 제어 버스(control bus)를 통하여 버스 사용 요구(bus request signal)를 보낸다. 이때 버스가 다른 일에 이용되고 있으면 프로세서는 기다려야 한다. 2) 주소 전송(send address) : 버스를 이용할 수 있게 되면, 판독할 자료가 있는 기억 소자의 주소를 주소 버스에 준다. 기억 장치는 이 지정된 주소를 받아야, 이 주소를 찾아 데이타를 읽는다. 2 기억장치 프로세서 RAM ROM 1단계: 기록요구신호 2단계: 주소전송 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서의 메모리 기록 사이클(2) 주소버스 시 스 템 버 데이터버스 제어버스 4 3 기억장치 프로세서 RAM ROM 1) 판독 요구 신호(read request) : 프로세서가 판독을 위해서는 먼저 버스를 사용해야 한다. 따라서 제어 버스(control bus)를 통하여 버스 사용 요구(bus request signal)를 보낸다. 이때 버스가 다른 일에 이용되고 있으면 프로세서는 기다려야 한다. 2) 주소 전송(send address) : 버스를 이용할 수 있게 되면, 판독할 자료가 있는 기억 소자의 주소를 주소 버스에 준다. 기억 장치는 이 지정된 주소를 받아야, 이 주소를 찾아 데이타를 읽는다. 3 기억장치 프로세서 RAM ROM 3단계: 데이터 전송 4단계: 기록완료신호 신라대학교 컴퓨터공학과 시스템 프로그래밍

8086 프로세서의 입출력 동작 8086 프로세서의 입출력 동작(I/O Operation) I/O 주소를 이용하여 I/O 장치를 구별 메모리 접근과 동일하게 주소 버스 및 데이터 버스를 사용 메모리 접근과 구별하기 위해 별도의 신호(M/IO)를 이용 High – Memory Access Low – I/O Access 기본적으로 메모리 판독/기록 사이클과 동일하게 동작 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서의 명령어 실행 사이클(1) 명 령 어 인 출 명 령 어 해독 IP 주소→주소버스 명령어→EU 명령어→명령어큐 IP+2→IP 명령어→EU 필요한 동작 판단 명령어의 실행은 크게 4단계로 나누어 진다. ㅇ 명령어 인출 프로세서내에 있는 명령어포인터에는 항상 다음에 실행될 명령어의 주소가 들어 있다. 8086의 경우 코드세그먼트 레지스터와 짝을 이루어 실제 물리주소를 만들고 주기억으로부터 명령어를 인출하여 버스인터페이스장치 내의 명령어 큐에 저장한다. ㅇ 명려어 해독 명령어 큐에 잠시 저장된 명령어는 해독되기 위해 명령어 실행장치에 보내지고 여기서 프로세서가 할 일이 정해진다. ㅇ 데이터 인출 해독된 명령어의 연산항에 주소가 주어지면 주소에 기록된 주기억장치로부터 데이터를 인출하여 프로세서 내의 레지스터에 저장한다. ㅇ 명령어 실행 인출된 데이터를 가지고 해독된 명령에 의해 산술논리장치에서 명령을 실행하고 연산된 결과는 레지스터에 저장되든지 또는 기억장소에 보내기 위해 데이터버퍼에 일시적으로 보관된다. 명령어 실행 데 이 터 인 출 명령어 실행 실행 결과→ 레지스터 혹은 주기억 연산항 주소에 대한 데이터 인출 →레지스터 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서의 명령어 실행 사이클(2) IP(Instruction Pointer) 레지스터에 의해 프로그램 실행 순서를 제어 명령어 인출 단계에서 현재 명령어의 길이를 더하여 다음 명령어의 주소를 저장 분기(branch) 명령어 처리: e.g) goto 1000 명령어 큐를 사용하여 크기가 일정하지 않은 명령어를 처리 8086 프로세서의 명령어 길이는 1~6 바이트 한 워드(2 바이트)보다 긴 명령어는 현재 인출된 명령어의 정보를 이용하여 명령어 인출을 반복 신라대학교 컴퓨터공학과 시스템 프로그래밍

프로세서의 명령어 실행 사이클(3) 플래그 레지스터에 명령어 실행 결과에 대한 정보를 저장 8086 프로세서의 명령어 실행 예 계산 결과의 부호, zero, 올림수 등 8086 프로세서의 명령어 실행 예 그림 2.8 참조 신라대학교 컴퓨터공학과 시스템 프로그래밍

명령어 실행속도(1) 명령어 사이클(Instruction Cycle) 한 명령어를 인출하여 실행하는 시간 명령어 인출, 명령어 해독, 데이타 호출, 실행 시간을 모두 합친 시간 fetch time(I-time) : 명령어 호출 시간 execution time(E-time) : 명령어 해석하여 데이터 인출하고 연산 수행하는 시간 instruction cycle = I-time + E-time 명령어의 길이가 각기 다르기 때문에 명령어 사이클이 일정하지 않으며, 보통 4~200 system clock을 요구 신라대학교 컴퓨터공학과 시스템 프로그래밍

명령어 실행속도(2) MIPS(Million Instruction Per Second) 프로세서의 명령어 실행 속도를 나타내는 단위 단위 시간(1초)에 실행하는 명령어의 수를 백만 단위로 표현 시스템 클럭, 레지스터 크기, 데이터 버스 크기, 연산장치 크기, 명령어 크기 등에 의해 결정 Mainframe Computer : 20 ~ 1000MIPS Microcomputer : 1 ~ 10 MIPS 8086 프로세서 : 1 ~ 10 MIPS 신라대학교 컴퓨터공학과 시스템 프로그래밍

8086 프로세서 명령어 프로세서의 명령어 길이 8086 프로세서의 명령어 명령어의 종류, 주소지정방식, 레지스터의 개수 등에 의해 결정 8-bit 명령어의 예 : 그림 3.2 참조 8086 프로세서의 명령어 기본적으로 1 단어(2 바이트)로 구성 2단어 또는 최대 3단어(6 바이트)까지 확장 가능 부록 D 참조 : 연산항 주소 모드  5 bits 범용 레지스터 8 개  레지스터 주소 3 bits 연산 데이터의 크기 지정(8/16 bit)  word bit 레지스터 접근 방향(from/to)  direction bit 연산자 종류  6 bits 신라대학교 컴퓨터공학과 시스템 프로그래밍

기억장치(1) 명령 및 데이터의 저장장소 주소공간(Address Space) 기본소자: 비트(bit) 기본 주소지정 단위: 바이트(byte) 기본 정보 단위: 워드(word) 주소(address), 위치(location), 내용값(contents) 주소공간(Address Space) 프로그램이 지정할 수 있는 단위 정보의 수 주소를 나타내기 위한 주소 비트의 수에 의해 결정 예: 주소 버스가 16 비트이면 216 = 64 KB 신라대학교 컴퓨터공학과 시스템 프로그래밍

기억장치(2) 기억장치 64KB의 기억장치 주소 예 기억된 내용 주기억장치 주 소 바이트 0 1 1 1 1 1 1 . . N 바이트 0 기억된 내용 1 1 1 1 1 1 주기억장치 주 소 . . 기억장치의 주소는 비트 단위, 바이트 단위, 워드 단위 등 다양할 수 있으나 일반적으로 바이트 단위로 사용되고 있다. 바이트는 짝수 바이트와 홀수 바이트로 구분되는데 짝수 번지부터 시작되면 하나의 사이클에 2바이트를 가져오나 홀수 바이트 번지에서부터 시작되면 1 사이클에 한 바이트만을 가져오게 된다. N 바이트 N . . 65535 바이트65535 신라대학교 컴퓨터공학과 시스템 프로그래밍

기억장치(3) 기억장치의 물리적 관리 방법 선형 기억장치 관리 세그먼트 기억장치 관리 페이징,페이징/세그먼트 혼합방법 주소를 선형으로 배열 논리주소 = 물리주소 세그먼트 기억장치 관리 기억장소를 세그먼트로 구분 논리주소≠물리주소 페이징,페이징/세그먼트 혼합방법 신라대학교 컴퓨터공학과 시스템 프로그래밍

기억장치(4) 선형 기억장치 관리(1) 기억장치 논리적인 주소 1 N 2 . N 20 비트 1 2 . N N 20 비트 cf) 모토롤라 M68000 프로세서 등에서 적용 신라대학교 컴퓨터공학과 시스템 프로그래밍

기억장치(5) 선형 기억장치 관리(2) 기억장치 관리자 기억장치 시스템 관리자 프로그램 시스템 관리자 프로그램 시스템 관리자 데이터 시스템 관리자 데이터 . 프로그램1 프로그램1 프로그램2 프로그램2 기억장치 관리자 기억장치 신라대학교 컴퓨터공학과 시스템 프로그래밍

기억장치(6) 세그먼트 기억장치 관리 기억장치 기계적 주소 논리적 주소 데이터 3 세그먼트 프로그램 세그먼트 주소 프로그램 1 세그먼트 프로 그램1 + 프로그램 2 세그먼트 데이터 1 세그먼트 데 이 터 2 데이터 세그먼트 주소 데이터 2 세그먼트 + 기억장치 신라대학교 컴퓨터공학과 시스템 프로그래밍

8086 프로세서의 기억장치 모델(1) 1 MB의 주소 공간을 지원 워드 또는 바이트 단위의 메모리 입출력 가능 바이트 단위의 메모리 접근 20 bit 메모리 주소 버스를 사용  220 = 1 MB 워드 또는 바이트 단위의 메모리 입출력 가능 16 bit 데이터 버스를 지원 하나의 메모리 접근 사이클에 워드 단위의 입출력을 수행하나 바이트 단위 접근을 위해 주소 뱅크 구조를 사용 그림 3.4 참조 기억장치의 워드 구성은 little-endian form 신라대학교 컴퓨터공학과 시스템 프로그래밍

8086 프로세서의 기억장치 모델(2) 8086의 주소버스는 20비트로 되어 있어서 1,048,576(220)바이트의 번지를 지정할 수 있다. 그런데 8086/8088프로세서의 레지스터는 16비트이므로 한개의 레지스터로 기록할 수 있는 주소는 65,536(216)바이트 까지만 가능하다. 따라서 8086/8088에서는 두개의 레지스터를 사용하여 20비트 주소를 만들어낸다. 그림 3.9처럼 세그먼트 레지스터를 4비트만큼 왼쪽으로 자리 이동하여 덧셈을 하고, 결과로서 20 비트의 번지를 얻게된다. 이때 오프셋 값은 하나의 세그먼트에서의 변위(displacement)를 나타낸다. 신라대학교 컴퓨터공학과 시스템 프로그래밍

8086 프로세서의 기억장치 모델(3) 세그먼트 기억장치 관리 기법을 사용 하나의 세그먼트는 64 KB 크기 명령어 주소 또는 데이터 주소를 나타내는 논리적 주소는 하나의 세그먼트 내에서의 오프셋(offset) 주소 16 bit로 표현 실제 기억장소 접근 시에 물리적 주소 계산 물리적 주소 = 세그먼트 시작 주소 + 논리적 주소 신라대학교 컴퓨터공학과 시스템 프로그래밍

8086 프로세서의 기억장치 모델(4) 데이터 Read/Write 규칙 기억장치에서의 단어 배열 기억장치 주소:바이트단위, 홀/짝의 값 단어주소는 2씩 증가하며 짝수값 가짐 N 번지 접근 시 1 단어에 접근하면 자동적으로 N, N+1 바이트에 접근 N 번지의 긴 단어 접근 시에 4개의 바이트에 접근 기억장치에서의 단어 배열 little-endian format의 단어 구성을 지원 레지스터에서 기억장치로 데이터를 입출력할 때에는 하위 바이트를 먼저 입출력하고 상위 바이트를 입출력한다 그림 3.6 참조 이들 세그먼트는 서로 겹침없이 독립된 4 개의 세그먼트로서 64K x 4 = 256K 바이트의 기억 공간의 번지를 지정할 수 있다. 신라대학교 컴퓨터공학과 시스템 프로그래밍

레지스터 레지스터의 종류와 형태 세그먼트레지스터와 물리주소 논리주소와 물리주소 명령어 포인터의 동작 데이터의 표현 신라대학교 컴퓨터공학과 시스템 프로그래밍

레지스터의 종류 16 bit 레지스터 14개 지원 그림 3.7 참조 데이터 레지스터 : 4개 인덱스 레지스터 : 2개 포인터 레지스터 : 2개 명령어 포인터 레지스터 : 1개 플래그 레지스터 : 1개 세그먼트 레지스터 : 4개 프로세서가 일을 하는데 필요한 데이타는 보통 기억장치(RAM)에 기억하여 사용한다. 그러나 이 방법은 앞에서 소개된 판독 사이클과 기록 사이클을 사용하는데, 이 작업들이 여러 단계를 거쳐야 하기 때문에 비교적 많은 시간을 필요로한다. 레지스터는 데이타를 빨리 기록하고 읽을 수있는 기억장소로서 프로세서내에 존재한다는 것이 특징이다. 8086에는 그림 3.7과 같이 16비트 레지스터 14개가 있다: 즉, 4개의 데이타 레지스터, 2개의 인덱스 레지스터, 3개의 포인터 레지스터, 4개의 세그먼트 레지스터, 1개의 플래그 레지스터로 구성되어 있다. 이중에서 데이타 레지스터는 2개로 분할해서 8비트로도 사용할 수 있고 포이터, 인덱스, 세그먼트 레지스터는 16비트로만 사용 가능하다. 신라대학교 컴퓨터공학과 시스템 프로그래밍

데이터 레지스터 32비트 16비트 8비트 8비트 EAX AH AL AX EBX BH BL BX ECX CH CL CX EDX 각종 데이타 처리를 할때 일시적인 결과를 기록하기 위해 사용하는 16비트 레지스터 및 8비트 레지스터로 프로그래머가 명령 중에 자유롭게 지정 가능한 범용 레지스터이다. 이들 레지스터들은 상위(AH, BH, CH, DH) 8비트 혹은 하위(AL, BL, CL, DL) 8비트를 엑세스 할 수 있다. a) AX(AL, AH) : 어큐뮬레이터(Accumulator), 산술, 논리 연산의 중심이 되는 레지스터로 곱셈, 나눗셈 명령 등에 있어서 하위 바이트용 레지스터 I/O 포트와의 출력 명령은 이 레지스터로서 사용된다. b) BX(BL, BH) : 간접 주소 지정시에 베이스 주소를 가르키는 레지스터로 사용된다. c) CX(CL, CH) : 스트링이나 루프에서 반복수를 카운터하는 카운트 레지스터로 쉬프트, 로테이트 명령의 로테이트수를 놓는다. d) DX(DL, DH) : 간접 주소에 의한 입출력 주소 지정에 사용되며 곱셈, 나눗셈에서의 상위 워드용 데이타 레지스터로 보조 어큐뮬레이터이다. EBX BH BL BX ECX CH CL CX EDX DH DL DX 신라대학교 컴퓨터공학과 시스템 프로그래밍

포인터와 인덱스 레지스터 32비트 16비트 ESP SP Stack Pointer EBP BP Base Pointer ESI (1) 포인터 레지스터(Pointer Register) a) 스택 포인터(SP:Stack Pointer) : 스택 조작을 위해서 사용하는 레지스터로서 프로그램 실행 중에 데이타의 저장 주소를 기억하고 있는 레지스터이다. 스택은 기억 장치내의 어떠한 영역을 지칭한다. 이 스택을 이용하여 데이타를 저장하고 인출 할 때는 가장 나중에 저장한 데이타를 먼저 인출하게 된다. 이와 같은 순서로 입출력을 하는 방법을 LIFO(Last-In-First-Out)이라 한다. 반면에 입력된 순서대로 출력되는 방법은 FIFO(First-In-First-Out)이라 한다. FIFO의 대표적인 예는 먼저 도착한 손님을 먼저 서비스해주는 일반적인 대기행렬(queue)이 있다. b) 베이스 포인터(BP:base pointer) : 기본적으로 스택 영역 내의 주소를 지시하지만 스택 세그먼트 SS영역내에 배치한 데이타에 대한 베이스 주소를 저장해 두기 위해 사용된다. (2) 인덱스 레지스터(Index Register) 데이타의 주소를 나타내기 위해 사용하며 두가지 레지스터 SI, DI가 있다. 특히 스트링 명령에서 선두 데이타로 되는 스트링의 선두 주소를 SI 레지스터에, 출력 대상이 되는 선두 주소를 DI 레지스터에 설정해서 명령을 실행하도록 결정하고 있다. a) SI(Source Index Register) : 연산항 소스, 소스 데이타 지정에 사용된다. b) DI(Destination Index Register) : 연산항의 처리 대상, 또는 목적항 데이타를 나타내는데 사용된다. ESI SI Source Index EDI DI Destination Index 신라대학교 컴퓨터공학과 시스템 프로그래밍

세그먼트 레지스터 Code Segment : CS Data Segment : DS Stack Segment : SS 8086/88은 1M바이트의 메모리 내에 4개의 64K 바이트 메모리 블럭을 정의한다. 이들은 각각 데이타(data), 코드(code), 스택(stack) 및 엑스트라(extra) 세그먼트로 구성되어지며, 이들은 각각 최대 64 KB 크기의 영역을 가질 수 있다. 4개의 세그먼트 전용 레지스터 DS, CS, SS 및 ES는 각 세그먼트의 처음위치(처음주소)를 지시한다. a) 코드 세그먼트(Code Segment)는 프로그램 명령 코드를 포함하고, CS 레지스터는 이 세그먼트의 선두번지를 갖게 된다. b) 데이타 세그먼트(Data Segment)는 프로그램을 위한 데이타를 저장하고 있으며, DS 레지스터는 이 세그먼트의 선두 주소를 가지고 있다. c) 엑스트라 세그먼트(Extra Segment)는 여분의 데이타 세스먼트이며, 주로 스트링(string)명령을 수행할 때 사용된다. ES 레지스터는 이 세그먼트의 선두 주소를 가지고 있다. d) 스택 세그먼트(Stack Segment)는 인터럽트와 서브루틴의 반환 주소를 저장하는데 사용된다. SS 레지스터는 이 세그먼트의 선두 주소를 가지고 있다 Extra Segment : ES 신라대학교 컴퓨터공학과 시스템 프로그래밍

플래그 레지스터의 구성 상위 하위 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 × × × × O D I T × × × × O D I T S Z × A × P × C 오 버 플 로 우 디 렉 션 인 터 럽 트 에 이 블 트 랩 사 인 제 로 보 조 캐 리 패 리 티 캐 리 프로그램을 실행할 때 앞의 연산 결과가 음수인가 양수인가, 컴퓨터 사용자가 일반 사용자인지 관리자(supervisor)인지 알 필요가 있다. 이러한 정보들은 16비트 크기의 상태 레지스터에 기록되고, 이것에 기록되는 각 비트들을 플래그(flag)라고 부른다. 그림 3-8와 같이 8086에서는 9종류의 플래그가 있고, CF, PF, AF, ZF, SF, OF는 수치 연산과 논리 연산의 결과에 의한 CPU의 상태를 나타내는 상태(Status) 플래그이고, TF, IF, DF는 CPU동작을 변화하기 위한 제어 플래그이다. 신라대학교 컴퓨터공학과 시스템 프로그래밍

세그먼트레지스터와 물리주소 16비트 4비트 세그먼트 레지스터값 오프셋(offset)값 CPU로부터 출력되는 실제주소값 8086의 주소버스는 20비트로 되어 있어서 1,048,576(220)바이트의 번지를 지정할 수 있다. 그런데 8086/8088프로세서의 레지스터는 16비트이므로 한개의 레지스터로 기록할 수 있는 주소는 65,536(216)바이트 까지만 가능하다. 따라서 8086/8088에서는 두개의 레지스터를 사용하여 20비트 주소를 만들어낸다. 그림 3.9처럼 세그먼트 레지스터를 4비트만큼 왼쪽으로 자리 이동하여 덧셈을 하고, 결과로서 20 비트의 번지를 얻게된다. 이때 오프셋 값은 하나의 세그먼트에서의 변위(displacement)를 나타낸다. CPU로부터 출력되는 실제주소값 신라대학교 컴퓨터공학과 시스템 프로그래밍

메모리 공간에서 세그먼트 영역 DS ×16 E000 데이터 세그먼트 CS ×16 코드 세그먼트 B3FF SS ×16 FFFFFH ×16 EFFFFH E000 데이터 세그먼트 E0000H CS C3FEFH ×16 코드 세그먼트 B3FF B3FF0H SS 7D260H ×16 스텍 세그먼트 이들 세그먼트는 서로 겹침없이 독립된 4 개의 세그먼트로서 64K x 4 = 256K 바이트의 기억 공간의 번지를 지정할 수 있다. 6D26 6D260H 6288FH ES 엑스트라 세그먼트 ×16 52B90H 52B9 00000H 신라대학교 컴퓨터공학과 시스템 프로그래밍

논리주소와 물리주소의 관계 + 1F2A5 세그먼트값 물리주소 세그먼트 베이스주소 1F00 1F000 세그먼트 레지스터값×16 =세그먼트 물리번지 02A5 + 그림 3.11을 보면, CS에 저장된 값은 1F00H이지만, 실제로 기억장치에서는 4 비트를 자리이동한 1F000H를 가르키고 있다. 따라서, 세그먼트 레지스터와 각 오프셋으로 부터 실제 주소를 만들어 주는 일은 BIU(버스 인터페이스 장치)에서 해주므로 사용자는 16비트 레지스터로 256K바이트의 기억 공간을 사용할 수 있다. 실제주소(physical address)의 지정은 세그먼트 주소와 오프셋을 조합하여 얻어지므로, 동일한 실제 주소에 대하여 여러개의 세그먼트, 오프셋 조합이 존재할 수 있다. 세그먼트 영역이 중첩된 경우는 데이타와 명령등이 서로 중첩을 되는 것을 피해야하므로 충분한 관리가 필요하다. 02A5 1 F 2 + A 5 1 F 2 A 5 신라대학교 컴퓨터공학과 시스템 프로그래밍

명령어 포인터의 동작 8086 CPU 기억장치 코드 세그먼트 ×16 . BIU F0000 F0001 CS F0202 F000 EU : F0201 주소의 명령 실행 F0000 ×16 F0001 CS F0202 F0203 F0204 F0205 F000 . 명 령 큐 F0204 명령어 포인터는 프로그램의 실행 순서를 조절하기 위해 명령어의 주소를 기억하는 레지스터로 CS와 쌍이 되어 실제 주소를 만들수 있으며 8086에서는 2바이트씩 명령어를 패치한다. 16비트 IP 레지스터는 8086이나 M68000 프로세서의 PC(프로그램 카운터)와 같고, 프로그램 명령 코드의 베이스 주소를 가지고 있는 CS(Code Segment Register)와 짝을 이루어 기억 장치안의 실제 주소를 만들어 낸다. 보통 M68000에서는 현재 실행중인 명령어의 다음 주소가 PC에 저장되어 있으나, 8086에서는 보통 EU(명령 실행부)에서 현재 실행 되고 있는 명령어의 주소보다 몇바이트가 앞선 주소가 IP에 저장되어 있다. 다음 그림 3.12는 8086에서 IP의 동작을 보인다. 현재 EU에서 실행중인 명령어는 F0201번지 것으로 BIU에 있는 명령 큐에는 F0202에서 F0205번지까지의 명령코드가 이미 페치되어 있으므로, IP는 다음에 페치할 예정의 F0206번지를 지시하고 있다. F0205 IP F0206 F0206 F0207 BIU 신라대학교 컴퓨터공학과 시스템 프로그래밍

레지스터의 특성 직접 엑세스 가능한 레지스터 직접 수정이 가능한 플래그 AX, BX, CX, DX AH, BH, CH, DH AL, BL, CL, DL SI, DI BP, SP DS, ES, SS 직접 수정이 가능한 플래그 CF, DF, IF 신라대학교 컴퓨터공학과 시스템 프로그래밍