C H A P T E R

Chapter 2: 수의 체계

3
ㅔ

메모리의 구조

공부할 내용

★ 주기억장치의 주소

★ 워드 저장 방식

★ 비트의 저장 방식

★ 경계

★ 레지스터

★ 스택

주기억장치의 주소

★ 컴퓨터의 주기억장치: 바이트(byte)들로 구성되어 있음.

★ 모든 바이트에는 (0으로부터 시작되는) 정수 번호가 붙어 있다.

∀ □주소(address)□

★ 프로세서가 주기억장치의 한 바이트를 읽으려면

(1) 프로세서가 주기억장치에 그 주소를 전달한다.

(2) 주기억장치는 그 바이트의 정보를 프로세서에게 보낸다.

★ 프로세서가 어떤 바이트에 자료를 쓰려면

(1) 프로세서는 주기억장치에 그 바이트의 주소와 쓸 정보를 보낸다.

(2) 주기억장치는 그 정보를 지정된 바이트에 복사하여 넣는다.

예) 프로세서가 □D□를 주소가 64AB1H인 바이트에 저장하려면

∀ 프로세서는 □D□의 ASCII 코드인 44H(01000100B)와

주소인 □64AB1H□를 주기억장치에 보낸다.

★ 메모리의 하한(low end of memory): 주소 0에 가까이 있는 바이트들

★ 메모리의 상한(high end of memory): 최대 주소에 가까이 있는 바이트들

★ 바이트는 순서대로 저장되어 있다. (주소: 0, 1, 2, 3, ... )

★ 워드, 더블워드 등의 주소 = 차지하고 있는 공간 중 가장 낮은 주소

예) 한 워드가 10926H와 10927H에 저장되어 있다고 하면

그 워드는 10926H에 있다고 함.

워드 저장 방식

★ 프로세서와 주기억장치사이의 자료 전송 단위

(1) 초기 프로세서 : 1 바이트 또는 2 바이트

(2) 386, 486 : 한번에 4바이트까지도 전송가능

★ 자료가 한 바이트씩 메모리로 전송될 때

∀ 자료는 메모리의 지정된 주소에 그대로 저장된다.

★ 워드가 메모리로 전송될 때

∀ 워드 내의 두 바이트는 역순으로 저장된다.

예) 프로그램이 1234H 값을 갖는 워드를 메모리의 500H번지에 쓰려고 한다고 하자.

∀ 정보가 다음과 같이 저장될 것이라고 기대하지만,

4FEH		4FFH		500H		501H		502H		503H
				12H		34H

∀ 실제로 저장되는 것은 다음과 같다.

4FEH		4FFH		500H		501H		502H		503H
				34H		12H

비트의 저장 방식

★ 메모리에 자료를 저장하고 메모리로부터 자료를 검색할 때

사용되는 가장 작은 정보 단위 ∀ byte

★ 바이트내의 각 비트를 엑세스할 수도 있다.

	그림 3-1			바이트 내의 비트의 순서

	7		6		5		4		3		2		1		0
	0		1		0		0		0		1		0		0

(1) 최상위 비트(MSB, Most Significant Bit)

(2) 최하위 비트(LSB, Least Significant Bit)

경계

★ 경계(boundary) = 특정한 수의 배수(multiple)인 주소

★ 때로는 경계에서 자료의 저장이 시작되도록 할 필요가 있다.

예) 워드 경계(word boundary) = 2의 배수인 주소.

즉, 0H, 2H, 4H, 6H, 8H, AH, CH, EH, 10H, 12H, 등

	표 3-1			비트 그룹화에 대한 요약

그룹화	바이트 개수
워드 더블워드 쿼드워드 페러그래프	2 4 8 16

★ 어떤 자료의 첫째 바이트가 경계에 있을 경우

∀ □워드 경계에 정돈(aligned)되어 있다□라고 한다.

예) 주소가 108A6H에서 시작하는 자료는 워드 경계에 정돈 (0)

주소가 108A7H에서 시작하는 자료는 워드 경계에 정돈 (x)

	표 3-2			경계 정돈의 요약

경계	정의	주소의 마지막 자릿수
워드 더블워드 쿼드워드 페러그래프	주소가 2의 배수인 바이트 주소가 4의 배수인 바이트 주소가 8의 배수인 바이트 주소가 16의 배수인 바이트	0H, 2H, 4H, 6H, 8H, AH, CH, 또는 EH 0H, 4H, 8H, 또는 CH 0H 또는 8H 0H

주기억장치와 보조 기억장치

★ 컴퓨터의 기억장치: 주기억장치와 보조기억장치로 구성됨

(1) 주기억장치

- 프로세서가 직접 작업을 할 수 있는 기억장치 (또는 메모리)

· ROM : 읽기 전용 기억장치

- 컴퓨터에 내장된(built-in) 중요한 자료가 저장되어 있음

- 이 자료는 컴퓨터의 전원을 꺼도 지워지지 않는다.

· RAM : 임의 접근 기억장치

- 자료를 읽고 쓸 수 있다.

- 주기억장치의 대부분을 차지

- 프로그램(명령, 자료)이 사용할 기억장소

(2) 보조 기억장치

- 대량의 정보를 보존하기 위한 곳

- 프로세서는 보조 기억장치에 있는 자료를 직접 액세스할 수 없다.

