어셈블리어 명령어 [AND, OR, XOR]
AND (Logical AND)
Destination과 Source 피연산자의 각 비트가 AND 연산 됩니다.
AND 연산은 각 비트가 모두 1일때만 결과 값이 1이 됩니다.
레지스터, 상수, 메모리를 사용할 수 있습니다.
AND reg, reg
AND reg, imm
AND reg, mem
AND mem, imm
AND mem, reg
X Y X (AND) Y
0 0 0
0 1 0
1 0 0
1 1 1
OR (Inclusive OR)
Destination과 Source 피연산자의 각 비트가 OR 연산 됩니다.
OR 연산은 각 비트가 하나라도 1이면 결과 값이 1이 됩니다.
결과에 따라 CF, OF, ZF 플래그가 세트 될 수 있습니다.
레지스터, 상수, 메모리를 사용할 수 있습니다.
OR reg, reg
OR reg, imm
OR reg, mem
OR mem, imm
OR mem, reg
X Y X (OR) Y
0 0 0
0 1 1
1 0 1
1 1 1
XOR (Exclusive OR)
Destination과 Source 피연산자의 각 비트가 XOR 연산 됩니다.
XOR 연산은 각 비트가 서로 다른 값일 때만 결과가 1이 되고 같은 값이라면 결과는 0이 됩니다.
XOR 연산을 통해서 OF, CF가 0으로 세트되고 결과에 따라서 ZF가 1로 세트 될 수 있습니다.
레지스터를 0으로 초기화하는 방법은 여러가지가 있지만 자주 사용하는 예시를 알아보겠습니다.
MOV AX, 0 (일반적인 AX에 0값을 넣는 명령어입니다.)
SUB AX, AX (AX-AX인 자신끼리 뺄셈 계산을 하는 방식입니다.)
XOR AX, AX (서로 같은 값을 가질 경우 0이 되는 방식을 이용합니다.)
이런 방식들이 생겨난 이유는 컴파일 할 때 크기가 다르기 때문에 사용하게 되었습니다.
MOV 명령어는 3~4정도의 크기를 가지는 반면, SUB와 XOR은 1~2정도의 크기만을 가지고 있습니다.
레지스터, 상수, 메모리를 사용할 수 있습니다.
XOR reg, reg
XOR reg, imm
XOR reg, mem
XOR mem, imm
XOR mem, reg
X Y X (XOR) Y
0 0 0
0 1 1
1 0 1
1 1 0
이상으로 어셈블리어 명령어 AND, OR, XOR에 대하여 알아보았습니다.
감사합니다.
'어셈블리어와 악성코드' 카테고리의 다른 글
어셈블리어 명령어 [SHL, SHR]과 Flag (0) | 2018.11.19 |
---|---|
어셈블리어 XOR을 이용하여 값 바꾸기 (0) | 2018.11.19 |
어셈블리어 명령어 [MUL, DIV] (1) | 2018.11.18 |
어셈블리어 명령어 [CMP, JMP, CALL] (0) | 2018.11.18 |
어셈블리어 명령어 [ADD, SUB] (0) | 2018.11.17 |