마이크로프로세서 응용 및 실습 - 01
x86 마이크로프로세서 개요
Modes of operation
• Protected mode
• 메모리가 세그먼트로 분리되어 보호 됨
• 응용프로그램은 자신의 세그먼트에만 접근 됨
• 모든 운영체제와 응용프로그램이 실행되고 있는 상태
• Real-address mode
• MS-DOS 응용 프로그램이 실행되고 있는 상태
• MS-DOS 응용 프로그램은 모든 물리 주소 공간에 접근 가능
• Windows 95/98
• Virtual-8086 mode
• Windows NT, Windows 2000, Windows XP-32bit
• MS-DOS 응용프로그램을 실행시키기 위한 가상의 real-address mode를 제공
• System management mode
Addressable memory
• Protected mode
• 4 GB space
• 32-bit address
• Real-address and virtual-8086 modes
• 1 MB space
• 20-bit address
• 가상 8086 모드에서는 각 응용프로그램이 1MB의 메모리 공간을 갖는 다
Registers
• 8개의 범용레지스터, 6개의 세그먼트레지스터, 하나의 명령 어 포인터 (EIP), 플레그 레지스터 (EFLAGS)
CS SS DS
ES
EIP EFLAGS
16-bit Segment Registers EAX
EBX ECX EDX
32-bit General-Purpose Registers
FS GS EBP
ESP ESI EDI
General purpose registers
• EAX, EBX, ECX, EDX 등은 32bit, 16bit, 8bit 접근을 위 한 별도의 명명을 가짐
AH AL
16 bits 8
AX
EAX
8
32 bits 8 bits + 8 bits
General purpose registers
• ESI, EDI, EBP, ESP는 32bit, 16bit 명명만 가짐
General purpose registers
• EAX - 곱셈과 나눗셈에서 accumulator로 자동 사용
• ECX - Loop의 카운터로 자동 사용
• ESP - stack pointer
• ESI와 EDI - index register,
• ESI => source, EDI => destination
• move 명령어를 위한 주소지정을 인덱스 방식으로 하는 경우
• EBP - frame pointer, 스택이 고급언어의 함수 호출에 사용되는 경우, 매 개변수와 지역변수를 참조
Other registers
• Segment register
•세그먼트 테이블의 시작주소를 가리킴
• CS- code segment
• DS- data segment
• SS- stack segment
• ES, FS, GS - additional segments
•EIP
• PC 저장
•EFLAG
• 제어플래그 (control flag)
• CPU 동작모드를 지정
• 예) 명령 완료 후 CPU 동작 중지, 오버플로우가 발생하면 인터럽트 발생, 가상8086 모드 <-> 보호모드
• 상태플래그 (status flag)
• 연산의 결과를 표현
Other registers
•
Status flags
•
Carry - 부호없는 연산의 오버플로우
•
Overflow - 부호있는 연산의 오버플로우 또는 언더플로우
•
Sign - 결과가 음수
•
Zero- 결과가 0
•
Auxiliary carry - 4bit에서 carry 발생, BCD 연산에서 사용
•
Parity - 1의 개수가 짝수
Other registers
• MMX register
• Multimedia 성능을 향상시키기 위한 특별한 명령어들이 취급하는 데이터가 저장되어 있는 레지스터
• 이 특별한 명령어들은 SIMD, 즉, 하나의 명령어로 MMX 레지스터에 있는 복수개의 데이터 를 병렬로 처리 가능
• 총 8개가 있으며, 각각은 64bit
• XMM 레지스터
• 펜티엄 III 에서 새롭게 추가된 70개의 SSE (Streaming SIMD Extension) 명령어들을 위한 데이터 레지스터
• MMX 처럼 멀티미디어 성능을 향상시키는 명령어들
• 총 8개, 각각은 128 bit
Other registers
• 80-bit floating-point data registers
• 총 8개
• FPU에 의해 사용
ST(0) ST(1) ST(2) ST(3)
80-bit Data Registers
FPU Data Pointer
Tag Register Control Register
Status Register ST(4)
ST(5) ST(6) ST(7)
FPU Instruction Pointer
Opcode Register
16-bit Control Registers 48-bit Pointer Registers