반응형
Datapath로 우리가 실행해 볼 명령어
1. 메모리 접근 명령어(memory-reference instructions) : lw , sw
2. 산술 논리 연산 명령어(arithmetic-logical instructions) : add, sub, and, or, slt
3. 흐름 제어 명령어(control flow instructions) : beq, j
Datapath에서 명령어를 수행하는 과정
Fetch
1.PC 값을 이용해 명령어가 들어있는 주소(instruction address)를 찾는다.
2.메모리로부터 그 주소에 들어있는 명령어를 가져온다.(get intruction from memory)
Decode
3.조합회로 내에서 간단하게 어떤 명령어인지 해석한다.
Execute
4.필요한 레지스터값을 읽는다.
5.레지스터값으로 연산을 진행한다.
Add 연산
add rd, rs, rt ( rd <- rs + rt )
- IR <- mem[PC] // PC값을 이용해 intruction을 memory로부터 fetch하고 그 값을 instruction register(IR)에 저장한다.
- R[rd] <- R[rs] + R[rt] //IR의 처음 6bit(opcode)를 보고 add 임을 확인하고 rs + rt 값을 rd register에 저장한다.
- PC <- PC + 4 //다음 명령어 실행을 위해 PC + 4를 해준다.
Sub 연산
sub rd, rs, rt ( rd <- rs - rt )
- IR <- mem[PC] // PC값을 이용해 intruction을 memory로부터 fetch하고 그 값을 instruction register(IR)에 저장한다.
- R[rd] <- R[rs] + ~R[rt] + 1 //IR의 처음 6bit(opcode)를 보고 sub 임을 확인하고 rs + rt의 2의 보수 값(= -rt)을 rd register에 저장한다.
- PC <- PC + 4 //다음 명령어 실행을 위해 PC + 4를 해준다.
lw 연산
lw rt, rs, imm16 ( rt <- memory[rs+imm16] )
- IR <- mem[PC] // PC값을 이용해 intruction을 memory로부터 fetch하고 그 값을 instruction register(IR)에 저장한다.
- Addr <- R[rs] + SignExt(imm16) //메모리 주소를 계산한다. (rs 레지스터 값 + 32bit로 sign extension한 Immediate 상수값)
- R[rt] <- Mem[Addr] /계산한 메모리주소를 이용해 rt register로 값을 load
- PC <- PC + 4 //다음 명령어 실행을 위해 PC + 4를 해준다.
sw 연산
sw rt, rs, imm16 ( rt <- memory[rs+imm16] )
- IR <- mem[PC] // PC값을 이용해 intruction을 memory로부터 fetch하고 그 값을 instruction register(IR)에 저장한다.
- Addr <- R[rs] + SignExt(imm16) //메모리 주소를 계산한다. (rs 레지스터 값 + 32bit로 sign extension한 Immediate 상수값)
- Mem[Addr] <- R[rt] //rt register의 값을 미리 계산된 메모리 주소로 store
- PC <- PC + 4 //다음 명령어 실행을 위해 PC + 4를 해준다.
beq 연산
beq rt, rs, imm16 ( rt <- memory[rs+imm16] )
- IR <- mem[PC] // PC값을 이용해 intruction을 memory로부터 fetch하고 그 값을 instruction register(IR)에 저장한다.
- Cond <- R[rs] + ~R[rt] + 1 //rs 레지스터 값과 rt 레지스터 값이 같은지 다른지 계산한다. ( if Cond = 0 rs = rt , otherwise, rs != rt)
- PC <- Cond ? PC + 4 : PC + 4 + (SignExt(imm16) << 2) // if Cond != 0 , 다음 명령어 실행을 위해 PC + 4를 해준다. if Cond ==0 , 32bit로 sign extension 한 immediate 상수값 << 2 + ( PC + 4 )
* 상수값이 명령어의 주소일 경우에는 shift left 2 ( 곱하기 4 ) 를 해서 PC 값에 더해야 한다.
* branch를 할 때는 다음 번 명령어를 기준으로 한다.(PC + 4)
반응형
'ੈ✩‧₊˚Computer Science > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] Pipelining Hazard (파이프라인 해저드) (0) | 2020.11.13 |
---|---|
[컴퓨터구조] MultiCycle Datapath (0) | 2020.11.06 |
[컴퓨터구조] single cycle 의 단점, multi cycle (0) | 2020.11.06 |
[컴퓨터구조] Datapath 간단한 설계 (0) | 2020.10.30 |
[컴퓨터구조]MIPS Instruction Format (0) | 2020.10.21 |