[컴퓨터구조] Arithmetic Instructions & Number System: addu/addiu/subu

젠니·2023년 9월 28일
0

컴퓨터구조

목록 보기
2/11

Signed and Unsigned Numbers

Unsigned 32-bit 2진수 최소/최대값

Signed 32-bit 2진수 in 2의 보수

10진수로 변환하면? -> sign bit 확인하기

1111 1111 1111 1111 1111 1111 1111 1100

-2를 표현하려면? -> +2의 2의 보수를 만든다.

1. +2를 2진수로 표현한다. -> a
-> +2 = 0000 0000 0000 0000 0000 0000 0000 0010

2. a의 1의 보수 만든다. -> b
-> 1111 1111 1111 1111 1111 1111 1111 1101

3. b에 1을 더한다. -> c
-> 1111 1111 1111 1111 1111 1111 1111 1110 = -2

Signed Binary Subtraction

2,147,483,647 - (-2) 계산해보자.
-> 2,147,483,647 + (-2)

😀 양수/음수 관계없이 2의 보수로 만들어 덧셈을 한다!

하지만 엉뚱하게 표현되는데 .. 왜일까?

바로 Overflow 때문이다!

Overflow 체크하는 법
1. 같은 부호끼리 더했을 때, 다른 부호가 나오는 경우
2. 양수에서 음수를 뺐을 때, 음수가 되는 경우
3. 음수에서 양수를 뺐을 때, 양수가 되는 경우

.text
.globl main
main:
	addi $t1, $0, 0x7fffffff # 에러메시지와 함께 lui, ori로 변환됨
    add $t2, $t1, $t1 # overflow 발생!
    addu $t3, $t1, $t1 # overflow 무시
    addiu $t4, $t1, -1 # overflow 무시

addu/addiu/subu

  • 1 destination
  • 2 sources
    overflow가 되어도 exception이 발생하지 않는다.

profile
젠니의 개발 라이푸우

0개의 댓글

관련 채용 정보