어셈블리어 - 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 |