C++프로그래밍/어셈블리 언어

어셈블리 논리연산

season97 2024. 9. 15. 11:24

▶ 논리연산의 종류

 

ㆍ not and or xor

- 이 4가지 종류가 있다.

 

1. not A

ㆍ A의 반대 (0이면 1, 1이면 0)

 

2. A and B

ㆍ 잘생겼고 and 키도 크고 -> 둘다 참이면 1, 아니면 0 

 

3. A or B 

ㆍ 잘생겼거나 or 키가 크거나 -> 둘중 하나라고 참이면 1, 아니면 0

 

4. A xor B

ㆍ 둘다 1이거나 둘다 0이면 0, 아니면 1

-> 뭔소리지? 예시를 보자

위의 숫자와 아래의 숫자의 xor을 한다고 예를 들어보자

첫 자리부터 0,1 이면 0 1,1이면 1... 이렇게 하니 이해가 된다

 

◆ 어셈블리 코드에서 확인

ㆍ 이제는 문법은 꽤 익숙하다. 

ㆍ 내가 아는 논리연산대로 값이 출력이 되는걸 확인할 수 있다.

xor연산자 실습

ㆍ 동일한 값으로 xor을 해봤다!

결과창

ㆍ 2번 진행하니 자기 자신으로 돌아오는걸 확인할 수 있다.

더보기

※ 암호학에서 유용한 이유

 

ㆍ 대칭 키 암호화가 가능하다, value를 key로 xor연산하여 암호문 C를 생성하고

 

ㆍ 이 key를 다시 xor 연산하여 원래의 value로 되돌릴 수 있다

  마지막에 있던 요놈의 기능을 이제 알겠다. xor은 동일한 값으로 xor을 하면 무조건 0을 반환한다.

  xor rax , rax는 C++의 return 0; 과 같이 프로그램이 종료됨을 알리는 것이다 

 

 

 

논리연산의 응용 사례

 

 bitflag란? : 비트마다 하나의 의미를 부여하는 경우가 있다.

ㆍ 각 비트를 개별적인 플래그(참/거짓)으로 사용해 여러 상태를 표현하는 기법

 

1. 예를들어 0000 0011 은 플레이어가 날아다닐 수 있는 상태

2. 0000 0001은 플레이어가 날 수 없는 상태

3.이런식으로 비트에다 의미를 부여하고 상태를 나누는걸 bit flag 라고 한다.

 

※ 장단점

장점:

ㆍ여러개의 bool 값... 더러운 bool값을 하나의 정수형 변수에 저장할 수 있으니 메모리를 절약할 수 있다

ㆍ또한 CPU에서 빠르게 처리되므로 성능이 좋다

 

단점:

ㆍ 가독성이 안좋다, 또한 비트수에 따라 최대 플레그 수가 제한된다 (예를들어 32비트 정수형 변수는 최대 32개)

 

'C++프로그래밍 > 어셈블리 언어' 카테고리의 다른 글

어셈블리 반복문  (0) 2024.09.15
어셈블리 분기문  (1) 2024.09.15
쉬프트 연산  (0) 2024.09.15
문자와 엔디안  (0) 2024.09.14
변수와 레지스터  (0) 2024.09.14