2013. 8. 27. 01:30

어셈블리어 - CALL,CMP,JMP 함수

CALL! CMP!

함수들은 잘 쓰면 정말 재밌는 함수입니다 ㅋㅋㅋ

그리고 어셈블리어를 쓰면서 자주 등장하는 요주의 인물들(?)입니다.

 

CALL

예제 : CALL 인자1(주소)

CALL 명령어는 인자를 하나만 받습니다.

CALL의 뜻인 '부르다'처럼 인자1를 불러 오는 명령어입니다.

예제

( 00402000 - ADD EAX,100 )

00401000 - CALL 00401000

00402000 주소엔 add 함수가 있고 00401000 주소엔 call 함수가 있습니다.

00401000 주소의 call 문을 실행할 경우 00402000 주소까지 갈 필요없이

00401000 주소를 call문으로 불러 냈으니 그위치의 함수를 실행하게 됩니다.

대충 C언어의 goto문과 비슷한 원리입니다.

 

CMP

예제 : CMP 인자1,인자2

인자 2개를 비교하는 역활을 합니다.

예제

CMP EAX,200

EAX 안에 들어있는 값이랑 200 이랑 비교를 합니다.

근데 여기서 비교만 하면 아무 의미가 없습니다.

비교 한 후 조건이 따라야하는데 그 조건으로 JMP 명령어가 항상 따라옵니다.

CMP 함수가 나올땐 JMP 함수는 항상 붙어있다 생각하시면 됩니다.

JMP 함수는 특정 지역으로 이동(점프)을 하는것입니다.

예제

CMP EAX,EDX

JE 00401000

(JE = 결과가 같을경우 점프 아닐경우 점프를 수행하지않음)

EAX의 값과 EDX의 값을 비교합니다. 그다음 JMP 함수 중 하나인

JE가 비교한 결과를 보고 점프 수행을 할지 안할지 판단 후 시행하게 되는겁니다.

 

JMP 함수의 종류

명령어

 의미

 부등호

 플래그 조건

 JA

 jump if (unsigned) above

 >

 CF = 0 and ZF = 0

 JAE

 jump if (unsigned) above or eual

 >=

 CF = 0 or ZF = 1

 JB

 jump if (unsigned) below

 <

 CF = 1

 JBE

 jump if (unsigned) below or equal

 <=

 CF = 1 or ZF = 1

 JC

 jump if carry flag set

 

 CF = 1

 JCXZ

 jump if CX is 0

 

 CX = 0

 JE

 jump if equal

 ==

 ZF = 1

 JECXZ

 jump if ECX is 0

 

 ECX = 0

 JG

 jump if (signed) greater

 >

 ZF = 0 and SF == OF

 JZ

 jump if zero

 ==

 ZF = 1

 

감사합니당

 

'어셈블리어' 카테고리의 다른 글

어셈블리어 - PUSH,POP 함수  (1) 2013.08.27
어셈블리어 - INC,DEC,NOP  (3) 2013.08.27
어셈블리어 - ADD,SUB 함수  (1) 2013.08.27
어셈블리어 - MOV,LEA 명령어  (1) 2013.08.27
어셈블리어 - 레지스터*  (0) 2013.08.27