세그먼트 레지스터

Download Report

Transcript 세그먼트 레지스터

제3장
인텔 프로세서의 내부구조
학습내용

목적

어셈블러 구현을 위하여  어셈블리어 이해 
프로세서 내부구조 이해

32비트 인텔 프로세서

16비트 인텔 프로세서

기억장치

레지스터

데이터표현
펜티엄 프로세스

내부적으로는 32비트 데이터 버스

외부적으로는 64비트 데이터 버스

수퍼스칼라 구조

한 번의 클럭주기에 두 개의 명령어 실행
32비트 프로세스의 기본 실행 환경
주소 공간
기본 프로그램 실행 레지스터
232-1
8개의 32비트
레지스터
범용 레지스터
6개의 16비트
레지스터
32 비트
세그먼트 레지스터
32 비트
EIP (명령어 포인터 레지스터)
EFLAGS 레지스터
FPU 레지스터
8개의 80비트 레지스터
실수 포인터
데이터 레지스터
16 비트
제어 레지스터
16 비트
상태 레지스터
0
16 비트
태그 레지스터
11 비트 연산 부호 레지스터
48 비트
FPU 데이터 연산 포인터 레지스터
48 비트
FPU 명령어 포인터 레지스터
MMX 레지스터
8개의 64비트
레지스터
SSE 와 SSE2 레지스터
32 비트
MMX 레지스터
8개의 128비트
레지스터
MXSCR 레지스터
XMM 레지스터
Single-Instruction Multiple-Data(SIMD)

Beginning with the Pentium II and Pentium with Intel MMX technology
processor families, four extensions have been introduced into the IA-32
architecture to permit IA-32 processors to perform single-instruction multipledata (SIMD) operations
 These extensions include the MMX technology, SSE extensions, SSE2
extensions, and SSE3 extensions
 Each of these extensions provides a group of instructions that perform
SIMD operations on packed integer and/or packed floating-point data
elements contained in the 64-bit MMX or the 128-bit XMM registers.
Single-Instruction Multiple-Data(SIMD)
Pentium II
Pentium with MMX
Pentium III
Pentium 4
Intel Xeon
기본 프로그램 실행 레지스터(16개)

범용 레지스터(8개) : 연산항, 포인터 저장

세그먼트 레지스터 : 메모리 세그먼트 식별

EFLAGS 레지스터 : 실행 되고 있는 프로그램 상태보고 및
애플리케이션 레벨로 제한된 프로세서 제어를 한다.

EIP: 다음에 실행될 명령어를 가르킨다.
범용 레지스터의 특별한 사용

EAX : 연산항과 결과에 대한 누산기

EBX : DS 세그먼트의 데이터에 대한 포인터

ECX : 문자열과 반복문에 대한 계수기

EDX : 입출력에 대한 포인터

ESI : 문자열 연산에 대한 출발항 또는 DS 레지스터가 가리키고 있는 세그먼트의
데이터에 대한 포인터

EDI : 문자열 연산에 대한 목적항 또는 ES 레지스터가 가리키고 있는 세그먼트의
데이터에 대한 포인터

ESP : 스택 포인터

