728x90

폰 노이만 아키텍처에서 컴퓨터의 동작

- 데이터를 주기억장치에서 R/W 반복

-> 메모리 주소영역에 접근이 중요

but 아래의 회로에선 PC로 SRAM에 순차적으로만 접근 가능 -> 다른 주소 지정 방식 필요

폰 노이만 아키텍처 컴퓨터 회로

 

Opcode의 인자로 SRAM 주소 접근

- LDA 0x50(8비트 opcode 명령과 데이터)을 레지스터 말고 SRAM 주소에 저장

 * PC/SRAM 사이 Mux와 SRAM-레지스터 사이에 4출력 디먹스 사용

 

SRAM의 주소에 접근하기

- Demux(SRAM)에 sel0과 sel1이 둘다 0일때(NOR)

 -> Mux(PC)의 sel에 1 입력되도록 제어기 수정

 => PC가 가리키는 주소 뿐만이 아닌 SRAM에 임의(random) 접근 가능해짐 

 

접근 가능 주소 범위

- 현재 접근 가능 범위는 명령어 영역(8비트)+데이터 영역(8비트)이므로 0x00 ~ 0xFF까지만 가능

- 지금 SRAM은 64KB -> 전체 주소 영역이 0x0000 ~ 0xFFFF으로 전체 주소 접근 불가

 

주기억 장치 전체 주소 접근 방법

1. 데이터 접근의 지역성 이용 

2. 16비트 주소 값을 어드레스 디코더에 직접 입력

 

데이터 접근의 지역성

- 주로 접근하는 데이터는 실행 중인 메모리 위치 주변이 됨

- PC가 가리키는 곳의 근처 데이터를 자주 읽음

 

PC기준 8비트로 접근 가능 범위

- 8비트로 -128 ~ 127까지 가능

ex) PC가 0x3F20가리키는 경우

0x3F12, 0x3F16, 0x3F24, 0x3F28 ... 앞 뒤로 해당 범위 까지 접근가능

 

PC 중심으로 주소 값을 수정할 수 있는 회로

- SRAM DEMUX를 PC 16bit Adder 향해 입력 전달

- 8비트 이상 범위에 접근 불가

 

메모리 전체 주소 지정

- 현재 SRAM 회로 출력은 16비트이나 상위 8비트는 기계어로 사용되어

- 하위 8비트만으로 16비트 메모리 직접 지정이 불가

-> 16비트 출력 값이 모두 SRAM 디코더에 들어가도록 회로 변경이 필요

 => 8비트(기계어) + 8비트(데이터) or 16비트(주소 데이터)

 

제어기 확장

- (기존) 스위치 회로 -> (확장) 비교기 + 보조기억장치 + 8bit SRAM + 제어기 스위치 박스

- 동작

 1. 전원 연결시 보조 기억 장치의 데이터가 제어기 SRAM에 저장

 2. 주기억 장치에서 전달받은 상위 8비트 기계어는 비교기 거쳐 특정 값 출력

 3. 제어기 SRAM의 해당 주소에 저장된 값이 스위치 박스로 전달

 4. 컴퓨터 회로 제어

- 개선 : 스위치 회로를 복잡하게 구성할 필요가 없어짐 

메모리 주소 지정 이유

- 해당 메모리 값을 읽거나 쓰기 위함

 

즉시 주소 지정 방석(immediate addressing)

- 메모리의 주소를 지정하지 않음. 주로 레지스터에 값을 쓸 때 사용.

 

MOV

- move의 약어

- opcode : MOV 레지스터, 상수

- 상수 값을 레지스터에 저장한다.

- MOV A, 0x90 -> 레지스터 A에 0x90을 쓴다.

 

직접 주소 지정 방식(direct addresing)

- 1) PC에 8비트 값을 더하거나 빼서 메모리 주소를 구하거나

- 2) 직접 8비트 주소를 지정하는 방식 

 

단순 직접 주소 지정 방식(simple direct addressing)

- opcode의 인자로 사용한 값을 그대로 메모리 주소로 지정

프로그램 카운터 연관 직접 주소 지정 방식(PC relative direct addresing)

- PC 카운터에 opcode 인자를 더한 값을 주소로 지정

*로드, 스토어

로드 : 주기억장치에서 값을 읽어 레지스터에 저장

스토어 : 레지스터의 값을 주기억장치에 저장

 

opcode 추가

- LDR(Load register) : 레지스터에 값을 로드 

- STR(Store register) : 레지스터에서 값을 스토어

- 프로그램 카운터 연관 직접 주소 지정 방식 : #를 붙임

 

 예시

- LDR A, #0x34(현재 PC 값이 0x0046)

- 레지스터 A에 0x7A번지(0x0034 +0x0046) 데이터가 저장, PC는 0x0046유지

 

레지스터 직접 주소 지정 방식(register direct addressing)

- 레지스터 출력 값을 SRAM 주소로 전달되는 방식

- 레지스터 크기가 16비트로 SRAM의 주소 크기와 같으므로 전체 영역에 주소 지정 가능

- 레지스터에 미리 주소값을 넣어두어야 함.

 

예시

- MOV B, 0x34

- LDR A, B

 

레지스터-프로그램 카운터 연관 주소 지정방식(Register PC relative direct addressing)

- 레지스터와 PC값을 더해서 SRAM 주소 지정

-> PC 중심으로 전체 메모리 영역 접근 가능

 

간접 주소 지정 방식

- 주소 지정을 간접적으로 하는 방식

- 직접 주소 지정 방식으로 메모리에 주소 지정. 그 주소에서 출력된 SRAM 값을 주소로 다시 지정

 

전체 회로도

- 스위치에서 주소 지정 방식 처리가능한 CPU 회로

- 하드웨어를 제어하기 위해 기계어가 나오고 더 편하게 쓰기 위해 opcode가 나옴

 

 

300x250

'컴퓨터과학 > 컴퓨터, OS' 카테고리의 다른 글

오브젝트 파일 ~ 고급 언어  (0) 2020.05.01
어셈블리어 ~ 심벌 테이블  (0) 2020.05.01
Nand2Tetris 2 - 불 연산  (0) 2020.04.29
NAND2Tetris 1 - 불 논리  (0) 2020.04.25
NAND2Tetris 0 - 소개  (0) 2020.04.25

+ Recent posts