폰 노이만 아키텍처에서 컴퓨터의 동작
- 데이터를 주기억장치에서 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가 나옴
'컴퓨터과학 > 컴퓨터, 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 |