- 보조 기억장치에 있는 자료를 프로세서가 사용하려 할 때

또는 프로세서가 보조 기억장치에 자료를 쓰고자 할 때

∀ 주기억장치를 통해야 한다.

레지스터

★ 프로세서 안에 있는 약간의 기억 장소

★ 프로세서 안에 기억장소를 두는 이유: 속도 문제

★ 워드 크기의 14개 레지스터가 존재

★ 레지스터의 종류

(1) 범용레지스터(general register)

(2) 오프셋 레지스터(offset register)

(3) 세그먼트 레지스터(segment register)

(4) 플래그 레지스터(flags register)

	표 3-3			레지스터의 이름, 약어와 기능

이름	약어	범주
Accumulator Base register Count register Data register Base pointer Instruction pointer Stack pointer Destination index Source index Data segment register Extra segment register Stack segment register Code segment register Flags register	AX(AH,AL) BX(BH,BL) CX(CH,CL) DX(DH,DL) BP IP SP DI SI DS ES SS CS (none)	범용 레지스터 범용 레지스터 범용 레지스터 범용 레지스터 오프셋 레지스터 오프셋 레지스터 오프셋 레지스터 오프셋 레지스터 오프셋 레지스터 세그먼트 레지스터 세그먼트 레지스터 세그먼트 레지스터 세그먼트 레지스터 (none)

범용 레지스터

★ AX, BX, CX, DX

★ 어떠한 종류의 정보도 저장할 수 있는 편리한 임시 저장 장소

★ AX, BX와 CX는 특정 용도로 사용될 수도 있다.

(1) AX (어큐뮬레이터, accumulator)

- 산술 연산에 가장 자주 쓰이는 레지스터

(2) BX (베이스 레지스터, base register)

- 베이스 주소(베이스 어드레스)를 저장하는데 쓰임

(3) CX (카운트 레지스터, count register)

- 반복적으로 실행되는 특정 명령에 사용됨

- 이 때 명령의 반복 횟수가 CX에 저장되어야 함.

(4) DX (데이터 레지스터, data register)

- 일반 자료를 저장하는데 사용됨.

★ 기억장치 → 레지스터: load

기억장치 ← 레지스터: store

★ AX: AX 전체를 엑세스할 때 사용하는 이름

AH: AX의 상위(high) 바이트를 엑세스할 때 사용하는 이름

AL: AX의 하위(low) 바이트를 엑세스할 때 사용하는 이름

예) AX에 1234H가 저장되어 있다고 하자.

AH에 있는 값 = 12H

AL에 있는 값 = 34H

이때 00H를 AH에 로드하면 ∀ AX에는 0034H가 있게 됨

★ 4개의 범용 레지스터만이 한 바이트씩 따로따로 취급될 수 있다.

★ 오프셋 레지스터와 세그먼트 레지스터는 한 바이트씩 취급할 수 없다.

스택(stack)

★ 스택 = 자료를 저장하고 읽을 때, 마지막으로 저장된 자료가

먼저 읽혀지는 방식의 자료 구조

★ 대부분의 어셈블리 언어 프로그램은 스택을 사용한다.

★ 스택을 사용하는 프로그램의 시작부분에는 스택을 설정하기 위한 여러 개의 표준 명령들이 반드시 있어야 한다.

★ 용어

- Empty : 스택에 자료가 없는 경우

- Push : 스택에 자료를 넣는 경우

- Pop : 스택에서 자료를 꺼내는 경우

★ 스택에서 자료를 pop하는 경우

예) POP AX

- 자료가 스택에서 제거되어 명시한 레지스터 (여기서는 AX)에

그 자료가 저장됨

- 제거된 자료는 스택에 맨 마지막으로 push되었던 것임

- 스택에 맨 마지막으로 push된 자료가 있는 곳을

□스택의 탑(top)□이라고 한다.

★ 스택에 저장할 수 있는 자료의 단위 = 워드 크기(2바이트)

★ 스택으로 사용할 수 있는 공간의 크기 = 최대 64K바이트

★ 프로그램에서의 스택의 크기

- 작은 프로그램의 경우 : 128워드(100H) ∼ 256워드(200H)가 적당

스택의 용도

★ 프로시저 호출에 사용됨

(1) 프로시저 호출시 복귀 주소를 저장하는데 쓰임

· 프로시저 A가 프로시저 B를 호출 (call)한 경우

- 프로세서는 프로시저 A의 복귀주소 (return address)를 스택에 push함

· 프로시저 B가 실행을 끝내고 프로시저 A로 복귀하려는 경우

- 프로세서는 스택으로부터 프로시저 A의 복귀 주소를 pop하고 그 주소에 저장되어 있는 명령부터 시작하여 실행이 재기되도록 한다.

· 스택을 사용하면 호출된 프로시저가 다른 프로시저를 또 호출하는 것이 쉬워짐.

(2) 프로시저를 호출할 때 현재의 레지스터 값을 저장하는데 쓰임

- 이 때 저장된 값은 프로시저가 복귀되기 전에 스택으로부터

pop되어 다시 원래의 레지스터에 로드된다.

(3) 자료를 한 프로시저에서 다른 프로시저로 전달하는데 사용됨

★ 스택은 복잡한 연산을 하는 동안에 생긴 중간 결과들을 임시로 저장하는 데에도 쓰인다.