1. 프로그램 세그먼트의 개요

최소한 3개의 세그먼트로 구성 : 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트

코드 세그먼트 : 프로그램이 수행해야 할 명령어들을 가지고 있다

데이터 세그먼트 : 코드 세그먼트에 있는 명령어 들이 처리해야 할 데이터를 저장하는 곳

스택 세그먼트 : 일시적으로 정보를 보관하는 곳

 

1.1 세그먼트의 시작 위치와 정의

세그먼트 : 메모리의 한 영역, 최대 64kb의 공간을 차지, 시작번지는 0H로 끝나는 번지로 항상 16으로 나누어 떨어져야 한다.

 

1.2 논리 번지와 물리 번지

물리번지(physical address) : CPU의 어드레스 핀에 출력, 메모리 인터페이스 회로에 의해 디코드되는 20비트 번지, 8086 명 리얼모드(286, 386, 486)에서 모두 00000H~FFFFFH. 1mb의 메모리 범위 내에 있음. ROM, RAM의 실제 번지.

옵셋 번지(offset address) : 64kb 세그먼트 범위 내에 있는 번지로 0000H~FFFFH의 값을 가짐.

논리 번지(logical address) : 세그먼트의 값과 옵셋 번지로 결정


ex) CS:IP 24F6:634A

논리번지 : 24F6:634A

옵셋번지 : 634A

물리번지 : 24F60H + 634AH = 2B2AAH

(H는 16진수를 표현한다.)  

물리번지의 최소값 : 24F60 + 0000 = 24F60

코드 세그먼트의 최대값 : 24F60 + FFFF = 34F5F

 

1.3 코드 세그먼트

프로그램을 수행하기 위해 8086은 명령어를 코드 세그먼트에서 읽어옴. 명령어의 논리 번지는 항상 CS(code segment)와 IP(instruction pointer)로 구성되며 CS:IP로 표현한다.

 

1.4 리틀 엔디언 규칙

16비트의 데이터를 저장할 땐, 하나의 번지에 1바이트의 데이터가 저장되므로 2개의 번지에 나누어야 하는데 그때 하위바이트는 아래쪽의 번지에, 상위 바이트는 위쪽의 번지에 저장하는 것을 말한다.

 

1.5 엑스트라 세그먼트

ES(extra segment)는 여분의 데이터 세그먼트로 쓰임. 문자열(string)을 다루는 데 있어서 중요한 역할을 한다.

 

1.6 IBM PC의 메모리 맵

RAM

640K

00000H ~ 9FFFFH

(0~255 : 인트럽터벡터테이블,

BIOS 데이터 영역)

Video Display

RAM 238K

A0000H ~ BFFFFH

ROM

256K

C0000H ~ FFFFFH

(F0000H ~ FFFFFH 까지만 BIOS에 의해 사용)


1.6.1 RAM

휘발성 메모리로써 메모리를 관리하는 일은 아주 복잡하기 때문에 사용자에게 맡겨지지 않고 DOS에 맡겨진다. 일반 사용자는 물리 번지를 지정하는 것에 대한 지식이 없기 때문에 CS, DS, SS 같은 세그먼트 레지스터의 값을 직접 다루지 않는다.

 

1.6.2 ROM

비휘발성 메모리로 C0000H에서 FFFFFH까지가 ROM을 위한 할당이다. 이중 F0000H에서 FFFFFH까지의 64KB만 BIOS에 의해 사용된다. 그 외의 공간은 여러 가지 어댑터 카드에 의해 쓰이거나 비어 있다.

 

1.6.3 BIOS ROM의 기능

CPU는 메모리에 저장되어 잇는 프로그램만 수행할 수 있으므로 전원 스위치를 켰을 때 CPU가 수행해야 할 프로그램을 보관하고 있는 비휘발성 메모리가 필요하다. ROM에 저장되어 있는 이런 프로그램들 PC에서는 BIOS라고 하며, RAM과 CPU에 저장되어 있는 여러 가지 장치를 테스트하고 에러를 사용자에게 알려준다. 주변기기에 대한 테스트와 초기화가 모두 끝나게 되면 DOS를 RAM에 적재하고, PC의 컨트롤을 DOS에게 넘겨준다.

 

 

 

 

 

 

 

 