EBP : 스택에 있는 데이터에 대한 포인터
범용 레지스터 이름
31
8 7
16 15
0
16-bit
32-bit
AH
AL
AX
EAX
BH
BL
BX
EBX
CH
CL
CX
ECX
DH
DL
DX
EDX
BP
EBP
SI
ESI
DI
EDI
SP
ESP
세그먼트 레지스터
코드
세그먼트
데이터
세그먼트
CS
DS
SS
ES
FS
GS
스택
세그먼트
데이터
세그먼트
데이터
세그먼트
데이터
세그먼트
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
I V V A V R
N
0 0 0 0 0 0 0 0 0 0 D I I C M F 0 T
P F
I
O
P
L
O D I T S Z
A
P
C
F F F F F F 0 F 0 F 1 F
X ID FLAG (ID)
X Virtual Interrupt Pending (VIP)
X Virtual Interrupt Flag (VIF)
X Alignment Check (AC)
X Virtual-8085 Mode (VM)
ㅌ Resume Flag (RF)
X Nested Task (NT)
X I/O Privilege Level (IOPL)
X Overflow Flag (OF)
C Direction Flag (IF)
X Interrupt Enable Flag (IF)
X Trap Flag (TF)
S Sign Flag (SF)
S Zero Flag (SF)
S Auxiliary Carry Flag (AF)
S Parity Flag (PF)
S Carry Flag (CF)
S 상태 (Status) Flag
C 제어 (Control) Flag
X 시스템 (System) Flag
예약 비트
현재 사용하지는 않는다.
8086 프로세서 구조
Execution Unit (EU)
AH
AL
BH
CH
BL
CL
DH
DL
AX
BX
CX
DX
Bus Interface Unit (BIU)
adder
BP
DI
SI
CS
SP
ES
SS
Bus
control
logic
Temporary
reg.
ALU
Flag reg.
EU
control
system
address bus
data bus
DS
IP
control bus
6
5
4
3
2
1
instruction
queue
8086 Pipeline architecture
Fetch Execute Fetch Execute Fetch Execute Fetch Execute Fetch
These bytes are discarded. (why?)
BIU
Read
Fetch Fetch Fetch Fetch Fetch Fetch data Fetch* Fetch* Fetch* Fetch Fetch
EU
Wait Execute Execute Execute Execute2 Wait Execute Execute Execute3 Wait Execute
This instruction requires a request for data not in the queue.
Jump instruction occurs.
명령어의 형태
명령어 코드
(Operator code: op-code)
주소지정방식
레지스터
오퍼랜드
(operand)
}
명령어의 구성 예
7
0
1
1
0
1
0
1
1
명령어 코드(25=32)
4가지의 주소지정 방식
(00:직접, 01:베이스, 10:인덱스, 11:베이스+인덱스)
2개의 레지스터
(0: 바이트, 1: 워드)
명령어의 길이는 레지스터의 개수,
주소지정 방식의 종류,명령어의 종류에 따라 결정
0
명령어의 구성 예
7
0
1
0
1
0
1
1
0
명령어 코드(25=32)
4주소지정방식
00 = 직접
01 = 베이스
10 = 인덱스
11 = 베이스+인덱스
}
1
1 = 워드단위
0 = 바이트
}
8086 명령어의 형태

14개의 기본레지스터

범용레지스터 : 8개

세그먼트 레지스터 : 4개

명령어 포인트 : 1개

플래그 레지스터 : 1개

프로그램에 필요한 레지스터를 명시하기 위하여 3비트 필요
8086 명령어의 형태

레지스터와 데이터버스 : 16비트


레지스터 기록 : 1 사이클
명령어의 일반적 크기 : 1단어

데이터의 크기를 나타내기 위하여 1 비트 필요

주소 지정 방식을 나타내기 위해 2비트 이용

주소버스의 크기 : 20비트
기억장치의 모델

