MIPS 어셈블리어2

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