컴퓨터의 내부 구조

모든 컴퓨터의 내부 구조는 크게 세 부분으로 나누어진다. : 

  CPU(Central Processing Unit, 중앙처리장치), 메모리, I/O(Input/Output, 입출력) 장치.

CPU는 버스(bus)라 불리는 여러 가닥의 전선을 통해 메모리와 I/O장치에 연결되어 있다.

컴퓨터에는 어드레스 버스(address bus), 데이터 버스(data bus), 컨트롤 버스(control bus)의 세 가지 종류의 버스가 있다.


버스(bus) : 구성 요소들간에 교환할 각종 정보들을 전송하는 선(line)들로 구성.

1) 데이터 버스(data bus)

  · CPU와 장치 사이의 정보 교환을 위한 선들의 집합.

  · 양방향 전송.

  · 크기가 클수록 CPU의 성능이 좋다고 할 수 있다.

2) 어드레스 버스(address bus)

  · CPU에 연결된 메모리와 장치를 선택하기 위한 선들의 집합.

  · 단방향 전송

  · 클수록 더 많은 양의 메모리 혹은 장치를 번지지정할 수 있다.(기억장치의 용량이 결정)

    x를 어드레스 라인의 수라고 할 때 메모리의 최대 위치 개수는 

3) 컨트롤 버스(control bus)

  · CPU와 기억장치 및 I/O 장치 사이에 제어 신호들을 전송하는 선들의 집합.


CPU와 RAM, ROM과의 관계

CPU가 처리할 정보는 RAM이나 ROM에 저장되어 있어야 한다. ROM(Read Only Memory)은 비휘발성 메모리로써 컴퓨터 작동에 필수적인 프로그램, RAM을 테스트하고 설치된 RAM의 크기를 알아내는 프로그램등 변하지 않고 꼭 필요한 정보만을 보관하고 있다가 CPU에 제공한다. RAM(Random Access Memory)은 전원을 끄면 보관되어 있던 데이터는 모두 사라지는 휘발성 메모리로써 실행되고 있는 프로그램을 일시적으로 저장하거나 사용자나 프로그램에 의해 내용을 바꿀수 있는 정보를 저장하기 위해 사용되며 예로 들면 워드프로세싱, 운영체제등 응용프로그램들이 해당된다.

CPU는 처리할 정보를 먼저 RAM, ROM에서 찾아보고 없을 경우 디스크에서 찾는다. 디스크에 있는 정보는 먼저 RAM으로 옮겨진 다음 처리되는데 이런 이유로 해서 RAM, ROM을 주기억장치(primary memory), 디스크를 보조기억장치(secondary memory)라 부르기도 한다.


CPU의 내부

CPU의 가장 기본적인 기능은 메모리에 저장되어 있는 명령어를 읽어와서 수행하는 것이다.  

1. 레지스터(register)CPU가 가지고 있는 자원 중 가장 중요한 것으로 정보를 일시적으로 저장하기 위해 사용

   레지스터가 많을수록 좋은 CPU지만 그 만큼 가격이 비싸다.

2. ALU(Arithmetic / Logic Unit, 연산장치) : 산술연산과 논리연산을 수행한다.

3. PC(Program counter) : 다음에 수행할 명령어의 주소를 가르킴. IBM PC에서는 IP(instruction pointer)라고 부른다

4. 명령어 디코더(instruction decoder) : CPU 내부로 읽어온 명령어를 해독하는 역할.

   따라서 명령어의 의미를 보관하고 있다가 어떤 명령어가 주어지면 CPU가 어떤 작업을 해야 하는지 알려주는 역할.

+ Recent posts