MIPS Pseudo Instruction
MIPS 의사 명령어
- 프로그래머가 사용하기에 용이한 형태의 명령어이다.
- 컴퓨터가 이해할 수 있는 명령어들이 조합된 형태이다. (추상화 개념)
- 의사 명령어를 컴퓨터가 이해하기 위해서는, 변환 과정이 필요하다.
- 의사 명령어를 사용함으로써, 간결한 코딩이 가능해지고 생산성이 향상된다.
\(\texttt{li}\) Instruction
li $R, 0xAAAABBBB # 0xAAAABBBB is the example of "immediateConstant".
# Convert
lui $R, 0xAAAA
ori $R, $R, 0xBBBB
- "Load Immediate"라는 뜻으로, 32Bit의 immediateConstant를 \(\texttt{\$R}\)에 불러오는(저장시키는) 연산을 수행한다.
\(\texttt{la}\) Instruction
la $R, op1
# Convert
lui
ori
- "Load Address"라는 뜻으로, 32Bit의 주솟값 혹은 메모리를 가리키는 레이블 값을 불러오는 연산을 수행한다.
추후 기재
\(\texttt{move}\) Instruction
move $R2, $R1
# Convert
add $R2, $R1, $zero
- 한 레지스터의 값을 다른 레지스터에 이동(대입)하는 연산을 수행한다.
\(\texttt{nop}\) Instruction
nop
# Convert
sll $0, $0, 0
- "No Operation"이라는 뜻으로, Stall(작업 멈춤)을 위한 명령어이다.
- 논리적으로는 아무런 작업도 수행하지 않는다.
Multiplication (곱셈) (H/W 레벨에서의 곱셈 참고)
\(\texttt{mult}\) Instruction (R-Format)
mult $r, $s # HI ← ($r * $s)[63:32]
# LO ← ($r * $s)[31:0]
- \(\texttt{\$r}\) : Multiplicand(피승수)가 저장된 레지스터
- \(\texttt{\$s}\) : Multiplier(승수)가 저장된 레지스터
- 32Bit의 피승수와 32Bit의 승수를 곱한 결과(64Bit)를 각각 \(\texttt{HI}\)와 \(\texttt{LO}\)에 나누어 저장한다.
- \(\texttt{HI}\)와 \(\texttt{LO}\) 레지스터는 MIPS에 정의된 32개의 레지스터와 PC 레지스터 이외의 특수 목적용 레지스터이다.
\(\texttt{mfhi, mflo}\) Instruction (R-Format)
mfhi Rd # Rd ← HI
mflo Rd # Rd ← LO
- \(\texttt{Rd}\) : \(\texttt{HI}\) 또는 \(\texttt{LO}\) 가 저장될 레지스터