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 프로세서구조 이해, 명령어길이 명령어의 길이와 구성형태를 이해 기억장치 모델과 구성형태를 이해 주소지정과 데이터 기록을 이해 데이터, 포인터, 인덱스, 세그먼트, 플래그레지스터 이해 논리주소는 물리주소로 변환됨 데이터 표현시 부호비트 사용 유무