8086 프로세서의 예
바이트주소
0
..
N
..
FFFFF
3
N-2
N
N+1
짝
수
N
N+2
N+3
2
..
..
FFFFE
7
0
1
바이트
2
(
N
0
우
측
바
이
트
(
N-1
N-1
바이트
0
(
1
1
좌
측
바
이
트
홀
수
(
바이트
0
단어주소
15
FFFFE
8
FFFFF
7
0
기억장치의 실제구성
홀수 뱅크
짝수 뱅크
1048575
1048574
.
.
.
..
.
5
4
3
2
1
0
16비트 데이터
8086 프로세서
주소지정에 의한 액세스 효율
번지
기억장치
0000
41
0001
68
0002
64
짝수,홀수번지의
조합  1번 액세스 요구
..
.
00011
C1
00012
B4
00013
41
홀수,짝수번지의
조합  2번 액세스 요구
Why?
데이터 기록시 일반적인 규칙

기억장소주소는 바이트 단위
바이트주소는 1씩 증가
 단어주소는 2씩 증가


N번지의 단어에 접근
→ N,N+1 바이트에 접근

N번지의 긴 단어에 접근
→ N,N+1,N+2,N+3에 접근
기억장치에서 단어 배열
레지스터
51
15
2A
7
0
기억장치
0
N
N+1
N+2
.
.
.
Little-Endian
2A
단어의 하위 바이트
51
단어의 상위 바이트
.
.
.
Big-Endian
레지스터의 종류

데이터 레지스터
* 일시적인 결과 기록
* AX (accumulator), BX (Base), CX (Counter), DX (Data)

포인터 레지스터
* Stack pointer (SP) 와 Base Pointer (BP)

인덱스 레지스터
* Destination Index (DI), Source Index(SI)

플래그 레지스터
* 연산결과의 정보저장

세그먼트 레지스터
* 세그먼트의 시작 주소저장
데이터 레지스터
32비트
16비트
8비트
8비트
EAX
AH
AL
AX
EBX
BH
BL
BX
ECX
CH
CL
CX
EDX
DH
DL
DX
포인터와 인덱스 레지스터
32비트
16비트
ESP
Stack Pointer
SP
EBP
Base Pointer
BP
ESI
Source Index
SI
EDI
Destination Index
DI
세그먼트 레지스터
Code Segment : CS
Data Segment : DS
Stack Segment : SS
Extra Segment : ES
플래그 레지스터의 구성
상위
15 14
13 12
하위
11 10
9
8
7
6
D
I
T
S
Z × A × P × C
× × × × O
오 디 인 트
Set if the signed
버 렉 터 랩
result cannot be
플 션 럽
expressed within the
로
트
number of bits in the
우
인
destination operand.
에
이
블
When set, auto-decrement
5
사 제
인 로
4
보
조
캐
리
Set if result is zero
3
2
패
리
티
1
0
캐
리
Carry or borrow
Set if low-order 8bits of result contain
An even number of 1 bits
The appropriate index register
When set, maskable interrupts will cause the CPU …
Once set, a single-step interrupt occurs after the next instruction executes
플래그 레지스터의 구성 (예)


If AL = 7FH
After ADD AL, 1







AL = 80H
CF= 0
PF= 0
AF= 1
ZF= 0
SF= 1
OF= 1
; 7로 + 1 = 1000 000 = 80H
; there is no carry out of bit 7
; 80H has an odd number of logic ones
; there is a carry out of bit 3 into bit 4
; the result is not 0
; bit seven is a 1
; the sign bit has changed
플래그 레지스터의 구성

TF, IF, and DF


TF


For program debugging
IF


프로그래머에 의해서 set or reset
Extern interrupt  interrupt service routine (ISR)
DF

Block moving (1: decrementing, 0: incrementing)
세그먼트레지스터와 물리주소
16비트
4비트
세그먼트 레지스터값
오프셋(offset)값
CPU로부터 출력되는 실제주소값
메모리 공간에서 세그먼트 영역
FFFFFH
DS
E000
EFFFFH
×16
데이터 세그먼트
E0000H
CS
B3FF
C3FEFH
×16
코드 세그먼트
B3FF0H
7D260H
SS
6D26
×16
스텍 세그먼트
6D260H
6288FH
ES
52B9
엑스트라 세그먼트
×16
52B90H
00000H
논리주소와 물리주소의 관계
1F2A5
물리주소
세그먼트값
세그먼트
베이스주소
1F000
1F00
세그먼트 레지스터값×16
=세그먼트 물리번지
02A5
+
논리주소
02A5
1
+
1
F
0
0
0
0
2
A
5
F
2
A
5
명령어 포인터의 동작
기억장치
코드 세그먼트
8086 CPU
EU
: F0201 주소의
명령 실행
F0000
CS
F000
F0202
F0203
F0204
F0205
명
령
큐
×16
F0001
..
.
F0204
IP
F0206
BIU
F0205
F0206
F0207
레지스터의 특성

직접 엑세스 가능한 레지스터







AX, BX, CX, DX
AH, BH, CH, DH
AL, BL, CL, DL
SI, DI
DS, ES, SS
BP, SP
직접 수정이 가능한 플래그

CF, DF, IF
데이터의 표현
부호있는 숫자의 표현

15
0 ~ 32,767
0
-32,768 ~ -1
0
0
15
1

15
부호없는 숫자의 표현
0 ~ 65,535
0
제 3 장 요약







32비트 인텔 프로세서 이해
8086 프로세서구조 이해, 명령어길이
명령어의 길이와 구성형태를 이해
기억장치 모델과 구성형태를 이해
주소지정과 데이터 기록을 이해 데이터, 포인터, 인덱스,
세그먼트, 플래그레지스터 이해
논리주소는 물리주소로 변환됨
데이터 표현시 부호비트 사용 유무