1. 시프트(Shift) 연산
- 산술 시프트
곱셈과 나눗셈을 간단하게 할 수 있음.
게임 서버에서 오브젝트 ID를 만들 때(64비트)
(1) Left Shift
바이트 내의 비트를 왼쪽으로 한 칸씩 밀어냄
ex) 0011 0010 Lsh 1 = 0110 0100
shl eax, 8 ; 비트를 왼쪽으로 8칸 밀어냄
부호가 양수일 때 왼쪽으로 한 칸 밀려나면 값이 2배 증가
(2) Right Shift
바이트 내의 비트를 오른쪽으로 한 칸씩 밀어냄
ex) 0011 0010 Rsh 1 = 0001 1001
shr eax, 8 ; 비트를 오른쪽으로 8칸 밀어냄
부호가 양수일 때 오른쪽으로 한 칸 밀려나면 값이 1/2로 감소
단, 레지스터의 크기를 넘어 밀려난 비트는 손실됨(값이 0으로 변환됨)
2. 논리(Logical) 연산
(1) NOT
NOT A ; A의 반대를 출력함
NOT 0(False) = 1(True)
(2) AND
A AND B ; A이고 B인 값을 출력함
둘 다 1이면 1, 그 이외에는 0을 출력
(3) OR
A OR B ; A이거나 B를 만족하면 값을 출력
둘 중 하나라도 1이면 1, 아니면 0을 출력
(4) XOR
둘 다 1이거나 둘 다 0이면 0을 출력, 아니면 1을 출력
mov al, 0b10010101 mov bl, 0b01111100 and al, bl ; al = al and bl => 0b0001 0100 = 0x14 not al => 0b1110 1011 = 0xeb |
mov al, 0b10010101 mov bl, 0b01111100 xor al, bl xor al, bl => 자기 자신으로 되돌아옴 |
암호화에 사용할 수 있음
[값] xor [키] => 암호화
[암호화 된 값] xor [키] => 복호화
xor al, al ; al에 0을 대입함
3. 비트플래그
각 비트에 정보를 저장할 수 있음(플레이어의 행동, 스킬 등)
'어셈블리' 카테고리의 다른 글
0-9. 반복문(Loop) (0) | 2023.04.28 |
---|---|
0-8. 분기문(If) (0) | 2023.04.28 |
0-6. 사칙연산 (0) | 2023.04.27 |
0-5. 문자와 엔디안 (0) | 2023.04.27 |
0-4. 변수와 레지스터 (0) | 2023.04.27 |