2016년 10월 9일 일요일

ASSEMBLY LANGUAGE FOR X86 PROCESSORS CHAPTER2

CPU는 register 라고 하는 제한된 수의 기억장치와 쿨럭 제어장치 논리연산장치를 포함

클럭 - 시스템 구성요소롤 cpu의 내부와 동기시킨다
제어장치 (CU) - 기계 명령어를 실행하는 데 수반되는 단계들의 순서를 조정한다
논리연산장치 - AND OR NOT 연산 수행

bus(버스)는 데이터를 컴퓨터의 한 부분에서 다른 부분으로 전송하는 병렬 와이어 이다
데이터 버스 입출력 버스 제어 버스 주소 버스

클럭: CPU와 system bus를 포함하는 각 동작은 일정한 속도로 진동하는 내부 클럭에 동기가 되는데 이 시간의 기본 단위는 기계사이클 이다. 클럭사이클 이라고도 함

기계어 명령어 수행에 적어도 1클럭 이상 필요
복잡한 명령어는 많은 클럭 사이클이 필요
메모리 접근 시 느린 메모리 속도 때문에 대기상태 사이클 존재
메모리 접근 속도 높이기 위해 고속 캐시 메모리 사용 ( 한번읽은것을 복사하고사용)

-----------------
x86구조 세부사항

x86 프로세서는 보호모드 실제주소모드 시스템관리모드 이 세가지 주요 동작가짐.

보호모드 - protected 모드는 모든 명령어와 특징을 사용할 수 있는 프로세서의 고유한 상태이다. 세그먼트라고 하는 분리된 메모리 영역이 주어지며 프로세서는 지정된 세그먼트 바깥의 메모리를 참조하는 것을 방지한다

실제 주소모드 - real address mode 는 다른 모드로 전환하는 능력과 같은 몇 개의 추가적인 특징을 가진 인텔 프로그래밍 환경을 구현한다. 시스템 메모리와 하드웨어 장치에 직접 접근할 필요가 있는 프로그램을 실행하는 데에 사용될 수 있다.

시스템 관리모드 - 운영체제에 전원 관리와 시스템 보안과 같은 기능을 구현하는 방법을 제공한다.

virtual 8086 mode-
protected mode에서 real address mode용 프로그램을 그대로 수행할 수 있도록 주소변환을 하는 동작 모드
여러 개의 MS DOS 프로그램을 실행시킬 수 있음.


x86 processor는 CISC 계열이다

-----
주소공간
real address mode, virtual 8086 mode -> 주소비트수가 20이라 크기가 2^20=1MB
protected mode 0> 주소크리가 32biㅅ 2^32 = 4GB이다

레지스터는 cpu바로 안에 있는 고속 저장장소이며 일반 메모리보다 훨씬 빠른 속도로 접근되도록 설계

8개의 범용레지스터와 6개의 세그먼트 레지스터 플래그 레지스터 명령어 포인터로 구성

32-bit gereral purpos


범용 레지스터는 계산과 데이터 전송에 주로 사용된다. 하위 16비트로도 참조 될수 있다
어떤 레지스터들은 8비트 값으로 다룰 수 있다.

세그먼트 레지스터
segment의 시작주소 지정에 사용된다
실제 주소모드에서 16비트.
code segment data segment stack segment

메모리 주소는
segment 시작주소 + offset 주소

명령어 포인터 EIP 는 실행할 다음명령어의 주소를 포함한다.

플래그 레지스터

제어 플래그 :
cpu 동작을 제어한다 모든 명령어가 실행된 후에 cpu를 멈추게 하고 산술 오버플로우가 감지됐을 때 인터럽트 발생

상태플래그:
산술 논리 연산의 결과를 반여한다 .
오버플로우 부호 제로 보조캐리 패리티 캐리
OF SF ZF AC PF CF

---------------
메모리 관리
메모리 상의 데이터 주소 지정
2BYTE  이상의 데이터는 2개 이상의 연속적인 주소의 메모리에 저장됨
리틀 엔디안 방식 사용 - 하위 바이트가 낮은 주소
Register 052B ---> 주소 a = 2B 주소 a+1= 05

real address mode 16진수 주소 00000 -FFFFF 까지 1MB 메모리 주소 지정
프로세서는 한번에 하나 의 프로그램 실행

protected mode 동시에 여러개 프로그램 실행가능
각 프로세스에 총 4GB 메모리 할당

가상 8086

세그먼트와 주소지정
선형주소 = 주소 ( segment + offset) 으로 된 2차원 주소를 단일 주소로 바꾼것
paging 을 사용하지 않으면 => 선형주소 = 메모리주소
paging 을 사용하면 : 선형주소와 메모리주소는 다르다
address=(segment<<4)+offset

균일 세그먼트 모델
모든 세그먼트가 32bit 전체 메모리 공간에 맵핑
전체 메모리를 단일 세그먼트로 사용
offset주소 = 선형주소
메모리 주소 = 세그먼트 주소 (0) + offset

다중 세그먼트 모델
각 프로그램은 자신의 세그먼트 테이블은 가짐
자신의 LDT에 세그먼트 들의 segment 를 정의함

페이징
페이징을 지원한다 페이징은 동시에 실행 중인 모든 프로그램이 사용하는 전체 메모리가 컴퓨터의 물리적 메모리보다 훨씬 더 커도 되게한다


---------------
CISC - 많은 수의 명령어들로 구성됨
RISC - 적은 수의 짧고 간단한 명령어들로 구성됨

PCI 병렬 PCI express 버스 = 직렬
ROM = 비휘발성 MEMORY


------------



댓글 없음:

댓글 쓰기