YYYEJI

[MIPS] Bit-wise AND(&)로 Logical AND(&&) 구하기 본문

Computer architectures

[MIPS] Bit-wise AND(&)로 Logical AND(&&) 구하기

YEJI ⍢ 2022. 10. 19. 01:45
728x90

Bit-wise AND 란?

bit 하나하나 비교를 합니다.

1000

1010

------------------

1000

 

Logical AND 란?

숫자 자체를 크게 놓고 비교합니다.

 

C programming을 기준으로 살펴보면 0이 아닌 숫자는 모두 true입니다.

(. .  -2, -1 , 1, 2, 3, 4  . . .)

1000 (8)

0001 (1)

-------------

1 (true)

 

0000 (0)

1010 (10)

------------

0 (false)

 

 

MIPS의 AND operation은 기본적으로 Bit-wise 연산을 수행합니다.

logical and를 수행하는 MIPS instruction이 존재하나요 ˀ̣ ˀ̣ ˀ̣

 

없습니다.

 

우리가 스스로 코드를 짜야 됩니다.

 

 

아래 C code를 MIPS assembly code로 변환해 보겠습니다.

 

c = a && b

	 beq $s0, $zero, label1   # if (a==0) goto label1
         beq $s1, $zero, label1   # if (b == 0) goto label1
      	 addi $s2, $zero, 1       # c = 1
         j label2
label1:  addi $s2, $zero, 0       # c = 0
label2:  . . .

$s0 - a

$s1 - b

$s2 - c

 

a나 b가 하나라도 0이면 결과는 무조건 0이기 때문에 label1으로 가서 c 값에 0(false)을 넣어줍니다.

a와 b 모두 1이면 beq instruction이 실행이 안 되면서 3번째 줄의 addi가 실행됩니다.

3번째 줄의 addi instruction은 c 값에 1을 넣어주면서 결과를 참으로 넣어주게 됩니다.

 

 

 

 

◡̈