어셈블리

어셈블리로 보는 비트연산

우대비 2022. 8. 16. 16:45
반응형

~ bitwise not
// 단일 숫자의 모든 비트를 대상으로 0은 1, 1은 0으로 뒤바꿈

& bitwise and
// 두 숫자의 모든 비트 쌍을 대상으로 and를 함

| bitwise or
// 두 숫자의 모든 비트 쌍을 대상으로 or를 함

^ bitwise xor
// 두 숫자의 모든 비트 쌍을 대상으로, xor을 한다

<< 비트 좌측 이동
// 비트열을 N만큼 왼쪽으로 이동
// 왼쪽의 넘치는 N개의 비트는 버림. 새로 생성되는 N개의 비트는 0으로 채워짐
//  *2를 할 때 자주 보이는 패턴

>> 비트 우측 이동
// 비트열을 N만큼 오른쪽으로 이동
// 오른쪽의 넘치는 N개의 비트는 버림
// 왼쪽 생성되는 N개의 비트는 
// - 부호 비트가 존재할 경우 부호 비트를 따라감 (부호있는 정수라면 이 부분을 유의)
// - 아니면 0

flag = (1 << 3);
	1. 00A85245  mov         byte ptr [flag (0A8A149h)],8

1. flag에 8을 넣음

 

flag |= (1 << 2);
    1. 00A8524C  movzx       eax,byte ptr [flag (0A8A149h)]  
    2. 00A85253  or          eax,4  
    3. 00A85256  mov         byte ptr [flag (0A8A149h)],al

1. eax에 flag를 넣고

2. eax와 4를 or연산함

3. al을 flag에 넣음

반응형
LIST

'어셈블리' 카테고리의 다른 글

어셈블리로 보는 비교연산  (0) 2022.08.16
어셈블리로 보는 산술연산 과정  (0) 2022.08.16
어셈블리 함수 기초  (0) 2022.08.11
어셈블리 배열과 주소  (0) 2022.08.11
어셈블리 반복문  (0) 2022.08.11