1 / 108

80×86 시스템에 대한 이해

2. 80×86 시스템에 대한 이해. 학습목표 80×86 시스템CPU의 구조를 이해한다. 80×86 시스템의 메모리 구조와 동작 원리를 이해한다. 어셈블리어를 이해한다. 80×86 시스템의 스택에서 명령을 처리하는 구조를 이해한다 . 내용 80×86 시스템 CPU 와 레지스터 80×86 시스템의 메모리 어셈블리어의 기본 문법과 명령 스택을 통한 명령 처리 과정. [ 표 2-1] 인텔 CPU 모델별 관련 정보. 80×86 시스템 CPU 와 레지스터.

todd-hinton
Download Presentation

80×86 시스템에 대한 이해

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2 80×86 시스템에 대한 이해

  2. 학습목표 • 80×86 시스템CPU의 구조를 이해한다. • 80×86 시스템의 메모리 구조와 동작 원리를 이해한다. • 어셈블리어를 이해한다. • 80×86 시스템의 스택에서 명령을 처리하는 구조를 이해한다. • 내용 • 80×86 시스템 CPU와 레지스터 • 80×86 시스템의 메모리 • 어셈블리어의 기본 문법과 명령 • 스택을 통한 명령 처리 과정

  3. [표 2-1] 인텔 CPU 모델별 관련 정보 80×86 시스템 CPU와 레지스터

  4. 80×86 시스템 CPU의 구조와 레지스터 • 80×86 시스템 CPU의 구조

  5. 80×86 시스템 CPU의 구조 연산장치 연산 장치(ALU:Arithmetic and Logic Unit)는 CPU(중앙 처리 장치)의 핵심 부분 중 하나로, 산술과 논리 연산을 수행하는 연산 회로 집합으로 구성 [표 2-2] 연산 장치의 구성 요소 80×86 시스템 CPU의 구조와 레지스터

  6. 80×86 시스템 CPU의 구조 제어장치 제어 장치(Control Unit)는 입력, 출력, 기억, 연산 장치를 제어하고 감시, 주기억 장치에 저장된 명령을 차례로 해독하여 연산 장치로 보내 처리되도록 지시 [표 2-3] 제어 장치의 구성 요소 레지스터 처리 중인 데이터나 처리 결과를 임시 보관하는 CPU 내의 기억 장치 80×86 시스템 CPU의 구조와 레지스터

  7. 80×86 시스템 CPU의 구조와 레지스터 • 레지스터의 종류와 기능 • [표 2-4] 레지스터의 종류와 용도

  8. 레지스터의 종류와 기능 [표 2-4] 레지스터의 종류와 용도 80×86 시스템 CPU의 구조와 레지스터

  9. 레지스터의 종류와 기능 [표 2-5] 레지스터의 종류와 용도 범용 레지스터 80×86 시스템 CPU의 구조와 레지스터

  10. 레지스터의 종류와 기능 범용 레지스터 연산 장치가 수행한 계산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인 등의 목적으로 사용될 수 있는 레지스터 EAX, EBX, ECX, EDX등. EAX, EBX, ECX, EDX는 32비트 레지스터로 앞의 E는‘확장된(Extended)’을 의미. 이 레지스터의 오른쪽 16비트를 각각 AX, BX, CX, DX라 부르고, 이 부분은 다시 둘로 나뉜다. 예를 들어, AX는왼쪽 8비트 상위(high) 부분을AH, 오른쪽 8비트 하위(low) 부분을AL이라 한다. 80×86 시스템 CPU의 구조와 레지스터

  11. 범용 레지스터 EAX 레지스터 : 누산기, 입출력과 대부분 산술 연산에 사용 EBX 레지스터 : DS 세그먼트에 대한 포인터를 주로 저장 ESI나 EDI와 결합하여 인덱스에 사용 ECX 레지스터 : 루프가 반복되는 횟수를 제어하는 값 왼쪽이나 오른쪽으로 이동되는 비트 수 등을 포함 EDX 레지스터: 입출력 연산에 사용, 큰 수의 곱셈과 나눗셈 연산에서 EAX와 함께사용 80×86 시스템 CPU의 구조와 레지스터

  12. 세그먼트 레지스터 : 프로그램에 정의된 메모리상의 특정 영역 코드, 데이터, 스택 등을 포함 CS, DS, SS 3개의 레지스터가 기본 ES, FS, GS 레지스터는 여분 CS 레지스터 : 기계 명령을 포함. 코드세그먼트의 시작 주소를 가리킴. DS 레지스터 : 프로그램에 정의된 데이터, 상수, 작업 영역을 포함. 데이터 세그먼트의 시작 주소를 가리킴. 데이터의 오프셋을 DS 레지스터에 저장된 주소 값에 더해 데이터 세그먼트 내에 위치해 있는 데이터의 주소를 참조. SS 레지스터 : 실행 과정에서 필요한 데이터나 연산 결과 등을 임시로 저장하거나 삭제할 때 사용 스택 세그먼트의 시작 주소를 가리킨다. ES, FS, GS 레지스터 : ES 레지스터는 추가로 사용된 데이터 세그먼트의 주소를 가리킴. FS와 GS 레지스터도 목적은 이와 비슷, 거의 사용되지 않음. 80×86 시스템 CPU의 구조와 레지스터

  13. 포인트 레지스터 : 프로그램 실행 과정에서 사용되는 주요 메모리 주소값을 저장 EBP, ESP, EIP가 있다. EBP 레지스터 : 스택 세그먼트에서 현재 호출되어 사용되는 함수의 시작 주소 값 저장. 함수로 전달되는 지역변수 등을 참조할 때 기준, ESP 레지스터와 함께 사용되어 스택 프레임(stack frame)을 형성. 실제 메모리상의 주소를 참조할 때 SS(Stack Segment) 레지스터와 함께 사용. ESP 레지스터 : 현재 스택 영역에서 가장 하위 주소를 저장. EBP와 마찬가지로 실제 메모리상의 주소를 참조할 때 SS(Stack Segment) 레지스터와 함께 사용. EIP 레지스터 : 다음에 실행될 명령의 오프셋을 포함. CS(Code Segment) 레지스터와 함께 사용. 인덱스 레지스터 ESI & EDI : 메모리의 한 영역(Souce)에서 다른 영역(Destination)으로 데이터를 연속적으로 복사할 때 사용 80×86 시스템 CPU의 구조와 레지스터

  14. 플래그 레지스터 : 32비트로, 컴퓨터의 다양한 상태를 나타내는 비트 포함. 상태 플래그, 제어 플래그, 시스템 플래그로구성 상태 플래그 : 산술 명령(ADD, SUB, MUL, DIV) 결과를 반영. - CF(Carry Flag, 비트 0) : 산술 연산 결과로 자리올림, 자리내림 발생할 때 세트(1). -ZF(Zero Flag, 비트 6) : 산술 연산 결과 0이면 세트(1), 이외에는 클리어(0). - OF(Overflow Flag, 비트 11) : 부호가 있는 수의 오버플로우가 발생하거나 MSB(MostSignificant Bit)가 변경되었을 때 세트 80×86 시스템 CPU의 구조와 레지스터

  15. 플래그 레지스터 제어 플래그(Control Flag) : 스트링 명령(MOVS, CMPS, SCAS, LODS, STOS)을 제어. DF가 1이면 스트링 명령 자동 감소, 0이면 자동 증가 STD/CLD 명령은 각각DF 플래그를 세트(1), 클리어(0). 시스템 플래그(System Flag) - TF(Trap Flag, 비트 8) : 디버깅 시‘Single Step Mode’모드를 활성화하면 세트 - IF(Interrupt enable Flag, 비트 9) : 프로세서의 인터럽트 처리 여부를 제어 - IOPL(I/O Privilege Level, 비트 12/13) : 현재 실행되는 프로그램, 태스크의 입출력 특권 레벨 지시 - NT(Nested Task flag, 비트 14) : 인터럽트되거나 호출된 태스크를 제어 - RF(Resume Flag, 비트 16) : 프로세서의 디버그 예외 반응을 제어 - VM(Virtual 8086 Mode flag, 비트 17) : V86 모드를 활성화하면 세트 - AC(Alignment Check, 비트 18) : 메모리 참조 시 정렬 기능을 활성화하면 세트 - VIF(Virtual Interrupt Flag, 비트 19), VIP(Virtual Interrupt Pending, 비트 20) : 가상 모드 확장과 관련해 사용 - ID(IDentification, 비트 21) : CPUID 명령의 지원 유무를 결정 80×86 시스템 CPU의 구조와 레지스터

  16. 메모리의 기본 구조 스택 :후입선출(LIFO : Last-In, First Out) 방식에 의해 정보를 관리. Top이라고 불리는 스택의 끝부분에서 데이터의 삽입과 삭제가 발생. 가장 나중에 삽입된 정보가 가장 먼저 읽힘 80×86 시스템의 메모리

  17. 메모리의 기본 구조 힙 : 프로그램의 실행 중 필요한 기억 장소를 할당하기 위해 운영체제에 예약되어 있는 기억 장소영역. 데이터를 저장하기 위해 기억 장소를 요청하면 운영체제는 힙에 존재하는 기억 장소를 프로그램에 할당. 기억 장치가더 이상 필요 없으면 할당 받았던 기억 장소를 운영체제에 반납, 운영체제에서는반납된 기억 장소를 다시 힙에 돌려줌. 힙에 대한 기억 장소는 포인터를 통해 동적으로할당되거나 반환. 연결 리스트,트리, 그래프처럼 동적인 특성이 있는 데이터구조에서널리 사용 데이터 세그먼트 :초기화된 외부 변수나 static 변수 등이 저장되는 영역 보통 텍스트 세그먼트(Text segment)와 데이터 세그먼트 영역을 합쳐 프로그램이라 한다. 80×86 시스템의 메모리

  18. 메모리의 기본 구조 BSS 세그먼트 : 초기화 되지 않은 데이터 세그먼트(Uninitalized data segment)라고 불리며, 프로그램이 실행될 때 0이나 NULL 포인터로 초기화. 외부 변수나 static 변수중 초기화 되지 않은 변수들이 정의될 때 저장 데이터 세그먼트 : CPU에 의해 실행되는 머신 코드가 있는 영역 80×86 시스템의 메모리

  19. 메모리 접근 모드와 동작 실제 모드: 8086 CPU에서 사용되던 동작 모드. 20비트 주소 버스 사용 위해 16비트 레지스터 사용. 총1MB(220 =1,048,567)의 메모리 사용 가능. 20비트 주소를 나타내기 위해 세그먼트 레지스터를 도입 [그림 2-8]과 같이 16비트의 세그먼트 레지스터와 16비트의 오프셋을 중첩시킨 20비트의 물리 주소를 생성 80×86 시스템의 메모리

  20. 메모리 접근 모드와 동작 세그먼트 주소인 CS 레지스터가 0x2525h, 오프셋인 IP가 0x95F3h면 0x2525h뒤에 한 자리의 0x0h를 붙여 95F3h를 더한 2E843h가 실제 가리키는 물리 주소가 됨 2525h :95F3h, 또는 [CS]:96F3h로 표현하나의 세그먼트에 64KB(216 =65,536)의 메모리 사용 [표 2-6] 세그먼트 레지스터별 기본 오프셋 레지스터 80×86 시스템의 메모리

  21. 메모리 접근 모드와 동작 보호 모드: 80286부터 도입된 보호 모드(Protected Mode)는 32비트 CPU 80386에 완성. 32비트 주소 버스를 통해 4GB의메모리를 사용가능, 메모리 보호 기능과 페이징(Paging) 등을 통해 가상 메모리를효율적으로 구현 세그먼테이션(Segmentation)과 페이징 이용 메모리 관리. 세그먼테이션은 4GB의 메모리를 세그먼트 단위로 쪼갠 것으로, 여기서는 16비트의 셀렉터와 32비트의 오프셋을 이용해 4GB 범위의 32비트 선형 주소(linear address)를 만듬. 80×86 시스템의 메모리

  22. 어셈블리어의 구조 Intel 문법과 AT&T 문법이 있다. 윈도우에서는 Intel 문법 사용 리눅스에서는 AT&T 문법 사용 Intel 문법에서는 목적지 (destination)가 먼저 오고 원본(source)이 뒤에 위치 AT&T에서는 반대. Intel 문법에서 어셈블리어의 명령 형식은 다음과 같다. 어셈블리어의 기본 문법과 명령 • Label : MOV AX,BX ;comment • 라벨 작동 코드 제1피연산자 제2피연산자 설명

  23. 어셈블리어의 데이터 타입과 리틀 엔디언 방식 데이터 타입 바이트(Byte) : 1바이트(8비트) 데이터 항목 워드(Word) : 2바이트(16비트) 데이터 항목 더블워드(Doubleword) : 4바이트(32비트) 데이터 항목 어셈블리어의 기본 문법과 명령

  24. 어셈블리어의 데이터 타입과 리틀 엔디언 방식 리틀 엔디언 방식 : 2개의 번지로 나누어 저장해야 하는 16비트 데이터(워드)의 경우 하위 바이트는 하위 번지에 상위바이트는 상위 번지에 저장. 예) hex 값 0x34F3을 1500번지에 저장하려면 하위값 0xF3은 1500번지에,상위 값 0x34는 1501번지에 저장 어셈블리어의 기본 문법과 명령

  25. 어셈블리어의 주소 지정 방식 레지스터 주소 지정 : 레지스터의 주소 값을 직접 지정 복사, 처리 속도 가장 빠름 직접 메모리 주소 지정 :가장 일반적인 주소 지정 방식. 보통 피연산자 하나가 메모리 위치를 참조하고 다른 하나는 레지스터를 참조. (예)DS:[8088h]와 DS:[1234h]는 각각‘세그멘트:오프셋’형식의 메모리에 직접 접근하는 방식 어셈블리어의 기본 문법과 명령 • MOV DX, BX • MOV AL, DS:[8088h] • MOV DS:[1234h], DL

  26. 레지스터 간접 주소 지정 :‘세그멘트:오프셋’형식을 사용 다음과 같이 기본이 아닌 세그먼트를 강제로 지정 할 수도 있다. 어셈블리어의 기본 문법과 명령 • MOV AL, [BX] • MOV AL, [BP] • MOV AL, CS:[BX] • MOV AL, DS:[BP]

  27. 인덱스 주소 지정 : 레지스터 간접 지정 방식에 변위가 더해진 메모리 주소 지정 방식 (예)20h만큼 더해 메모리를 참조한 명령 다음과 같이 바꿔서 표현 할 수 있다. 어셈블리어의 기본 문법과 명령 • MOV AL, [BX+20h] • MOV AL, [BP+20h] • MOV AL, 20h[BX] • MOV AL, 20h[BP]

  28. 베이스 인덱스 주소 지정 : 실제 주소 생성 위해 베이스 레지스터(BX 또는 BP)와 인덱스 레지스터(DI 또는 SI)를 결합. 2차원 배열의 주소 지정에 사용 다음과 같이 바꿔서 표현 할 수 있다. 어셈블리어의 기본 문법과 명령 • MOV AL, [BX+SI] • MOV AL, [BP+SI] • MOV AL, [BX][SI] • MOV AL, [BP][SI]

  29. 변위를 갖는 베이스 인덱스 주소 지정 : 베이스-인덱스의 변형으로 실제 주소 생성 위해 베이스 레지스터, 인덱스 레지스터, 변위 결합 어셈블리어의 기본 문법과 명령 • MOV AL, [BX+SI+20h] • MOV AL, [BP+SI+20h]

  30. 어셈블리어의 기본 명령 산술 연산 명령 : 기본적인 정수 계산 ADD(Add) : 제1피연산자와 제2피연산자 값을 더한 결과 값을 제1피 연산자에 저장 SUB(Subtract) : 제1피연산자에서 제2피연산자 값을 뺀 결과 값을 제1피연산자에 저장 CMP(Compare) : 데이터의 두 값 비교시 사용. ‘cmp a, b’의 경우 a에서 b를 뺀 값이 0이면 참 어셈블리어의 기본 문법과 명령

  31. 어셈블리어의 기본 명령 기타 산술 연산 명령 [표 2-7] 기타 산술 연산 명령 어셈블리어의 기본 문법과 명령

  32. 어셈블리어의 기본 명령 기타 산술 연산 명령 [표 2-7] 기타 산술 연산 명령 어셈블리어의 기본 문법과 명령

  33. 어셈블리어의 기본 명령 데이터 전송 명령 : 메모리, 범용 레지스터, 세그먼트 레지스터로 참조되는 주소에 존재하는 데이터 전송 MOV(Move) : 데이터 이동할 때 사용 BP의 현재 값이 0x10000004라면, BP+8은 0x1000000C 0x1000000C에 있는 값이 1024므로 AX에는 1024가 입력 어셈블리어의 기본 문법과 명령

  34. 어셈블리어의 기본 명령 PUSH(Push) : 스택에 데이터를 삽입할 때 사용. [그림 2-19]와 같이 스택은 커지고, 스택 포인터(Stack Pointer)는 데이터 크기만큼 감소 어셈블리어의 기본 문법과 명령

  35. 어셈블리어의 기본 명령 POP(Pop) : 스택에서 데이터 삭제할 때 사용. 스택에서 삭제된 명령은 반환 값으로 받아 사용 가능 [그림2-20]과 같이 스택 포인터는 삭제하는 데이터 크기만큼 증가 어셈블리어의 기본 문법과 명령

  36. 어셈블리어의 기본 명령 LEA(Load effective address to register) : 데이터의 값 이동할 때 사용, MOV 명령과 LEA 명령에서 제1피연산자는 데이터 이동 공통, 제2피연산자에 대한 추가 연산의 처리 방식은 다르다. 제2피연산자에‘BP+4’가 있을 경우MOV 명령은‘BP+4’를 하나의 주소 값으로 처리 LEA 명령은‘BP’만 주소 값으로인식‘+4’는BP 주소 값에 대한 추가 연산으로 처리 어셈블리어의 기본 문법과 명령

  37. 어셈블리어의 기본 명령 기타 데이터 전송 명령 [표 2-8] 기타 데이터 전송 명령 어셈블리어의 기본 문법과 명령

  38. 어셈블리어의 기본 명령 논리 명령 : 연산부호가 논리연산을 지정하는 명령으로 자리옮김, 논리 합(OR), 논리곱(AND), 기호 변환 등이 있다 AND(And) : 대응되는 비트가 둘 다 1일 때만 결과가 1 이고, 그 이외는 모두 0 어셈블리어의 기본 문법과 명령

  39. 어셈블리어의 기본 명령 OR(Or) : 대응되는 비트 중 하나만 1이어도 결과가 1이고, 둘 다 0인 경우에만 0 어셈블리어의 기본 문법과 명령

  40. 어셈블리어의 기본 명령 XOR(Exclusive Or) : 대응되는 비트 중에서 한 비트가 1이고 다른 비트가 0이면 1 두 개의 비트가 모두 0 또는 1일 때 0 어셈블리어의 기본 문법과 명령

  41. 어셈블리어의 기본 명령 NOT(Invert) : 피연산자의 1의 보수를 구하는 작동 코드로, 각 비트를 반전 어셈블리어의 기본 문법과 명령

  42. 어셈블리어의 기본 명령 Test(And function to flags, no result) : 데이터의 두 값 비교할 때 사용 데이터의 변경 없이 단순 비교 어셈블리어의 기본 문법과 명령

  43. 어셈블리어의 기본 명령 기타 논리 명령 : 데이터의 두 값을 비교할 때 사용, 데이터의 변경 없이 단순 비교 [표 2-9] 기타 논리 명령 어셈블리어의 기본 문법과 명령

  44. 어셈블리어의 기본 명령 스트링 명령 : 바이트로 구성된 스트링(strings of bytes)을 메모리 내에서 전송 REP(Repeat) : ADD나 MOVS와 같은 작동 코드의 앞에 위치, CX가 0이 될 때까지 뒤에오는 스트링 명령 반복 MOVS(Move String) : 바이트나 워드, 더블워드 옮기는 명령 MOVSB, MOVSW, MOVSD 가 있다 DS:SI가 지시한 메모리 데이터를 ES :DI가 지시한 메모리로 전송 어셈블리어의 기본 문법과 명령

  45. 어셈블리어의 기본 명령 기타 스트리밍 [표 2-10] 기타 스트링 명령 어셈블리어의 기본 문법과 명령

  46. 어셈블리어의 기본 명령 제어 전송 명령 : 점프(분기, Jump), 조건 점프(조건 분기, Conditional jump), 루프(Loop), 호출(Call)과 리턴(Return) 연산 등으로 프로그램의 흐름 제어 JMP(Unconditional Jump) : 대표적인 점프 명령 프로그램을 실행할 주소 또는 라벨로 이동 어셈블리어의 기본 문법과 명령

  47. 어셈블리어의 기본 명령 [표 2-11] 조건부 점프 명령 어셈블리어의 기본 문법과 명령

  48. 어셈블리어의 기본 명령 [표 2-11] 조건부 점프 명령 * above, below : 부호 없는 두 수의 크기 관계 * greater, less : 부호 있는 두 수의 크기 관계 어셈블리어의 기본 문법과 명령

  49. 어셈블리어의 기본 명령 CALL(Call) : JMP처럼 함수 호출할 때 사용, 제1피연산자에 라벨을 지정 리턴 주소로 IP(Instruction Pointer) 주소 백업 ‘PUSH EIP + JMP’와 같은 의미 RET(Return from CALL) : 함수에서 호출한 곳으로 돌아갈 때 사용하는 명령‘POP EIP’와 같은 의미 CALL과 RET의 예. 가정, AX에는 0x08h 값이 저장 SUBR 함수 호출하면, SUBR 라벨이 있는 곳에서 RET까지 실행. INC AX가 있으므로 AX는 0x09h RET 명령이 실행되면 CALL 다음 라인인 ‘ADD AX, 10h’ 실행 AX는 0x19h 어셈블리어의 기본 문법과 명령 • RET • CALL SUBR • ADD AX, 10h • ... • SUBR : INC AX • .... • RET

  50. 어셈블리어의 기본 명령 LOOP(Loop CX times) : 문장들의 블록을 지정된 횟수만큼 반복. CX는 자동적으로 카운터로 사용되며 루프 반복할 때마다 감소 INT(Interrupt) : 인터럽트가 호출되면 CS:IP(Code Segment : Instruction Pointer)와 플래그를 스택에 저장 그 인터럽트에 관련된 서브 루틴이 실행 어셈블리어의 기본 문법과 명령

More Related