2.10 MIPS Addressing for 32-bit immediates and Addresses
32-Bits Immediate Operands
load uppe immediate(lui) : 상위 16bits를 register에 저장하는 명령어
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를 가지고 있다.
opcode : 2 는 jump이다
Conditional branches instruction은 2개의 operands와 branch address로 구성된다.
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
5. Pseudodirect addressing은 Address를 2bits letf shift하고 PC의 상위 4bit를 concatenation하여 memory에 접근하는 방식.
Decoding Machine Language
Machine language -> assembly language로 바꿔야 할 때 필요
!! "Core dump"
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