어셈블리어와 악성코드

어셈블리어 명령어 [AND, OR, XOR]

YaluStar 2018. 11. 19. 00:04

어셈블리어 명령어 [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에 대하여 알아보았습니다.

감사합니다.


반응형