MIPS Arithmetic Instruction
MIPS 산술 연산 명령어
- \(\texttt{add}\), \(\texttt{sub}\)
- \(\texttt{addi}\)
\(\texttt{add}\), \(\texttt{sub}\) Instruction (R-Format)
add RD, RS, RT # RD gets RS + RT
sub RD, RS, RT # RD gets RS - RT
- \(\texttt{RS}\)와 \(\texttt{RT}\)를 더하거나 뺀 값을 \(\texttt{RD}\)에 저장한다.
- \(\texttt{RD}\) : 목적지 레지스터 (연산 결과를 저장)
- \(\texttt{RS}\) : Source 레지스터 (첫 번째 피연산자)
- \(\texttt{RT}\) : Source 레지스터 (두 번째 피연산자, S다음이라서 T이다.)
- 피연산자의 수가 많아지면, MIPS Compiler가 임시 저장공간을 생성해서 3개의 피연산자를 갖는 Polynomial(다항식) 구조로 변환한다. (MIPS의 설계 철학에 따라, 복잡한 구조의 Instruction은 빠른 처리를 위해 분해된다.)
\(\texttt{addi}\) Instruction (I-Format)
addi RD, RS, immediateConstant
- RS와 immediateConstant를 더한 값을 RD에 저장한다.
- \(\texttt{RD}\) : 목적지 레지스터 (연산 결과를 저장)
- \(\texttt{RS}\) : Source 레지스터 (피연산자 레지스터)
- \(\texttt{immediateConstant}\) : 상숫값 (피연산자 상수, 실제 정숫값이 위치한다.)
- I-Format 명령어이다.
- \(\texttt{addi}\) 명령어는 상수를 메모리로 부터 Load(\(\texttt{lw}\))하고, \(\texttt{add}\) 명령어를 통해 더하는 방식으로 구현된다. ( 이 두가지 명령어를 매번 사용하는 것보다 \(\texttt{addi}\) 명령어를 통해 한 번에 해결하는 것이 간결하다.)
- MIPS의 설계 철학 중 "Make the common case fast."에 부합한다.
※ \(\texttt{subi}\) 명령어는 존재하지 않는다. 뺄셈은 \(\texttt{RS}\)나 \(\texttt{immediateConstant}\)에 음수를 저장하는 방식으로 구현한다.