and operand1, operand2
operand1과 operand2를 and 연산한다.
예를 들어 eax가 0xabcd 일 때,
and eax, 0x1234를 계산해보겠다.
이전에 약간의 부연 설명을 하자면 0x12는 1byte이다. 2진수(bit)로 바꾸어보면 00010010이다.
and 연산은 비교하는 비트가 서로 1일 때만 1이 된다. 0 and 0 = 0 0 and 1 = 0 1 and 0 = 0 1 and 1 = 1 |
eax(0xabcd)를 비트로 바꾸면 1010 1011 1100 1101
0x1234를 비트로 바꾸면 0001 0010 0011 0100
이제 각 비트들끼리 and 연산 해주면 0000 0010 0000 0100이 된다.
16진수로 바꾸어 주면 0x0204가 된다.
eax에 0x0204의 값이 들어간다.
or operand1, operand2
operand1과 operand2를 or 연산한다.
예를 들어 eax가 0xabcd 일 때,
or eax, 0x1234를 계산해보자.
or 연산은 비교하는 비트에 1이 하나라도 있다면 1이 된다. 0 or 0 = 0 0 or 1 = 1 1 or 0 = 1 1 or 1 = 1 |
eax(0xabcd)를 비트로 바꾸면 1010 1011 1100 1101
0x1234를 비트로 바꾸면 0001 0010 0011 0100
각 비트들끼리 계산해주면 1011 1011 1111 1101이 된다.
16진수로 바꾸어 주면 0xBBFD가 된다.
eax에 0xBBFD의 값이 들어간다.
xor operand1, operand2
operand1과 operand2를 xor 연산한다.
예를 들어 eax가 0xabcd 일 때,
xor eax, 0x1234를 계산해보자.
xor 연산은 비교하는 비트의 값이 같으면 0, 다르면 1이 된다. 0 xor 0 = 0 0 xor 1 = 1 1 xor 0 = 1 1 xor 1 = 0 |
eax(0xabcd)를 비트로 바꾸면 1010 1011 1100 1101
0x1234를 비트로 바꾸면 0001 0010 0011 0100
각 비트들끼리 계산해주면 1011 1001 1111 1001이 된다.
16진수로 바꾸어 주면 0xB9F9가 된다.
eax에 0xB9F9의 값이 들어간다.
not operand
operand의 값을 반전시킨다.
예를 들어 eax에 0xabcd 일 때,
not eax
eax(0xabcd)를 비트로 바꾸면 1010 1011 1100 1101이 된다.
not 연산은 모든 비트를 반전시키므로 0101 0100 0011 0010이 된다.
16진수로 바꾸어보면 0x5432가 된다.
'리버싱 > 공부' 카테고리의 다른 글
어셈블리어 call, leave, ret 명령어와 스택프레임 (0) | 2022.06.03 |
---|---|
어셈블리어 push, pop 명령어 (0) | 2022.06.03 |
어셈블리어 add, sub, inc, dec 명령어 (0) | 2022.06.02 |
test, cmp 그리고 분기문 jmp (0) | 2022.03.15 |
어셈블리어 ROL, ROR을 C언어로 구현해보자 (0) | 2022.03.14 |