MIPS Data Transfer Instruction

hello_hidi·2022년 10월 6일
0

Computer Architecture

목록 보기
6/7
post-thumbnail

Data Transfer Instruction

우리는 지금까지 MIPS의 산술,논리 연산 명령어에 대해 배웠다. 이제는 데이터를 전달하는 명령어에 대해 배워보자!

Data Transfer

high-level language에서 a+b = c 코드를 해석하는 순서
a = 3, b = 4, c = 7 / a:s4,b:s4, b:s5, c:$s6
1) data segement에 변수 a,b,c가 존재한다

  • 메모리 주소는 32bits로 표현된다.

    2) 연산을 위해서 $4, $5, $6(내가 정해둔 register)에 값을 전달한다.

    3) processor에서 연산을 한다.

    4) 연산된 값이 $6에 담겨 있고 이것을 변수 c의 값을 전달한다.

2,3번 in MIPS

위에 2,3번을 보면 메모리에서 데이터를 가져올 수 있고,
반대로 연산된 정보를 register에 담아서 메모리에 업로드 할 수도 있다.
MIPS에서는 lw/sw를 통해서 이 과정을 구현할 수 있다.

lw

=> memory에서 register

lw: 메모리로부터 레지스터에 1워드를 전송하는 Instruction
형식 : lw rd offset(base register) ex) lw $4, 8($5)

sw

sw: 레지스터로부터 메모리에 1워드를 전송
형식: sw rd offset(base register) ex) sw $4, 8($5)

offset

왜 주소를 offset(base register)로 표현하는걸까?
그 이유는 iformatdㅔ서 16비트까지 밖에 표현할 수 없기 때문에 32비트 표현이 되지 않는다 그래서 baseregister + offset형태로 주소를 표현한다.
ex) 메모리의 주소 : 0x10040011
$5 : 0x10040000 => 17($5)식으로 표현을 한다.

lw,sw I-format

lw,sw는 I-format 형식으로 변환할 수 있다.

  • rt : lw때 값을 받아오는 destination이나
    sw때 값을 보내주는 source 역할의 register
  • rs : base register
  • constant or address : offset(-2^15 ~ +2^15-1)

예시코드

.data # -- 1)
a1: .word 3
b1: .word 4
c1: .word 5

.text
.globl main
main:
    lui $t1 0x1001 # 주소할당을 위한 코드
    lw $s4, ($t1) # -- 2)
    lw $s5, 4($t1) # -- 2)
    lw $s6, 8($t1) # -- 2)
    
    add $s6, $s4, $s5 # --3)

    sw $s6, 8($t1) # -- 4)

la

la(load address): 레지스터에 해당 주소를 로드하는 유사명령어
레이블의 주소를 옮길 때 많이 사용한다!
ex) la $5 A

profile
안뇽희디

0개의 댓글