2023. 1. 14. 21:25ㆍ컴퓨터구조
MIPS immediate instruction
immediate instruction은 번역 시 즉각적인 명령으로 볼 수 있는데 왜냐하면 instruction 안에 레지스터가 아닌 상수를 넣어서 계산 하는 방식이기 때문이다.
addi $s3, $s3, 4
addi $s3, $s3, -1
해당 명령어는 기존 명령어에서 immediate의 약자인 i가 붙는다.
MIPS 레지스터 중에는 zero도 존재하는데 zero는 레지스터 값을 다른 레지스터로 옮길 때 주로 이용한다.
add $t1, $s1, $zero
s1에 있던 데이터를 zero와 더하게 되면서 t1으로 옮기게 되는 것이다.
R-type 명령어
R-type 명령어 중 sll (set left logical) 이라는 명령어와 srl (set right logical)이라는 명령어가 있다.
green sheet에서 찾아봤을 때 op, rd, rt, shamt, funct 정도만 필요한 명령어이다.
shift left logical은 왼쪽으로 shift 연산한 결과를 rd로 저장해주는 명령어이다. 그래서 add나 sub 같은 명령어에서는 쓰이지 않았던 shamt 영역을 이용하게 된다.
left 이동은 한번 당 *2 를 의미하고 right 이동은 한번 당 /2 를 의미한다.
slt 명령어는 두 데이터 중 크기를 비교하는 명령어이다.
rd = rs < rt ? 1: 0 의 연산을 하게 된다.
slti는 상수와 rs 값 중 뭐가 더 큰지 보는 것이다.
rt = (rs < constant) ? 1:0 연산이다.
I-type 명령어
I-type 명령어에서는 조건 연산으로 bne, beq가 있고 load, store 연산, immediate 연산들이 있다.
beq rs, rt, L1
rs, rt가 같다면 -> L1으로 점프하라 라는 뜻이다.
if(rs == rt) goto L1; 과 같은 것이다.
I- type 에서 L1은 address에 들어가는데 주소를 저장하는 것이 아니다. Program Counter와의 상대주소를 적어주는 것이다.
PC는 항상 다음 주소를 가리키게 되는데 MIPS는 word 단위 즉 4바이트 단위로 이동하므로 한번 다음 명령어로 가기 위해서는 PC + 4 해줘야하고 해당 주소에서 어느정도 떨어져있는지 즉 L1과의 PC+4 사이의 offset값을 써주는 것이다.
Constant나 address의 경우 16bit이고 rs경우는 레지스터로 32bit인데 서로 비트가 맞지 않는다 그래서 Constant나 address는 extension이 필요하다.
extension에서는 zero-extension, sign-extension이 존재하는데
zero는 상위 비트들을 모두 0으로 채우는 것이고, sign은 음수일 때 1로 양수일 때 0으로 채워주는 것이다.
bne 명령어는 rs != rt 일 때 L1으로 점프하라 라는 명령어이다.
load나 store 명령어
load 명령어는 lw이다.
rs rt immediate 인것을 보면 I-type인 것을 알 수 있다.
lw $t0, 32($t1)
lw는 메모리에서 레지스터로 옮기는 명령어이다.
t1이 base register이고 메모리를 나타내고 있다.
store은 sw명령어이고 레지스터에서 메모리로 데이터를 옮기는 명령어이다.
J-type 명령어
J-type에는 jump와 jump and link 명령어가 있는데
jump는 op -> funct를 보자마자 바로 주소로 넘어간다 주소는 op 영역인 6비트를 빼면 26비트를 주소로 사용하게 되는데 26비트를 가지고 32비트 주소를 다 표현할 수 없기 때문에 주소 확장(extension)이 일어난다.
address는 워드단위로 표현되므로 실제 byte 주소의 1/4 가 저장되어 있다
예를들어 40000 의 byte단위 주소로 가려한다면 10000이 address에 저장되어 있는 것이다.
그래서 이것을 바탕으로 address * 4(address << 2) 까지 범위를 표현해줄 수 있다, 즉 26bit + 2 bit = 28 bit 범위까지 표현할 수 있는 것이고 나머지 4 bit는 PC의 상위 4bit를 가져와서 쓴다.
jal은 PC+4 주소를 기억해놨다가 Label 점프할 곳으로 뛴 후에 해당 연산이 완료된 이후 다시 PC+4 주소로 돌아가는 것이다.
addi 같은 immediate 명령어의 경우는 상수가 들어가게 되므로 I-type 명령어가 되고
add, sub 같은 명령어는 두 개의 변수를 더해 다른 변수에 저장하게 되는 구조로 R-type 이 된다.
j, jal 명령어는 다른 주소로 점프하는 명령어가 되므로 opcode와 점프하기 위한 주소를 저장하는 구조로 J-type이다.
'컴퓨터구조' 카테고리의 다른 글
MIPS representing instruction (0) | 2023.01.15 |
---|---|
MIPS-32 ISA 명령어 type (0) | 2023.01.14 |
빅엔디안, 리틀엔디안 (0) | 2023.01.14 |
MIPS 어셈블리어 (0) | 2023.01.02 |
컴퓨터의 Execution Time 측정방법 (0) | 2023.01.02 |