mips instruction set

David8·2022년 9월 21일
0

컴퓨터구조

목록 보기
11/18

기초

  1. 종류
    1. arithmetic, logic
    2. data transfer
    3. control

arithmetic, logic


data transfer

  1. load
    1. lw s1,8(s1, 8(s0): s1(dst)<memory[s1(dst) <- memory[s0+8]
      1. LB는 1byte단위로 Load함
  2. store
    1. sw s1,12(s1, 12(s0): memory[$s0+12] <- s1(source)
  3. move(pseudo 코드)
    1. move $s1, $2: s2에서 s1으로 이동
    2. 레지스터에서 레지스터로 이동

control

  1. conditional branch

    1. BEQ(Branch if Equal)

      1. BEQ s1,s1,s2,label: if(s1==s1==s2) PC <- TargetAddress
      2. i type 사용 --> offset에 16bit로 들어감
      3. 16bit
        1. 이동할 주소를 offset으로 표현 --> offset: 현재로 위치로 부터 얼마나 떨어져 있는지를 표시
          1. ex) offset:2 ==> pc <- pc + 2(offset)*4
          2. pc는 항상 다음 주소를 가리키고 있음을 유의
        2. sign extension
          1. 16bit를 pc와 연산하기 위해 se사용
          2. 1로 모두 채운 음수인 경우도 크기를 알기 위해 절대값을 확인해보면 1로 채운 부분이 보두 0으로 변하여 기본 값이 유지됨!
    2. BNE

      1. BNE s1,s1,s2,label: if(s1s1≠s2) PC <- TargetAdress
    3. SLT(set if less than)

      1. slt $t0, $s1 $s2

    4. SLTI

  2. unconditional branch

    1. J
      1. pc를 타켓으로 변경하여 타켓으로 jump(무조건 jump함)
      2. j format
        1. word address 26bit: 4bit(pc) + 26bit + 00(명령어 단위 4bit --> 마지막 00)
        2. 앞에 4자리 해당하는 Pc 범위안에서만 움직이라는 의미
    2. JR(jump register)
      1. jr $ra: pc <- $ra
    3. JAL(jump and link)
      1. JAL label : $ra <- PC; PC <- TargetAddress
        1. 현재 pc값 레지스터에 넣어놓고, label로 점프
          1. 함수 호출시 돌아올 주소를 기억
            1. ra(31번 레지스터)에 저장
    4. 참조

0개의 댓글