[CA] Chapter 5-2: Word addressing Exercies
[CA] Chapter 5-2: Word addressing Exercies
⚙ Computer Architecture 공부
앞에서 공부했듯이 I-type과 J-type 명령어는 표현할 수 있는 주소 범위가 제한되었었다.
- I-type의 제한을 극복하기 위해 PC-Relative Addressing을 사용
- 현재 프로그램 카운터(PC) 값에서 시작
- PC에 4를 더함 (다음 명령어 위치)
- 16비트 오프셋에 4를 곱함 (바이트 단위로 변환)
- 이 값을 더해 최종 목표 주소 계산
1
목표 주소 = PC + 4 + (오프셋 × 4)
- J-type의 제한을 극복하기 위해 Pseudo-Direct Addressing을 사용
- PC의 상위 4비트(31-28)를 가져옴
- 명령어에 포함된 26비트 주소에 2비트 ‘00’을 추가 (워드 정렬을 위해)
- 이 두 부분을 연결(concatenate)하여 32비트 주소 생성
1
목표 주소 = PC[31:28] :: (명령어_인덱스 << 2)
PC-Relative Addressing 예제
1
2
3
4
5
6
7
0x00400000 addi $t0, $zero, 5 # 카운터를 5로 초기화
addi $t1, $zero, 0 # 합계 = 0
loop: beq $t0, $zero, end # 카운터가 0이면 루프 종료
add $t1, $t1, $t0 # 합계에 카운터 추가
addi $t0, $t0, -1 # 카운터 감소
j loop # 루프 시작으로 돌아가기
end: nop # 프로그램 종료
✅명령어 주소:
addi
@ 0x00400004addi
@ 0x00400008beq
@ 0x0040000Cadd
@ 0x00400010addi
@ 0x00400014j
@ 0x00400018nop
@ 0x0040001C
beq
명령어의 오프셋은 어떻게 구할까?
- beq의 PC = 0x0040000C
- Target address(end) = 0x0040001C
- Target address = (PC + 4) + (offset * 4)
- = (0x0040000C + 4) + (X × 4) = 0x0040001C
- 0x00400010 + (X × 4) = 0x0040001C
- X × 4 = 0x0040001C - 0x00400010 = 0x0000000C = 12
- X = 3
beq
의 offset은 3
추가 예제:
Pseudo-Direct Addressing 예제
앞의 동일한 프로그램에서 j 명령어 주소 필드 계산
1
2
3
4
5
6
7
0x00400000 addi $t0, $zero, 5 # 카운터를 5로 초기화
addi $t1, $zero, 0 # 합계 = 0
loop: beq $t0, $zero, end # 카운터가 0이면 루프 종료
add $t1, $t1, $t0 # 합계에 카운터 추가
addi $t0, $t0, -1 # 카운터 감소
j loop # 루프 시작으로 돌아가기
end: nop # 프로그램 종료
j 명령어의 주소 필드 계산:
- j 명령어의 PC = 0x00400014
- Target address(loop) = 0x00400008
- Target address = PC[31:28] :: (X * 4)
- = 0x0[31:28] :: (X × 4) = 0x00400008
- X * 4 = 0x00400008
- X = 0x00400008 ÷ 4 = 0x00100002 = 2
추가 예제:
This post is licensed under CC BY 4.0 by the author.