<aside> 💡 목차

</aside>

>> 개요

→ 산술 논리 연산자에서 피연산자는 3개

Untitled

sub는 add와 다를 바 없다.
rs 와 2의 보수화된 rt 를 더한것이 빼기니까

sub는 add와 다를 바 없다. rs 와 2의 보수화된 rt 를 더한것이 빼기니까

<aside> 💡 MIPS 산술/논리 연산은 3개의 피연산자를 사용합니다. RISC-V의 설계 목표인 단순성과 효율성을 달성하기 위해서 3개만 사용합니다


1️⃣ 결과 레지스터 : 연산의 결과가 저장되는 레지스터 2️⃣ 피연산자 1 : 첫 번째 피연산자 3️⃣ 피연산자 2 : 두 번째 피연산자 ****또는 immediate value (상수 값)

add $t0, $s0, 10
# $t0 : 결과 레지스터 
# $s0 : 피연산자 1 (레지스터값)
# 10 : 피연산자 2 (상수값)

</aside>

<aside> 💡 (2️⃣내용 보충)

피연산자는 레지스터 또는 16비트 immediate 값을 사용할 수 있습니다.

instruction에서 addu , subu 와 같이 'u'가 붙으면 unsigned라는 뜻으로 오버플로우를 무시한다

Signed & Usigned Types 부호


레지스터: $0 ~ $31까지의 32개 레지스터 중 하나 16비트 immediate 값: 0 ~ 65535 사이의 16비트 정수

add $t0, $s0, 10
# $t0 : 레지스터
# $s0 : 레지스터
# 10 : 16비트 정수

<aside> 💡 아니 immediate value (상수 값) 을 왜 씀?


두 번째 피연산자에 상수값을 더하는 이유는 다음과 같습니다.

</aside>

</aside>

<aside> 3️⃣ 비교 연산도 산술 논리 연산에 포함됩니다.


== , > , < 과 같은 비교 연산을 말함

다음 명령은 $s0 레지스터의 값이 10보다 작은지 확인합니다.

slt $t0, $s0, 10
#연산의 결과는 true 또는 false 
#만약 true면, $t0 레지스터는 1이 저장

</aside>

곱셈, 나눗셈 연산은 bHI LO 레지스터에 저장됩니다

<aside> 💡 한 레지스터만 사용하면 오버플로우 문제가 있기 때문입니다

</aside>

<aside> 💡 어디에 저장됨?


질문!!! 10 / 3 하면 몫이 3 나머지가 1인데, HI에 3이 저장되고, LO에 1이 저장되는것이 맞습니까?


아니다!!!!

→ 몫이 LO

→ 나머지 HI

</aside>

<aside> 💡 복잡해보이지만, 사실은 add , add imediate 가 가장 중요하고 나머지들은 이 둘의 파생버전이다

→ add 🔥🔥🔥🔥🔥

명령어 예시 뜻 멘트 표현가능범위
add add $1, $2, $3 $2+$3 결과를
$1에 넣어라 3 operands; exception possible
각 피연산자중 하나라도32비트가 넘어가면
MSB값이 변경되어 오버플로우 발생 가능 $2^8$ - 1 = 255 까지
add immediate addi $1 ,$2, 100 $2 + 100 결과를
$1에 넣어라 + constant; exception possible
두번째 피연산자인 정수가 32비트가 넘어가면
오버플로우 발생 가능 $2^8$ - 1 = 255 까지
add unsigned addu $1, $2, $3 $2+$3 결과를
$1에 넣어라 3 operands; no exceptions
각 피연산자들이 32비트가 넘어가도
오버플로우가 바뀌지 않는다. $2^8$ = 256 까지

→ Multiply , Divide

명령어 예시 뜻
multiply HI, LO ← $2 $\times$$3 결과의 몫은 LO
나머지는 HI에
넣어라
divide HI, LO ← $2 / $3 결과의 몫은 LO
나머지는 HI에
넣어라
Move from HI
Move from LO $1 ← HI or LO HI 나 LO 값을
$1에 넣어라

RTL 로 표현

→add (21 bit + 11 bit) [operand 3]

<aside> 💡 근데 인스트럭션 하나에 4byte인데 이는 곧 32bit.


add에서 기본 21bit쓰고 나면 11비트가 남네?

→ 남은 비트를 shamt , funct 로 사용

</aside>