Download presentation
Presentation is loading. Please wait.
Published byAlexander Hansson Modified 5년 전
1
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍
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 신라대학교 컴퓨터공학과 시스템 프로그래밍
3
컴퓨터 구조(2) 기본 구성 신라대학교 컴퓨터공학과 시스템 프로그래밍
4
프로세서(Processor) (1) Intel x86 Microprocessors(표 3.1 참조) 8086 8088
80186 80286 80386 80486 Pentium-I Pentium-II Pentium-III 등 신라대학교 컴퓨터공학과 시스템 프로그래밍
5
프로세서(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) 신라대학교 컴퓨터공학과 시스템 프로그래밍
6
프로세서(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) : 연산항의 처리 대상, 또는 목적항 데이타를 나타내는데 사용된다. 신라대학교 컴퓨터공학과 시스템 프로그래밍
7
프로세서(Processor) (4) 8086 프로세서 칩 구성 어드레스/ 세그먼트 정보 데이터/ 어드레스버스 논리마스커블
프로세서가 일을 하는데 필요한 데이타는 보통 기억장치(RAM)에 기억하여 사용한다. 그러나 이 방법은 앞에서 소개된 판독 사이클과 기록 사이클을 사용하는데, 이 작업들이 여러 단계를 거쳐야 하기 때문에 비교적 많은 시간을 필요로한다. 레지스터는 데이타를 빨리 기록하고 읽을 수있는 기억장소로서 프로세서내에 존재한다는 것이 특징이다. 8086에는 그림 3.7과 같이 16비트 레지스터 14개가 있다: 즉, 4개의 데이타 레지스터, 2개의 인덱스 레지스터, 3개의 포인터 레지스터, 4개의 세그먼트 레지스터, 1개의 플래그 레지스터로 구성되어 있다. 이중에서 데이타 레지스터는 2개로 분할해서 8비트로도 사용할 수 있고 포이터, 인덱스, 세그먼트 레지스터는 16비트로만 사용 가능하다. 논리마스커블 인터럽트 신라대학교 컴퓨터공학과 시스템 프로그래밍
8
프로세서(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) : 간접 주소에 의한 입출력 주소 지정에 사용되며 곱셈, 나눗셈에서의 상위 워드용 데이타 레지스터로 보조 어큐뮬레이터이다. 신라대학교 컴퓨터공학과 시스템 프로그래밍
9
프로세서의 메모리 판독 사이클(1) 주소버스 시 스 템 버 데이터버스 제어버스 1 2 기억장치 프로세서 RAM ROM
1) 판독 요구 신호(read request) : 프로세서가 판독을 위해서는 먼저 버스를 사용해야 한다. 따라서 제어 버스(control bus)를 통하여 버스 사용 요구(bus request signal)를 보낸다. 이때 버스가 다른 일에 이용되고 있으면 프로세서는 기다려야 한다. 2) 주소 전송(send address) : 버스를 이용할 수 있게 되면, 판독할 자료가 있는 기억 소자의 주소를 주소 버스에 준다. 기억 장치는 이 지정된 주소를 받아야, 이 주소를 찾아 데이타를 읽는다. 2 기억장치 프로세서 RAM ROM 1단계: 판독요구신호 2단계: 주소전송 신라대학교 컴퓨터공학과 시스템 프로그래밍
10
프로세서의 메모리 판독 사이클(2) 주소버스 시 스 템 버 데이터버스 제어버스 4 3 기억장치 프로세서 RAM ROM
1) 판독 요구 신호(read request) : 프로세서가 판독을 위해서는 먼저 버스를 사용해야 한다. 따라서 제어 버스(control bus)를 통하여 버스 사용 요구(bus request signal)를 보낸다. 이때 버스가 다른 일에 이용되고 있으면 프로세서는 기다려야 한다. 2) 주소 전송(send address) : 버스를 이용할 수 있게 되면, 판독할 자료가 있는 기억 소자의 주소를 주소 버스에 준다. 기억 장치는 이 지정된 주소를 받아야, 이 주소를 찾아 데이타를 읽는다. 3 기억장치 프로세서 RAM ROM 3단계: 데이터 전송 4단계: 판독완료신호 신라대학교 컴퓨터공학과 시스템 프로그래밍
11
프로세서의 메모리 기록 사이클(1) 주소버스 시 스 템 버 데이터버스 제어버스 1 2 기억장치 프로세서 RAM ROM
1) 판독 요구 신호(read request) : 프로세서가 판독을 위해서는 먼저 버스를 사용해야 한다. 따라서 제어 버스(control bus)를 통하여 버스 사용 요구(bus request signal)를 보낸다. 이때 버스가 다른 일에 이용되고 있으면 프로세서는 기다려야 한다. 2) 주소 전송(send address) : 버스를 이용할 수 있게 되면, 판독할 자료가 있는 기억 소자의 주소를 주소 버스에 준다. 기억 장치는 이 지정된 주소를 받아야, 이 주소를 찾아 데이타를 읽는다. 2 기억장치 프로세서 RAM ROM 1단계: 기록요구신호 2단계: 주소전송 신라대학교 컴퓨터공학과 시스템 프로그래밍
12
프로세서의 메모리 기록 사이클(2) 주소버스 시 스 템 버 데이터버스 제어버스 4 3 기억장치 프로세서 RAM ROM
1) 판독 요구 신호(read request) : 프로세서가 판독을 위해서는 먼저 버스를 사용해야 한다. 따라서 제어 버스(control bus)를 통하여 버스 사용 요구(bus request signal)를 보낸다. 이때 버스가 다른 일에 이용되고 있으면 프로세서는 기다려야 한다. 2) 주소 전송(send address) : 버스를 이용할 수 있게 되면, 판독할 자료가 있는 기억 소자의 주소를 주소 버스에 준다. 기억 장치는 이 지정된 주소를 받아야, 이 주소를 찾아 데이타를 읽는다. 3 기억장치 프로세서 RAM ROM 3단계: 데이터 전송 4단계: 기록완료신호 신라대학교 컴퓨터공학과 시스템 프로그래밍
13
8086 프로세서의 입출력 동작 8086 프로세서의 입출력 동작(I/O Operation)
I/O 주소를 이용하여 I/O 장치를 구별 메모리 접근과 동일하게 주소 버스 및 데이터 버스를 사용 메모리 접근과 구별하기 위해 별도의 신호(M/IO)를 이용 High – Memory Access Low – I/O Access 기본적으로 메모리 판독/기록 사이클과 동일하게 동작 신라대학교 컴퓨터공학과 시스템 프로그래밍
14
프로세서의 명령어 실행 사이클(1) 명 령 어 인 출 명 령 어 해독 IP 주소→주소버스 명령어→EU 명령어→명령어큐
IP+2→IP 명령어→EU 필요한 동작 판단 명령어의 실행은 크게 4단계로 나누어 진다. ㅇ 명령어 인출 프로세서내에 있는 명령어포인터에는 항상 다음에 실행될 명령어의 주소가 들어 있다. 8086의 경우 코드세그먼트 레지스터와 짝을 이루어 실제 물리주소를 만들고 주기억으로부터 명령어를 인출하여 버스인터페이스장치 내의 명령어 큐에 저장한다. ㅇ 명려어 해독 명령어 큐에 잠시 저장된 명령어는 해독되기 위해 명령어 실행장치에 보내지고 여기서 프로세서가 할 일이 정해진다. ㅇ 데이터 인출 해독된 명령어의 연산항에 주소가 주어지면 주소에 기록된 주기억장치로부터 데이터를 인출하여 프로세서 내의 레지스터에 저장한다. ㅇ 명령어 실행 인출된 데이터를 가지고 해독된 명령에 의해 산술논리장치에서 명령을 실행하고 연산된 결과는 레지스터에 저장되든지 또는 기억장소에 보내기 위해 데이터버퍼에 일시적으로 보관된다. 명령어 실행 데 이 터 인 출 명령어 실행 실행 결과→ 레지스터 혹은 주기억 연산항 주소에 대한 데이터 인출 →레지스터 신라대학교 컴퓨터공학과 시스템 프로그래밍
15
프로세서의 명령어 실행 사이클(2) IP(Instruction Pointer) 레지스터에 의해 프로그램 실행 순서를 제어
명령어 인출 단계에서 현재 명령어의 길이를 더하여 다음 명령어의 주소를 저장 분기(branch) 명령어 처리: e.g) goto 1000 명령어 큐를 사용하여 크기가 일정하지 않은 명령어를 처리 8086 프로세서의 명령어 길이는 1~6 바이트 한 워드(2 바이트)보다 긴 명령어는 현재 인출된 명령어의 정보를 이용하여 명령어 인출을 반복 신라대학교 컴퓨터공학과 시스템 프로그래밍
16
프로세서의 명령어 실행 사이클(3) 플래그 레지스터에 명령어 실행 결과에 대한 정보를 저장 8086 프로세서의 명령어 실행 예
계산 결과의 부호, zero, 올림수 등 8086 프로세서의 명령어 실행 예 그림 2.8 참조 신라대학교 컴퓨터공학과 시스템 프로그래밍
17
명령어 실행속도(1) 명령어 사이클(Instruction Cycle) 한 명령어를 인출하여 실행하는 시간
명령어 인출, 명령어 해독, 데이타 호출, 실행 시간을 모두 합친 시간 fetch time(I-time) : 명령어 호출 시간 execution time(E-time) : 명령어 해석하여 데이터 인출하고 연산 수행하는 시간 instruction cycle = I-time + E-time 명령어의 길이가 각기 다르기 때문에 명령어 사이클이 일정하지 않으며, 보통 4~200 system clock을 요구 신라대학교 컴퓨터공학과 시스템 프로그래밍
18
명령어 실행속도(2) MIPS(Million Instruction Per Second)
프로세서의 명령어 실행 속도를 나타내는 단위 단위 시간(1초)에 실행하는 명령어의 수를 백만 단위로 표현 시스템 클럭, 레지스터 크기, 데이터 버스 크기, 연산장치 크기, 명령어 크기 등에 의해 결정 Mainframe Computer : 20 ~ 1000MIPS Microcomputer : 1 ~ 10 MIPS 8086 프로세서 : 1 ~ 10 MIPS 신라대학교 컴퓨터공학과 시스템 프로그래밍
19
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 신라대학교 컴퓨터공학과 시스템 프로그래밍
20
기억장치(1) 명령 및 데이터의 저장장소 주소공간(Address Space) 기본소자: 비트(bit)
기본 주소지정 단위: 바이트(byte) 기본 정보 단위: 워드(word) 주소(address), 위치(location), 내용값(contents) 주소공간(Address Space) 프로그램이 지정할 수 있는 단위 정보의 수 주소를 나타내기 위한 주소 비트의 수에 의해 결정 예: 주소 버스가 16 비트이면 216 = 64 KB 신라대학교 컴퓨터공학과 시스템 프로그래밍
21
기억장치(2) 기억장치 64KB의 기억장치 주소 예 기억된 내용 주기억장치 주 소 바이트 0 1 1 1 1 1 1 . . N
바이트 0 기억된 내용 1 1 1 1 1 1 주기억장치 주 소 . . 기억장치의 주소는 비트 단위, 바이트 단위, 워드 단위 등 다양할 수 있으나 일반적으로 바이트 단위로 사용되고 있다. 바이트는 짝수 바이트와 홀수 바이트로 구분되는데 짝수 번지부터 시작되면 하나의 사이클에 2바이트를 가져오나 홀수 바이트 번지에서부터 시작되면 1 사이클에 한 바이트만을 가져오게 된다. N 바이트 N . . 65535 바이트65535 신라대학교 컴퓨터공학과 시스템 프로그래밍
22
기억장치(3) 기억장치의 물리적 관리 방법 선형 기억장치 관리 세그먼트 기억장치 관리 페이징,페이징/세그먼트 혼합방법
주소를 선형으로 배열 논리주소 = 물리주소 세그먼트 기억장치 관리 기억장소를 세그먼트로 구분 논리주소≠물리주소 페이징,페이징/세그먼트 혼합방법 신라대학교 컴퓨터공학과 시스템 프로그래밍
23
기억장치(4) 선형 기억장치 관리(1) 기억장치 논리적인 주소 1 N 2 . N 20 비트
1 2 . N N 20 비트 cf) 모토롤라 M68000 프로세서 등에서 적용 신라대학교 컴퓨터공학과 시스템 프로그래밍
24
기억장치(5) 선형 기억장치 관리(2) 기억장치 관리자 기억장치 시스템 관리자 프로그램 시스템 관리자 프로그램 시스템 관리자
데이터 시스템 관리자 데이터 . 프로그램1 프로그램1 프로그램2 프로그램2 기억장치 관리자 기억장치 신라대학교 컴퓨터공학과 시스템 프로그래밍
25
기억장치(6) 세그먼트 기억장치 관리 기억장치 기계적 주소 논리적 주소 데이터 3 세그먼트 프로그램 세그먼트 주소
프로그램 1 세그먼트 프로 그램1 + 프로그램 2 세그먼트 데이터 1 세그먼트 데 이 터 2 데이터 세그먼트 주소 데이터 2 세그먼트 + 기억장치 신라대학교 컴퓨터공학과 시스템 프로그래밍
26
8086 프로세서의 기억장치 모델(1) 1 MB의 주소 공간을 지원 워드 또는 바이트 단위의 메모리 입출력 가능
바이트 단위의 메모리 접근 20 bit 메모리 주소 버스를 사용 220 = 1 MB 워드 또는 바이트 단위의 메모리 입출력 가능 16 bit 데이터 버스를 지원 하나의 메모리 접근 사이클에 워드 단위의 입출력을 수행하나 바이트 단위 접근을 위해 주소 뱅크 구조를 사용 그림 3.4 참조 기억장치의 워드 구성은 little-endian form 신라대학교 컴퓨터공학과 시스템 프로그래밍
27
8086 프로세서의 기억장치 모델(2) 8086의 주소버스는 20비트로 되어 있어서 1,048,576(220)바이트의 번지를 지정할 수 있다. 그런데 8086/8088프로세서의 레지스터는 16비트이므로 한개의 레지스터로 기록할 수 있는 주소는 65,536(216)바이트 까지만 가능하다. 따라서 8086/8088에서는 두개의 레지스터를 사용하여 20비트 주소를 만들어낸다. 그림 3.9처럼 세그먼트 레지스터를 4비트만큼 왼쪽으로 자리 이동하여 덧셈을 하고, 결과로서 20 비트의 번지를 얻게된다. 이때 오프셋 값은 하나의 세그먼트에서의 변위(displacement)를 나타낸다. 신라대학교 컴퓨터공학과 시스템 프로그래밍
28
8086 프로세서의 기억장치 모델(3) 세그먼트 기억장치 관리 기법을 사용 하나의 세그먼트는 64 KB 크기
명령어 주소 또는 데이터 주소를 나타내는 논리적 주소는 하나의 세그먼트 내에서의 오프셋(offset) 주소 16 bit로 표현 실제 기억장소 접근 시에 물리적 주소 계산 물리적 주소 = 세그먼트 시작 주소 + 논리적 주소 신라대학교 컴퓨터공학과 시스템 프로그래밍
29
8086 프로세서의 기억장치 모델(4) 데이터 Read/Write 규칙 기억장치에서의 단어 배열
기억장치 주소:바이트단위, 홀/짝의 값 단어주소는 2씩 증가하며 짝수값 가짐 N 번지 접근 시 1 단어에 접근하면 자동적으로 N, N+1 바이트에 접근 N 번지의 긴 단어 접근 시에 4개의 바이트에 접근 기억장치에서의 단어 배열 little-endian format의 단어 구성을 지원 레지스터에서 기억장치로 데이터를 입출력할 때에는 하위 바이트를 먼저 입출력하고 상위 바이트를 입출력한다 그림 3.6 참조 이들 세그먼트는 서로 겹침없이 독립된 4 개의 세그먼트로서 64K x 4 = 256K 바이트의 기억 공간의 번지를 지정할 수 있다. 신라대학교 컴퓨터공학과 시스템 프로그래밍
30
레지스터 레지스터의 종류와 형태 세그먼트레지스터와 물리주소 논리주소와 물리주소 명령어 포인터의 동작 데이터의 표현
신라대학교 컴퓨터공학과 시스템 프로그래밍
31
레지스터의 종류 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
데이터 레지스터 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 신라대학교 컴퓨터공학과 시스템 프로그래밍
33
포인터와 인덱스 레지스터 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 신라대학교 컴퓨터공학과 시스템 프로그래밍
34
세그먼트 레지스터 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 신라대학교 컴퓨터공학과 시스템 프로그래밍
35
플래그 레지스터의 구성 상위 하위 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동작을 변화하기 위한 제어 플래그이다. 신라대학교 컴퓨터공학과 시스템 프로그래밍
36
세그먼트레지스터와 물리주소 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로부터 출력되는 실제주소값 신라대학교 컴퓨터공학과 시스템 프로그래밍
37
메모리 공간에서 세그먼트 영역 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 신라대학교 컴퓨터공학과 시스템 프로그래밍
38
논리주소와 물리주소의 관계 + 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 신라대학교 컴퓨터공학과 시스템 프로그래밍
39
명령어 포인터의 동작 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 신라대학교 컴퓨터공학과 시스템 프로그래밍
40
레지스터의 특성 직접 엑세스 가능한 레지스터 직접 수정이 가능한 플래그 AX, BX, CX, DX AH, BH, CH, DH
AL, BL, CL, DL SI, DI BP, SP DS, ES, SS 직접 수정이 가능한 플래그 CF, DF, IF 신라대학교 컴퓨터공학과 시스템 프로그래밍
Similar presentations