Download presentation
Presentation is loading. Please wait.
1
Chapter 5 The LC-3
2
Instruction Set Architecture
ISA(명령어 집합 구조) = 컴퓨터에서 프로그래머에게 보여지는(programmer-visible) 모든 구성요소와 동작들 memory organization address space – 얼마나 많은 위치를 접근할 수 있는가? addressability – 한 위치에 담겨있는 비트수 register set 갯수. 크기. 사용방법 instruction set opcodes data types addressing modes ISA는 기계어(machine language)로 프로그램을 작성하고자 하는 사람에게 필요한 모든 정보를 담고 있음 (또는 High-level language를 기계어로 변환할 때 필요한 정보)
3
LC (Little Computer) -3 LC-3 Simulator & Editor Editor Simulator
Go to: Download: LC-3 Simulator (Either Windows or Unix version) and Manual Simulator Download includes LC-3 (Simulator/Console) & LC-Edit Editor Simulator Console
4
LC-3 Overview: Memory and Registers
address space : 216 위치 (16-bit 주소) Addressability : 16 bits Registers 임시 저장소, single machine cycle로 접근 가능 일반적으로 메모리를 접근 시 single cycle 이상 소요됨 8 범용 (general-purpose) registers: R0 - R7 각각 16 bits 크기 하나의 register를 구별하려면 몇 비트가 필요한가? 기타 register들 직접 접근하지 못하며, 명령어에 의해서 간접적으로 지정하여 접근됨 PC (program counter), condition codes
5
LC-3 Memory Map (64K of 16 bit words)
23.5 K words 39.5 K words 512 words
6
LC-3 Overview: Instruction Set
Opcodes 15 opcodes (1), 2), 3) + Reserved (1 개, 4)) = 16 1) Operate 명령어 (3 개): ADD, AND, NOT 2) Data movement 명령어 (7 개): LD, LDI, LDR, LEA; ST, STR, STI; 3) Control 명령어 (5 개): BR, JSR/JSRR, JMP/RET, RTI, TRAP 4) Reserved (1 개): 몇몇 opcode는 결과에 따라 condition codes를 set/clear 할 수 있음: N = negative, Z = zero, P = positive (> 0) Data Types 16-bit 크기의 2의 보수 정수 Addressing Modes Operand의 주소를 어떻게 표현하는가? 1) 비 메모리 주소방식: 1a) register , 1b) immediate, 2) 메모리 주소방식: 2a) PC-relative, 2b) indirect, 2c) base + offset
7
LC-3 Instructions (Fig 5.3 – Appendix A) (46 ~ 47 쪽에 큰 그림 있음)
8
Operate Instructions 3가지 명령어:
1) ADD, AND, NOT: Src1, Src2, Dest operands 모두 register (IR[5] == 0 이면 register mode) 이 명령어들은 메모리 참조를 하지 않음 보기: ADD, Reg_dest <- Reg_src1 + Reg_src2 2) ADD, AND: Src1, Dest operands는 registers, Src2는 immediate (IR[5] == 0 이면 immediate mode) 보기: ADD, Reg_dest <- Reg_src1 + immediate value (위의 Reg_src2 대신) 이 경우는 1개의 operand가 명령어에 내장(hard-wired) 됨 이제, 명령어들의 dataflow diagram을 보여줄 것임 주어진 동작을 위해 언제, 어디서 data 이동이 이뤄지는지 확인할 것
9
NOT (Register) // IR[5:0] 안 씀
보기 1: R2 = NOT R6 보기 2: R6 = NOT R6 * Register File Registers 로 이해할 것
10
ADD/AND (Register mode): IR[5]==0
보기 1: ADD, R2 = R6 + R0 보기 2: ADD, R3 = R3 + R7
11
ADD/AND (Immediate mode): IR[5]==1
보기 1: ADD, R2 = R6 + 4 보기 2: ADD, R3 = R3 + 7 Immediate field : Sign extension .
12
LC-3 Editor 프로그램 작성(명령어 입력)은 Binary, Hex, Assembly Language 세 가지 형식으로 가능 첫 라인은 프로그램 시작 시점의 주소 즉 프로그램을 메모리 상에 Load 할 위치 교재에서는 주소 0x3000 (“0x” 십육진법 나타냄)을 일반적으로 사용 Immediate ADD 명령어 하나만으로 구성된 프로그램 작성 예 R0에 5를 더하여 R0에 저장하라: R0 = R0 + 5 #binary 3000 1025 # hex .ORIG x3000 ADD R0, R0, #5 .END
13
LC-3 Example E1.bin E2.hex E3.asm E1.obj E2.obj E3.obj
14
LC-3 Example
15
Using Operate Instructions
With only ADD, AND, NOT… 뺄셈은 어떻게? OR는 어떻게? 한 register에서 다른 register로 copy는 어떻게? 한register 를 zero로 초기화는 어떻게? Subtract: R3 = R1 - R2 Take 2’s complement of R2, then add to R1. (1) R2 = NOT(R2) (2) R2 = R2 + 1 (3) R3 = R1 + R2 OR: R3 = R1 OR R2 Use DeMorgan’s Law -- invert R1 and R2, AND, then invert result. (1) R1 = NOT(R1) (2) R2 = NOT(R2) (3) R3 = R1 AND R2 (4) R3 = NOT(R3) Register-to-register copy: R3 = R2 R3 = R2 + 0 (Add-immediate) Initialize to zero: R1 = 0 R1 = R1 AND 0 (And-immediate)
16
Data Movement Instructions
Load – main memory에서 register로 data 읽기 LD: PC-relative mode LDR: base + offset mode LDI: indirect mode (다루지 않음) Store -- register 에서 main memory 로 data 쓰기 ST: PC-relative mode STR: base + offset mode STI: indirect mode (다루지 않음) Load effective address – 주소 계산 후 register에 저장 LEA: immediate mode (다루지 않음) 메모리를 접근하지 않음
17
PC-Relative Addressing Mode
명령어 속에 주소를 직접 표현하고 싶으나.. address: 16 bits, 명령: 16 bits! Opcode 용 4 bits, register 지정용 3 bits는 반드시 있어야 함. Address 용: 최대 9 bits 만 남음 (16 bits가 안 됨) Solution: 9 bits 를 현재 PC에서 signed offset 으로 사용. 9 bits: 다음과 같은 주소 X 지정 가능: 유의점 : FETCH phase에서 PC가 증가되며, 이것은 EVALUATE ADDRESS stage 이전에 이뤄짐
18
LD (PC-Relative): LD PC=121, 보기 1: R3 = (PC = 127) 보기 2: R5 = (PC = 130)
19
ST (PC-Relative): ST PC=123, 보기 1: = R3, (PC = 127) 보기 2: = R5, (PC = 130)
20
Indirect Addressing Mode (다루지 않음)
PC-relative mode를 써서 접근 가능한 공간은 명령어 주변 256 words 범위 안에만 된다. 메모리 다른 곳의 접근 방법은? Solution #1: 메모리에 저장된 주소를 읽어온 후 그 주소를 이용해서 load/store를 한다 최초의 메모리 접근은 PC와 IR을 이용하고 (PC-relative addressing 처럼), 메모리로부터 읽어온 내용을 load/store할 target 주소로 사용한다
21
LDI (Indirect)
22
STI (Indirect)
23
Base + Offset Addressing Mode
PC-relative mode를 써서 접근 가능한 공간은 명령어 주변 256 words 범위 안에만 된다. 메모리 다른 곳의 접근 방법은? Solution #2: Register를 써서 full 16-bit address 생성 opcode 용 4 bits, src/dest register용 3bits, base register용 3 bits – 남은 6 bits을 signed offset 으로 사용함 Offset 은 base register에 더해질 때 sign-extended (부호 확장) 됨.
24
LDR (Base + Offset): R2=0x0010 (16); R3=0x0020 (32) 보기 1: R6 = + 4), 보기 2: R7 = + 7),
25
STR (base + Offset): R2=0x0010 (16); R3=0x0020 (32) 보기 1: + 4) = R6, 보기 2: + 7) = R7,
26
Load Effective Address
PC-relative (PC plus signed offset)처럼 주소 계산 후 계산 결과를 register에 저장함 Note: register에 저장되는 것은 주소 이며, 메모리의 내용이 저장되는 것이 아님
27
LEA (Immediate)
28
Example Address Instruction Comments x30F6 R1 PC – 3 = x30F4 x30F7 R2 R = x3102 x30F8 M[PC - 5] R2 M[x30F4] x3102 x30F9 R2 0 x30FA R2 R2 + 5 = 5 x30FB M[R1+14] R2 M[x3102] 5 x30FC R3 M[M[x30F4]] R3 M[x3102] R3 5 opcode
29
Control Instructions 명령어 흐름을 바꿀 때 사용 (Program Counter 값을 변경함)
Conditional Branch 주어진 조건이 참이면 branch 실행 PC에 signed offset을 더한 값이, 새로운 PC 값이 됨 참이 아니면 branch는 실행되지 않음 PC는 변하지 않으며, (현재 명령어) 다음 명령어를 가리키고 있음 Unconditional Branch (or Jump) 무조건 PC를 변경 TRAP PC를 OS “service routine” 주소로 변경 Service routine은 TRAP 처리 후 TRAP 호출 명령어 다음으로 복귀시킴
30
Condition Codes LC-3는 3개의 condition code registers 있음 (각각 1 bit): N -- negative Z -- zero P -- positive (greater than zero) Register에 어떤 값을 넣는 명령어가 실행되면 그 값에 따라 condition code가 변화함 (ADD, AND, NOT; LD, LDR, LDI, LEA) N, Z, P 가운데 하나가 1 로 set 됨 실행된 명령어에 의해서 결정
31
Branch Instruction Branch명령어는 하나 이상 condition codes를 지정 가능
PC-relative addressing: target address 는 현재 PC에 signed offset (IR[8:0])을 더해서 결정됨 Note: PC 는 이미 FETCH stage에서 1 올라 갔음. Note: Target은 BR 명령어의 256 words 범위여야 함. Branch가 실행되지 않는 경우, (현재 명령어) 다음 명령어가 실행됨
32
BR (PC-Relative): BR PC=131 보기 1: BR 바로 앞의 LD 명령에서 load된 값이 >=0이면 140 번지 명령으로 가라 (PC = 140) [LD 된 값에 따라 n, z, p가 설정됨] 보기 2: BR 바로 앞의 ADD 명령 결과가 != 0이면 139 번지 명령으로 가라 (PC = 139) [ADD 결과에 따라 n, z, p가 설정됨] If all zero, no CC is tested, so branch is never taken. (See Appendix B.) If all one, then all are tested. Since at least one of the CC bits is set to one after each operate/load instruction, then branch is always taken. (Assumes some instruction has set CC before branch instruction, otherwise undefined.) bits [11:9] 가 모두 zero라면? 모두가 1이라면?
33
Using Branch Instructions
12 integer의 합을 구하라 숫자는 location x3100부터 저장되어 있음. 프로그램은 location x3000에서 시작. R1 x3100 R3 0 R2 12 R2=0? R4 M[R1] R3 R3+R4 R1 R1+1 R2 R2-1 NO YES
34
Sample Program Address Instruction Comments x3000 R1 x3100 (PC+0xFF) x3001 R3 0 x3002 R2 0 x3003 R2 12 x3004 If Z, goto x300A (PC+5) x3005 Load next value to R4 x3006 Add to R3 x3007 Increment R1 (pointer) X3008 Decrement R2 (counter) x3009 Goto x3004 (PC-6)
35
JMP (Register): R2=0x0020 (32); R3=0x0030 (48) 보기 1: R2 주소 (32 번지) 명령으로 가라 보기 2: R3 주소 (48 번지) 명령으로 가라 Jump 는 unconditional branch – 항상 실행됨 Target address는 register의 내용 모든 target address 가능 (register 16 bits를 모두 쓰기 때문) IR[11:9]와 IR[5:0]은 쓰이지 않음.
36
TRAP 8-bit “trap vector”로 구분되는 service routine을 호출
Routine 종료 후, PC는 TRAP 명령어 다음 명령어로 설정됨(복귀) vector routine x23 input a character from the keyboard x21 output a character to the monitor x25 halt the program
37
Another Example Count the occurrences of a character in a file
키보드로 문자를 읽음 “file”로 부터 문자를 load함 File : memory locations의 연속 File의 시작 주소는 프로그램의 저장 주소 바로 뒤 File의 문자와 입력 문자가 같으면, counter 증가 End of file 은 ASCII value: EOT (x04) 끝에는, 문자 개수 출력 후 정지 (count될 문자는 10 개 이하로 존재한다고 가정) Sequence의 마지막을 지정하는 특수문자를 종종 sentinel 이라고 부름 반복문을 몇 회 실행해야 하는지 모르는 경우 유용함
38
Flow Chart
39
Program (1 of 2) Address Instruction Comments x3000 R2 0 (counter) x3001 R3 M[x3102] (ptr) x3002 Input to R0 (TRAP x23) x3003 R1 M[R3] x3004 R4 R1 – 4 (EOT) x3005 If Z, goto x300E x3006 R1 NOT R1 x3007 R1 R1 + 1 X3008 R1 R1 + R0 x3009 If N or P, goto x300B
40
Starting Address of File
Program (2 of 2) Address Instruction Comments x300A R2 R2 + 1 x300B R3 R3 + 1 x300C R1 M[R3] x300D Goto x3004 x300E R0 M[x3013] x300F R0 R0 + R2 x3010 Print R0 (TRAP x21) x3011 HALT (TRAP x25) X3012 Starting Address of File x3013 ASCII x30 (‘0’)
41
LC-3 Data Path Revisited
굵은 화살표 = 처리될 정보. 가는 화살표 = control signal.
42
Data Path Components Global bus Memory
16-bit signal 을 다양한 component에 전달해주는 선 묶음 Bus에 signal 입력장치는 “tri-state devices” : enable된 경우에만 signal을 전송 한번에 1개(16-bit) 의 signal만 enable되어야 함 control unit는 어떤 signal이 bus를 구동할지 결정 다수의 component들이 bus를 읽을 수 있음 Control unit에 의해 wire-enable된 register들이 bus data를 획득 Memory memory 와 I/O 장치를 위한 control and data registers memory: MAR, MDR (read/write를 위한 control signal)
43
Data Path Components ALU Register File
입력 : register file과 sign-extended bits from IR (immediate field). 출력 : bus에 연결됨 condition code logic, register file, memory등에 활용 Register File 2개의 read addresses (SR1, SR2), 1개의 write address (DR) Bus로부터 입력 ALU operation 또는 memory read 결과 2개의 16-bit 출력 ALU, PC, memory address에 활용 ALU를 거쳐서 store instructions용 data 제공
44
Data Path Components PC and PCMUX MAR and MARMUX
PC의 입력은 3개 : PCMUX로 선택 PC+1 – FETCH stage Address adder – BR, JMP bus – TRAP MAR and MARMUX MAR의 입력은 2개 : MARMUX로 선택 Address adder – LD/ST, LDR/STR Zero-extended IR[7:0] -- TRAP
45
Data Path Components Condition Code Logic
Bus의 값을 이용하여, N,Z, P signal 을 생성 control unit가 enable한 경우(LD.CC) register 값을 set 특정 명령어들만 condition code의 값을 설정 (ADD, AND, NOT; LD, LDI, LDR, LEA) Control Unit – Finite State Machine 해당하는 기계 cycle에 따라, 명령어 처리 단계에 맞는 control signal을 생성 Bus를 구동하는 것은? (GatePC, GateALU, …) 어떤 register를 write enabled할까? (LD.IR, LD.REG, …) ALU는 어떤 동작을 해야 하나? (ALUK) … Opcode용 decoder logic 포함, etc.
48
간단한 프로그램 1): i = i + 1 (reg. mode)
R7=0x30 (=48) 값이 있고, 변수 i는 0x32(=50=48+2) 번지에 있고, 상수 1은 0x33 (=51=48+3) 번지에 있다고 가정. LDR R1, Base Reg. R7 + offset LDR R2, Base Reg. R7 + offset ADD R3, R1, R2 ; add Reg STR R3, Base Reg. R7 + offset
49
간단한 프로그램 2): i = i + 1 (immediate mode)
R7=0x30 (=48) 값이 있고, 변수 i는 0x32(=50=48+2) 번지에 있고, 상수 1은 immediate value로 다룬다고 가정. LDR R1, Base Reg. R7 + offset ADD R3, R1, #1 ; add immediate STR R3, Base Reg. R7 + offset
50
간단한 프로그램 3): k = i + j R7=0x20 (=32) 값이 있고, 변수 i는 0x21(=33=32+1) 번지에 있고, 변수 j는 0x22(=34=32+2) 번지에 있고, 변수 k는 0x23(=35=32+3) 번지에 있다고 가정. LDR R3, Base Reg. R7 + offset LDR R4, Base Reg. R7 + offset ADD R5, R3, R4 ; add Reg STR R5, Base Reg. R7 + offset 만일 위의 ADD 결과가 0이 아니면 PC+9으로 가라. 아래 BRnp 에 있고, PC=41 이고, BR 한 뒤 실행할 있다고 가정 BRnp PC
51
자주 쓰는 명령 (1)
52
자주 쓰는 명령 (2)
Similar presentations