관리 메뉴

Jsecurity

어셈블리 조건 분기문 본문

프로그래밍언어/리버싱 입문

어셈블리 조건 분기문

Great king 2019. 6. 3. 21:47

#Shift 연산

    -사칙연산 만큼 자주 논리연산을 사용한다.

    -4비트씩 이동이 필요하다. 4, 8, 16, 32 비트 단위로 사용

 

※ 종류

shr (shift right)

    - 오른쪽으로 1비트씩 이동 ex) shr ax, 4

shl (shift lenft)

    - 왼쪽으로 1비트씩 이동 ex) shl ax, 4

 

 

#shift 연산 예제

 

#AND, OR, XOR, NOT 연산

 

#and, or, xor operand1, operand2

operand1, operand2

    - 연산대상을 레지스터, 메모리, 상수 모두가능

    - 모두 메모리인 경우는 연산 불가능

연산 결과는 operand1에 저장

 

#not operand1

Operand1

    -연산대상으로 레지스터, 메모리, 상수 모두 가능

    - 연산결과 저장

이진수 형태로 숫자로 입력할 때는 0b로 시작

ex) mov ax, 0b00001000 ;10진수 8

 

 

#AND, OR, XOR, NOT 연산 예제

 

#FLAG Register

    - CPU에는 연산결과의 상태를 모니터링 해주는 특별한 레지스터를 운영

 

#플래그 레지스터에서 대표적인 플래그 2개 학습

    - ZF(Zero Flag): 연산 결과가 Zero이면 설정됨

    - CF(Carray Flag): 연산에서 캐리가 발생하면 설정됨

-플래그 레지스터의값을 변형시키는 명령어들은 주로산술, 논리연산자들이다.

 

#test 명령어

    - AND 연산과 동일

    - AND 연산과의 차이점은 연산 결과를 레지스터에 반영하지 않고, 플래그 레지스터만 반영함

 

형식] test para1, para2

    -para1과 para2의 and 연산을 행하고 결과를 플래그 레지스터에 반영

    -para1에는 연산 결과를 반영하지 않는다.

 

 

'프로그래밍언어 > 리버싱 입문' 카테고리의 다른 글

레지스터  (0) 2019.08.21
어셈블리 조건분기 명령어  (0) 2019.06.09
어셈블리 산술명령어 (Div)  (0) 2019.04.14
어셈블리 산술명령어 (Mul)  (0) 2019.04.14
어셈블리 산술명령어 (add, sub)  (0) 2019.04.14
Comments