반응형

논리 명령어
| AND 명령어 (and) | ||
| AND [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값을 AND연산한다. 대응되는 비트가 두 개 전부 1일때만 결과가 1이고, 아니면 0이다. | ||
| AND EAX, 13h | ||
| EAX가 0x10h 라고 가정하면 EAX의 2진수는 1010이고, 0x13h는 1101이다. 두개를 AND 연산하면 1001으로 EAX에는 1001이 대입된다. |
| OR 명령어 (or) | ||
| OR [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값을 OR연산한다. 대응되는 비트가 두 개 중 하나만 1일이거나 두 개 전부 1이면 결과가 1이고, 아니면 두 개 전부 0일때만 결과가 0이다. |
||
| OR EAX, 13h | ||
| EAX가 0x10h 라고 가정하면 EAX의 2진수는 1010이고, 0x13h는 1101이다. 두개를 OR 연산하면 1111 으로 EAX에는 1111이 대입된다. |
| XOR 명령어 (exclusive or) | ||
| XOR [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값을 XOR연산한다. 대응되는 비트가 두 개 중 하나만 1일때만 결과가 1이고, 아니면 전부 결과가 0이다. | ||
| XOR EAX, 13h | ||
| EAX가 0x10h 라고 가정하면 EAX의 2진수는 1010이고, 0x13h는 1101이다. 두개를 XOR 연산하면 0110으로 EAX에는 0110이 대입된다. |
| NOT 명령어 (invert) | ||
| NOT [피연산자1] | ||
| [피연산자1]의 값을 NOT연산한다. [피연산자1]에 대해 1의 보수를 구한다. |
||
| NOT EAX | ||
| EAX가 0x10h 라고 가정하면 EAX의 2진수는 1010이다. EAX를 NOT 연산하면 0101이 EAX에 대입된다. |
| TEST 명령어 (and function to flags, no result) | ||
| TEST [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값을 비교한다. CMP 명령어와 다르게 값을 빼는 과정을 저장하지 않고 값만 비교한다. |
||
| TEST EAX, 13h | ||
| EAX가 0x10h 라고 가정하면 EAX의 2진수는 1010이고, 0x13h는 1101이다. 두개를 TEST 연산하면 두 개의 값이 다르므로 ZF는 1이된다. ;예시 2 TEST EAX, 10h 라고 하면 EAX와 0x10h를 비트단위 AND 연산한다. EAX와 10h의 값이 같기 때문에 ZF는 0이 된다. |
| SHL 명령어 (shift left) | ||
| SHL [피연산자1] [피연산자2] | ||
| [피연산자1]을 [피연산자2]의 값만큼 왼쪽으로 자리옮김(Shift)한다. 밀려나서 범위를 벗어나는 비트는 캐리 플래그(CF)에 저장되고, 새로 생기는 빈자리는 특정 값(0 또는 부호 비트)으로 채워진다. |
||
| SHL AL, 1 | ||
| mov al, 0b10110010 ; AL = 10110010b shl al, 1 ; AL을 왼쪽으로 1칸 시프트 ; 결과 ; AL = 01100100b ; CF = 1 (원래 최상위 비트) |
| SAL 명령어 (shift arithmetic left) | ||
| SAL [피연산자1] [피연산자2] | ||
| [피연산자1]을 [피연산자2]의 값만큼 왼쪽으로 자리옮김(Shift)한다. 밀려나서 범위를 벗어나는 비트는 캐리 플래그(CF)에 저장되고, 새로 생기는 빈자리는 특정 값(0 또는 부호 비트)으로 채워진다. |
||
| SAL AL, 3 | ||
| mov bl, 5 ; AL = 5 (00000101b) sal Al, 3 ; AL을 왼쪽으로 3칸 시프트 (5 * 2^3 = 40) ; 결과 ; AL = 40 (00101000b) ; CF = 0 |
| SHR 명령어 (shift right) | ||
| SHR [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값만큼 오른쪽으로 자리옮김(Shift)한다. 밀려나서 범위를 벗어나는 비트는 캐리 플래그(CF)에 저장된다. 비트를 오른쪽으로 이동시키고, 새로 생기는 왼쪽 빈자리를 항상 0으로 채우며 부호 없는(unsigned) 정수에 사용된다. |
||
| SHR AL, 1 | ||
| mov al, 0b10110010 ; AL = 10110010b shr al, 1 ; AL을 오른쪽으로 1칸 시프트 ; 결과 ; AL = 01011001b ; CF = 0 (원래 최하위 비트) |
| SAR 명령어 (shift arithmetic right) | ||
| SAR [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값만큼 오른쪽으로 자리옮김(Shift)한다. 밀려나서 범위를 벗어나는 비트는 캐리 플래그(CF)에 저장된다. 비트를 오른쪽으로 이동시키고, 새로 생기는 왼쪽 빈자리를 원래의 부호 비트(최상위 비트) 값으로 채운다. 부호 있는(signed) 정수에 사용된다. |
||
| SAR AL, 1 | ||
| ; AL = 10110010b (부호 있는 8비트 정수로 -78) mov al, 0b10110010 sar al, 1 ; AL을 산술 오른쪽으로 1칸 시프트 (-78 / 2 = -39) ; 결과 ; AL = 11011001b (부호 비트 '1'이 유지됨, 십진수로 -39) ; CF = 0 (원래 최하위 비트) |
| ROL 명령어 (rotate left) | ||
| ROL [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값만큼 왼쪽으로 비트를 회전(rotate) 이동한다. | ||
| ROL AL, 1 | ||
| 모든 비트가 왼쪽으로 한 칸씩 이동한다. 최상위 비트(MSB)는 캐리 플래그(CF)와 최하위 비트(LSB) 자리로 동시에 복사된다. mov al, 0b10110010 rol al, 1 ; 결과 ; AL = 01100101b (원래 MSB '1'이 LSB로 이동) ; CF = 1 (원래 MSB) |
| ROR 명령어 (rotate right) | ||
| ROR [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값만큼 오른쪽으로 비트를 회전(rotate) 이동한다. | ||
| ROR AL, 1 | ||
| 모든 비트가 오른쪽으로 한 칸씩 이동한다. 최하위 비트(LSB)는 캐리 플래그(CF)와 최상위 비트(MSB) 자리로 동시에 복사된다. mov al, 0b10110010 ror al, 1 ; 결과 ; AL = 01011001b (원래 LSB '0'이 MSB로 이동) ; CF = 0 (원래 LSB) |
| RCL 명령어 (rotate through carry left) | ||
| RCL [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값에 자리올림(carry, CF)를 포함하여 왼쪽으로 비트를 회전(rotate) 이동한다. | ||
| RCL AL, 1 | ||
| 모든 비트가 왼쪽으로 한 칸씩 이동한다. 최상위 비트(MSB)는 캐리 플래그(CF)에 들어간다. 원래의 캐리 플래그 값이 최하위 비트(LSB) 자리로 들어온다. clc ; CF를 0으로 초기화 mov al, 0b10110010 rcl al, 1 ; 결과 CF=0 이었으므로 ; AL = 01100100b (원래 CF '0'이 LSB로 들어옴) ; CF = 1 (원래 MSB) |
| RCR 명령어 (rotate through carry right) | ||
| RCR [피연산자1] [피연산자2] | ||
| [피연산자1]에 [피연산자2]의 값에 자리올림(carry, CF)를 포함하여 오른쪽으로 비트를 회전(rotate) 이동한다. | ||
| RCR AL, 1 | ||
| 모든 비트가 오른쪽으로 한 칸씩 이동한다. 최하위 비트(LSB)는 캐리 플래그(CF)에 들어간다. 원래의 캐리 플래그 값이 최상위 비트(MSB) 자리로 들어온다. stc ; CF를 1로 설정 mov al, 0b10110010 rcr al, 1 ; 결과 CF=1 이었으므로 ; AL = 11011001b (원래 CF '1'이 MSB로 들어옴) ; CF = 0 (원래 LSB) |
반응형
'시스템 > 리버싱' 카테고리의 다른 글
| 어셈블리 전송 명령어 (0) | 2025.06.23 |
|---|---|
| 어셈블리 산술 연산 명령어 (0) | 2025.06.22 |
| 레지스터 (0) | 2025.06.09 |
| dreamhack Quiz:x86 Assembly 2 (0) | 2022.08.25 |