728x90
Instruction Code
- 프로그램 : 명령어의 집합
- 컴퓨터 동작: 레지스터 내의 데이터를 처리하는 microoperation들의 과정
- 명령어
- 컴퓨터를 위한 microoperation의 조합
- 명령어는 데이터에 메모리로 저장
- Op Code(Operation Code)
- Add, Sub와 같은 명령어를 정의하는 bit 모음
- n개의 비트는 개의 명령어를 할당
- 명령어 = opcode + 주소
- 메모리
- 한 파트에는 명령어, 다른 파트에는 data (Harvard Architecture)
- ex. 4096 word memory > 주소 할당을 위해 최소 12bit 필요
- word당 16 bit 할당 > op code에 4 bit 할당 가능
- binary operand : 명령어가 사용하는 데아터
- Program register / Accumulator : 명령어 결과를 임시 저장
- Ex. AC에 100이 저장 / 명령어가 Opcode(Add) + Address에 100이 저장되어 있을 경우 AC에는 200이 저장됨
- 명령어 주소
- 명령어 주소 format : I + OpCode + Address
- I : Indirect mode bit
- direct address : 주소 필드가 명령어 주소를 가리킴
- indirect address : 주소 필드가 명령어 주소가 저장된 주소를 가리킴
- 장점 : Address 주소의 범위를 확장시켜 더 큰 메모리에 접근 가능
- 단점 : 주소 접근이 2번 이루어지므로 direct 대비 느림
Computer Register
- 작성된 명령어는 연속된 주소에 저장 후 특정 시점에 실행
- 제어 유닛이 시작 주소의 명령을 읽어들임 > 실행 후 다음 주소를 계산 (카운터 레지스터가 필요)
- 컴퓨터 Control Logic의 레지스터
- Accumulator(AC) : 명령어의 Source(출발지) 이자 Destination(결과 저장)
- Instruction Register(IR) : 메모리에서 읽어들인 명령어 저장
- Data Register(DR) : 메모리에서 읽어들인 데이터 저장
- Temporary Register(TR) : 임시 저장소
- AC, DR, TR, IR은 메모리 word와 크기 동일
- Program Counter(PC) : 다음에 실행되는 명령어의 주소 저장
- AR(Address Register) : 실제 실행 중인 명령어의 메모리 주소를 저장 - 다음 명령어 실행 시 PC의 값이 AR로 전달
- PC, AR은 메모리의 Address Field와 동일한 크기
- Input/Output Register(INPR / OUTR) : 외부 장치 데이터를 주고받기 위한 통로
Computer Instruction
- 컴퓨터 명령어는 크게 3가지로 분류
- memory reference
- register reference
- I/O instruction
- memory reference
- I-field를 기준으로 direct(0), indirect(1) 동작으로 나뉨
- AND, ADD, Load/LDA, Store/STA, Branch/BUN, branch&save/BSA, Increment/ISZ 등 메모리에 접근하는 명령어
- register reference
- MSB 4자리가 0111로 시작하는 명령어
- AC, E 레지스터를 clear, complement, circulate, Increment, branch 등
- I/O instruction
- 인터럽트, AC 입/출력 등
- Control Logic Gate
- IR 명령어(D0~D7)은 Opcode가 디코더를 거쳐 Control Logic Gate에 동작 명령어를 지정
- IR Address의 경우 memory reference 명령어의 동작을 위해 전달
- T0~T15에는 Sequence Counter(SC)와 디코더를 통해 클록당 값을 증가시키면서 순서대로 신호 할당
- T15 이후에는 CLR신호를 통해 다시 T0부터 동작
- HALT(정지) 명령어 이전까지 계속해서 동작
- fetch&decode
- 각 클록(T)마다 SC는 1씩 증가
- T0 : AR < PC, SC < SC+1
- PC값을 AR에 Load해야 함
- T0 신호는 BUS의 2(010)와, AR LD에 연결
- T1 : IR < M[AR], PC < PC+1, SC < SC+1
- 메모리 데이터를 IR에 LD해야 하므로 BUS 7(111)에 연결
- IR에 연결해야 하므로 IR LD에 연결
- PC를 증가시켜야 하므로 PC INR에 연결
- T2 : D < Decode IR(12-14), AR < IR(0-11), I < I(15), SC < SC+1
- decode값은 combinational logic이므로 신호 연결이 필요 없음
- IR값을 AR에 연결해야 하므로 BUS 5(101)과 AR LD에 연결
- IR(15)에 I LD 연결
- PC를 1 증가시키는 이유
- 보통 특정 명령어 수행 후 그 다음 명령어는 연속된 주소에 할당
- PC값을 AR에 할당 후 다음 동작과 함께 PC를 증가시켜 clock 절약 가능
- register reference 명령어
- D7I'으로 동작(D7=1, I=0)
- 1클록마다 데이터를 읽어온다고 가정,
- T0 : AR < PC
- T1 : IR < M[AR], PC < PC+1
- T2 : IR decode, 데이터 전달
- D7I'T3B11
- IR 내용이 0111 / 1000 / 0000 / 0000
- 결과 I + Opcode가 7(0111)인 경우 T3이 동작
- B11만 1이므로 7xxx Clear AC(CLA)로 동작
- register reference 명령어의 동작 symbol을 r로 정의
- r =
- B값(address bit 위치)에 따라 다른 명령어 수행
- memory reference 명령어
- BUN(Branch Unconditionally) : 지정 주소로 복귀
- BSA(Branch and Save Return Address)
- PC+1에는 BSA 다음에 실행할 명령 저장
- BSA 주소부터 시작하여 subroutine 동작
- subroutine 마지막에는 1 BUN (BSA 주소) 저장 : 완료 후 PC+1 주소로 복귀하여 다음 명령 수행
I/O, Interrrupt
- 입/출력 기기와 컴퓨터 사이에는 인터페이스가 존재
- 컴퓨터에서는 입/출력 레지스터(INP/OUTR)까지만 데이터 전송
- 인터페이스가 기기와 컴퓨터 사이의 데이터 통신 조절
- FGI/O : 데이터의 입/출력 Flag
- FGI = 0 : 컴퓨터 사용중 / FGI = 1 : 새로운 입력 가능
- I/O 명령어
- INP / OUT : 입/출력
- SKI / SKO : FGI/O 존재 시 명령어 생략(PC + 1)
- ION / IOF : 인터럽트 flag(R) on/off
- 인터럽트
- 현재 동작하던 명령을 별도로 저장 후, Interrupt Cycle 수행
- FGI/O = 1이 되면 R flag = 1로 set
- 일반 명령어 Cycle은 R'T0, R'T1, ...의 양식으로 표현
- 처음 명령어를 Load하는 구간(T0~T2)에는 R이 set되지 않음
- T0'T1'T2'(IEN)(FGI+FGO) 일 때 R < 1
- FGI/FGO가 동시에 high일 경우의 처리 순서는 ISR(인터럽트 서비스 루틴)에 따라 결정
- 인터럽트 Cycle은 RT0 - RT1 - RT2 - ...
- RT0 : AR < 0, TR < PC
- RT1 : M < TR, PC < 0
- RT2 : PC < PC + 1, IEN < 0, R < 0, SC < 0
- IEN은 추후에 다시 1로 설정됨
Boolean Example
- 각 명령어의 Boolean 표현은 해당 동작을 하는 모든 operation의 합으로 표현
- ex. load AR to BUS : < AR로 표현되는 모든 식의 합
- = D4T4+D5T5
- ALU Load
- AC에 Load되는 모든 데이터는 ALU를 거쳐 들어옴
- +1(Increment), CLR는 AC에 직접 처리됨
728x90