일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 상태
- stl
- Codility
- Photoshop
- spring
- Gap
- c++
- 확률
- 반응형 웹
- float
- JSX
- REM
- c
- CSS
- skt membership
- 백준
- 미디어 쿼리
- grid
- box-sizing
- transform
- 수학
- react
- 통신사할인
- SK바이오사이언스
- 포토샵
- pandas
- Javascript
- 소수
- 알고리즘
- 강화학습
- Today
- Total
sliver__
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
'CS > 컴퓨터 구조' 카테고리의 다른 글
2.12 Translating and Starting a Program (0) | 2023.10.21 |
---|---|
2.11 Parallelism and Instructions : Synchronization (0) | 2023.10.21 |
2.9 Communicating with People (0) | 2023.10.21 |
2.8 Supporting Procedures in Computer Hardware (0) | 2023.10.21 |
2.7 Instructions for Making decision (0) | 2023.10.20 |