CS/컴퓨터 구조

2.10 MIPS Addressing for 32-bit immediates and Addresses

sliver__ 2023. 10. 21. 12:20
728x90

32-Bits Immediate Operands

 

load uppe immediate(lui) : 상위 16bits를 register에 저장하는 명령어

lui instruction

Quiz) 아래 32bits 상수를 $s0에 저장하는 assembly code는?

0000 0000 0011 1101 0000 1001 0000 0000

==>

lui $s0, 61 #upper 16 bits 
ori $s0, $s0, 2304 # lower 16 bits

 

!! immediate instruction 사용에도 불구하고 큰 사이즈 memory address에 load / store 실패할 수 있다.

이를 대비해 $at(assembler temporary) register가 존재하고 사용 가능하다.

 

Addressing in Branches and Jumps

 

jump instruction은 J-type이고 6 bits의 operation field와 26bits의 address field를 가지고 있다.

Jump Instruction

opcode : 2 는 jump이다

 

Conditional branches instruction은 2개의 operands와 branch address로 구성된다.

Conditional branches instruction

2^16보다 큰 address를 표현하기 위해 아래와 같은 식으로 Program Counter를 계산한다.

 

$$Program Counter = Register + Branch address $$

 

위 수식으로 2^32 만큼 표현 가능해졌다. 그런데 어떤 Register 기준으로?

=> Program Counter를 기준으로 !! Branch address는 PC에서 상대적인 offset으로 나타낸다. Branch가 발생할 때 Target Label address는 PC = (PC + 4) + (branch address * 4) 이다. 현재 PC에서 다음 instruction 위치인 4를 더해주고 address에 * 4 를 더해 현재 PC기준으로 주소를 구한다. 이 방식이 PC-relative addressing이다.

 

Quiz) 아래의 assembly code를 machine code로 바꾸면?

loop staring address는 80000이라고 가정

Loop:sll $t1,$s3,2        # Temp reg $t1 = 4 * i 
    add  $t1,$t1,$s6      # $t1 = address of save[i] 
    lw   $t0,0($t1)       # Temp reg $t0 = save[i] 
    bne  $t0,$s5, Exit    # go to Exit if save[i] ≠ k 
    addi $s3,$s3,1        # i = i + 1
    j    Loop             # go to Loop 
Exit:

==>

80012 의 bne에서 $t0,  $s5가 같지 않은 경우 Exit label로 이동한다. 

Exit label의 주소값은 80024이다. 

분기가 일어나는 경우 Exit PC = PC(80012)+4 + (branch relative offset은 2) * 4 = 80024 !!

jump(j) Loop를 보면 20000으로 이동한다.

Loop PC = 2000*4 이므로 다시 Loop label의 시작주소인 80000으로 이동한다.

 

MIPS Addressing Mode Summary

MIPS Addressing mode

5. Pseudodirect addressing은 Address를 2bits letf shift하고 PC의 상위 4bit를 concatenation하여 memory에 접근하는 방식.

 

Decoding Machine Language

 

Machine language -> assembly language로 바꿔야 할 때 필요

!! "Core dump" 

 

MIPS Instruction fields of Machin code
MIPS Instruction format

 

Quiz) 아래 machine code를 assembly language로 바꾸면?

00af8020hex

==>

0000 0000 1010 1111 1000 0000 0010 0000

31 - 29 bits와 28-26 bits가 모두 000이면 R-format이다. (위 표 참조)

R-format으로 바꾸면

#op    rs    rt    rd    shmat function
000000 00101 01111 10000 00000 10000

R-format의 5-3 은 100 2-0은 000인 경우 add function이다.

그러므로

add $s0, $a1, $t7

 

728x90