[컴퓨터구조] Data Transfer Instructions: sw, lw

젠니·2023년 10월 6일
0

컴퓨터구조

목록 보기
9/11

Data Transfer Instructions

sw $4, 8($5)

메모리에 저장

  • $4: source
  • 8($5): base register -> destination (메모리 어디에 저장해야할까)

base register를 어떻게 해석해야할까?
메모리를 계산하는 수식: R[$5] + 8
-> 5번 레지스터가 가지고 있는 32bit 값에 offset 8을 더해준다.

🤔 메모리 주소를 왜 이렇게 나타낼까?
메모리 주소는 32bit를 나타내려 하는데 instruction에서 32bit를 바로 표현할 수 있는 방법은 register를 사용하는 방법밖에 없기 때문이다.

lw $4, 8($5)

메모리에서 불러옴

  • $4: destination
  • 8($5): base register

두번째 operand가 나타내는 메모리 주소에 저장되어 있는 4byte word (32bit)를 읽어와서 $4번 레지스터에 쓰는 것이다.

Exercises

다음 코드 수행 결과 $4, $5, $6의 값은?

.text
.globl main
main:
	lui $5, 0x1000
    lui $4, 0x789A
    ori $4, $4, 0xBCDE
    sw $4, 8($5)
    lw $6, 8($5)

1. lui $5, 0x1000

  • ori를 안한 이유는 그냥 오른쪽을 0000으로 채우기 위해서다.
  • 실행 시 $5번 레지스터의 값은 0x10000000이 된다.
  • 만약 오른쪽을 0000이 아닌 다른 값으로 바꾸고 싶다면 ori를 사용하면 되지만 그런게 아니라면 굳이 사용할 필요가 없다.

2. lui $4, 0x789A
ori $4, $4, 0xBCDE

  • 0x789ABCDE가 된다.

3. sw $4, 8($5)

  • $5번 레지스터 값에다가 8을 더한다. -> 0x10000008 (data segment에서 확인 가능)

  • 0x10000008 이 위치에 $4번 레지스터의 값을 저장한다.

4. lw $6, 8($5)

  • 8($5) 메모리 주소의 값인 $4번 레지스터의 값을 불러와서 $6번 레지스터에 저장한다.

❗ 참고로, 두 instruction의 경우 I-format이 적합하다!

sw를 disassemble하면 lw가 된다.

profile
젠니의 개발 라이푸우

0개의 댓글

관련 채용 정보