비트마다 비교하는 연산자
이름 | 기능 | 종류 |
---|---|---|
Bit-by-bit AND | 비트마다 and연산 | and, andi |
Bit-by-bit OR | 비트마다 or연산 | or |
Bit-by-bit NOT | 비트마다 not 연산 | nor |
Shift left | 비트를 왼쪽으로 옮김 | sll |
shift right | 비트를 오른쪽으로 옮김 | srl |
이름 | 기능 | 형식 |
---|---|---|
and | 레지스터의 각 비트마다 and 연산을 한다 | and $t0, $t1, $t2 |
andi | 레지스터와 상수(2진수변환) 각 비트마다 and 연산을 한다 | and $t0, $t1, 10 |
A andi -1(0XFFFFFFFF) => A
1010 1010 1001 1000 1000 1011 1111 1000 AND 1111 1111 1111 1111 1111 1111 1111 1111 -------------------------------------------- 1010 1010 1001 1000 1000 1011 1111 1000
이름 | 기능 | 형식 |
---|---|---|
or | 레지스터의 각 비트마다 or 연산을 한다 | or $t0, $t1, $t2 |
ori | 레지스터와 상수(2진수변환) 각 비트마다 or 연산을 한다 | or $t0, $t1, 10 |
A ori 0(0XFFFFFFFF) => A
1010 1010 1001 1000 1000 1011 1111 1000 OR 0000 0000 0000 0000 0000 0000 0000 0000 -------------------------------------------- 1010 1010 1001 1000 1000 1011 1111 1000
: OR + NOT
이름 | 기능 | 형식 |
---|---|---|
nor | 비트마다 OR연산을 한것에 NOT연산을 한다 | nor $t1, $t2, $t3 |
> NOT연산자가 없는 이유! : 자기 자신과 nor 하거나 0과 nor하면 된다
NOR $t7 $t1, $t11010 1010 1001 1000 1000 1011 1111 1000 OR 1010 1010 1001 1000 1000 1011 1111 1000 -------------------------------------------- 1010 1010 1001 1000 1000 1011 1111 1000 NOT -------------------------------------------- 0101 0101 0110 0111 0111 0100 0000 0111 (not $t1)
이름 | 기능 | 형식 |
---|---|---|
sll | 왼쪽으로 i bits만큼 shift한다 2^i만큼 곱한다. | sll $t2, $s0, 4 |
srl | 오른쪽으로 i bits만큼 shift한다 2^i만큼 나눈다. | srl $t2, $s0, 3 |
sll로 인해 생기는 LSB 빈자리엔 0을 채우고,
srl로 인해 생기는 MSB 빈자리는 없어진다!
.text
.globl main
main:
addi $t1, $0, 0x3c00
addi $t2, $0, 0x0DC0
and $t0, $t1, $t2
andi $t3, $t1, -1 # $t3 = $t1
or $t4, $t1, $t2
ori $t5, $t1, 0 # $t5 = $t1
nor $t6, $t1, $t2
nor $t7, $t1, $t1 # $t7 = not $t1
ori $s0, $0, 9 # $s0 = 9
sll $t2, $s0, 4 # $t2 = $s0 * 2^4
srl $t4, $t2, 2 # $t4 = $t2 / 2^2