[MP] Week06
- store는 register(8byte 단위) -> memory이기 때문에, memory는 연속된 공간이기 때문에 … ?
- 따라서 store는 u가 붙지 않는다.
- ldu는 있을까? -> x
- Register format: 피연산자가 3개 있는 포맷
2.6 논리 연산자
- shift left logical의 뜻은 왼쪽으로 한 칸씩 이동하고 오른쪽 빈 자리를 0으로 채워라.
Shift Operations
- shift는 곱셈과 같기 때문에 자주 나온다.
-
1011(11) -> 10110(22)
- load나 store할
And Operatinos
- 해당하는 비트에서 and 연산을 하여 그 자리에 쓴다.
- and x9, x10, x11 : x10과 x11의 and 연산 결과를 x9에 대입한다.
- 16진수 한 자리가 2진수 4개의 비트다.
- oxffff = 1111 1111 1111 1111
Or Operations
- or x9, x10, x11 :
- Bitwise AND와 Logical AND는 어떤 차이가 있는가?
int a, b, c;
a = 2; // ...010
b = 3; // ...011
c = a & b; // ...010 = 2 - Bitwise
d = a && b; // T & T = T = 1 - Logical
printf(c, d)
XOR Operations
- A xor 1 = ~A
- 0 xor 1 = 1
- 1 xor 1 = 0
Conditional Operations
- 프로그래밍에서 분기가 많이 나온다.
- go to를 사용하지 마라.
- 조건문, 반복문을 이용해라.
- Branch는 조건문이나 반복문을 이용하는 실체다.
- beq: Brand on equal
- beq rs1, rs2, L1 : rs1과 rs2가 일치하면 L1에 있는 instruction을 실행한다.
Compileing If Statements
if ( i == j ) f = g + h;
else f = g - h;
// f : x19, g : x20, h : x21, i : x22, j : x23
bne x22, x23, Else
add x19, x20, x21
beq x0, x0, Exit
Else: sub x19, x20, x21
Exit: ...