JMP (x86 명령어)
보이기
x86 어셈블리어에서, JMP
명령어는 무조건 점프를 수행한다. 예를 들면 프로그램 카운터의 변경을 통해 실행 흐름을 이동할 수 있다. 점프를 수행하는 여러 종류의 명령 코드가 있는데, 중앙 처리 장치가 리얼 모드인지 또는 보호 모드인지에 의존한다. 명령어들은 16비트, 32비트 또는 세그먼트:오프셋 포인터를 가진다.[1]
여러 종류의 점프 형식이 있다. 상대, 조건부, 절대 그리고 간접 레지스터 점프가 그것이다.
아래의 예제들은 다음을 의미한다.
- 16비트 포인터를 통한 상대 점프
- long 점프 (세그먼트 내의), 32비트 포인터를 통한 상대 점프
- 그리고 EAX 레지스터를 이용한 간접 레지스터 절대 점프
(비록 처음과 두번째 점프가 상대적이지만, 보통 옵코드에 부호화된 상대적인 오프셋 대신에, 목적지 주소가 보인다.)
예시 1: 새 값인 0x89AB
를 IP로 로드한 다음, CS 레지스터에는 0xACDC
를, 그리고 IP에는 0x5578
를 로드한다.
JMP 0x89AB
JMP 0xACDC:0x5578
예시 2: 0x56789AB1
값을 IP를 로드한다. 오직 보호 모드나 언리얼 모드에서만 가능하다.
JMP 0x56789AB1
예시 3: EAX 레지스터에 저장되어 있는 값으로 점프. 오직 보호 모드에서만 가능하다.
JMP EAX
각주
[편집]- ↑ “Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual (6.5MB)” (PDF). 2009년 11월 3일에 확인함.