본문 바로가기

Assembly

6-1강 - Conditional Processing 1 (bool과 비교 명령어) (AND, OR, XPR, NOT, TEST, CMP)

1. Boolean and Comparison Instructions

1) AND (Instruction)

1> 사용

AND destination, source

2> 규칙 (MOV와 규칙이 같다.)

- source나 destination 중 하나에만 메모리가 올 수 있다. (메모리에서 메모리로 이동 불가)

- destination에 CS, EIP, IP가 올 수 없다.

- immediate로 이동시킬 수 없다. 

3> 예시 1

4> 예시 2

mov al,'a‘ 		; AL = 01100001b
and al,11011111b 	; AL = 01000001b

 

 

2) OR (Instruction)

1> 사용

OR destination, source

2> 규칙 (MOV와 규칙이 같다.)

- source나 destination 중 하나에만 메모리가 올 수 있다. (메모리에서 메모리로 이동 불가)

- destination에 CS, EIP, IP가 올 수 없다.

- immediate로 이동시킬 수 없다. 

3> 예시 1

4> 예시 2

mov al, 6 		; AL = 00000110b
or al,00110000b 	; AL = 00110110b

5> 예시 3 : CapsLock key

mov ax, 40h                  ; BIOS segment
mov ds, ax
mov bx, 17h                  ; keyboard flag byte
or BYTE PTR [bx], 01000000b  ; CapsLock on

- or을 이용해서 CapsLock을 킨다는 정도만 알면 된다.

 

3) XOR (Instruction)

1> 사용

XOR destination, source

2> 규칙 (MOV와 규칙이 같다.)

- source나 destination 중 하나에만 메모리가 올 수 있다. (메모리에서 메모리로 이동 불가)

- destination에 CS, EIP, IP가 올 수 없다.

- immediate로 이동시킬 수 없다. 

3> 예시 1

 

 

4) NOT (Instruction)

1> 사용

NOT destination

2> 규칙

3> 예시

 

5) TEST (Instruction)

1> 사용

TEST destination, source

AND 연산과 같으나 destination의 값이 변하지 않고 zero flag만 변한다.

2> 규칙

3> 예시 1

4> 예시 2

test al, 00000011b
jnz ValueFound

AL에서 bit 0이나 bit 1이 켜져 있으면 jump 한다.

5> 예시 3

test al, 00000011b
jz   ValueNotFound

AL 에서 bit 0과 bit 1이 모두 꺼져 잇으면 jump한다.

 

6) CMP (Instruction)

compare

1> 사용

CMP destination, source

=> destination과 source를 비교한다. 

2> 규칙

원리 : destination - source의 값으로 flag가 변한다.

- (unsigned) destination == source

=> zero flag set

- (unsigned) destination < source 

=> carry flag set

- (unsigned) destination > source

=> zero flag = 0, carry flag = 0

- (signed) destination > source

=> sign flag == overflow flag

- (signed) destination < source

=> sign flag != overflow flag