2013-08-27 2 views
1

내가 어떤 점프점프 명령과 비교 디버그

는 EDX는 127

은 (는) 점프를 명시

이 촬영됩니다

cmp edx, eax 
ja short <offset> 
했다 -126와 EAX를했다, 지금은 그 기초를 이해 명령을 이해하려고 노력 중이 야 예를 들어 우리가 JZ 명령어를 가지고 있고 결과가 같으면 분명히 점프가 취해질 것입니다. 내가 cmp 명령이 소스에서 대상을 뺍니다,이 경우에는 -126이 127이 추가되고 결과가 1이라는 것을 이해합니다. MATH 결과가 플래그를 트리거하는 것을 얻지 못하고 있습니까? 내가

+0

'127 - (-126) == 253'이 아니라'1'이 아니라 ..'ja'는 (Z) ero 플래그와 (S) ign 플래그를보고, 둘 다 설정되지 않은 경우 점프. 즉, 빼기의 결과가 양수이고 0이 아닌 경우 – twalberg

+0

코드는 Intel 구문과 유사하므로'-126-127'이됩니다 (0xFFFFFF82 - 0x7F로 작성하면 더 유용합니다). – Michael

답변

2

ja 수단이 경우 부호 위 (CF=0ZF=0)를 이동 알고 싶은 모든 것입니다. 부호있는 값에 해당하는 명령어는 jg입니다.

32 비트 값 -126은 부호없는 값으로 볼 때 분명히 127 (0x7F)보다 큰 0xFFFFFF82입니다.

+0

FFFFFFF가 FFFFFFF 인 것을 볼 수 있습니다. 그것은 음수 대 긍정적 인 일 이었지만, cmp 연산에 대해 무엇을 기다려야합니까? 소스에서 대상을 뺍니까? 또는 아니오? 그냥 숫자를 비교하고, 그 동안 EDI, EDI를 테스트 한 다음 점프하는 JL이있는 작업을 보았습니까? –

+0

@davidwabb'test edi, edi \ jl somewhere'는'edi'의 사인을 테스트합니다. 'SF xor OF'는'jl'이 점프합니다. 'test'는 SF를 결과의 부호로 설정하고 OF를 0으로 설정합니다. 따라서 edi가 부정적 일 경우 점프 할 것입니다. – harold