2014-03-04 3 views
1

테스트 명령어를 cmp와 동일하게 사용할 수 있는지 궁금합니다. 의가 있다고 가정 해 봅시다 :테스트는 cmp와 동일합니까?

test %eax, %ebx 
jg some_random_place 

하는 조건에서 그 점프 수행합니다

cmp %eax,%ebx 
jg some_random_place 

퍼센트의 EBX는 내가 지금하는 경우, % eax에보다 큰 것을 제공 some_random_place 점프 그?

답변

3

아니요!

instuction은 sub %eax,%ebx인데, cmp 인스트럭션과 같지만, 실행 후 레지스터는 플래그 레지스터를 제외하고 변경되지 않습니다.

인스 턴싱은 and %eax,%ebx인데, test 인스트럭션에서 실행 후 레지스터는 플래그 레지스터를 제외하고 변경되지 않습니다. efected 플래그는 캐리 = 0, 제로 = X, 오버 플로우 = 0이며, 가입 = X

제로 플래그 = 0 플래그에 서명하면 jg instructon가 점프를 실행해야 = 오버 플로우 경우

그래서 ... and %eax,%ebx의 결과가 긍정적 인 경우

test %eax, %ebx 
jg some_random_place 

은 ... 점프가 실행되어야하며, 0이 아닌

+0

감사합니다! 나는 질문을 한 후에 나 자신이 연구하는 깃발 부분에 갔지만 바이너리가 어떻게 오버 플로우 플래그를 올릴 수 있는지를 알지 못했다. 그 마지막 부분을 나에게 설명해 주시겠습니까? 그 이외에, 선량하고 선명한 대답을! – Setzer22

+0

'and' 또는'test' 인스트럭션은 결코 오버 플로우 플래그를 발생시키지 않습니다. –

+0

오, sign_flag = overflow는 sign_flag가 0과 같아 질 때까지 변환 할 수 있습니다. 즉, 숫자는 양수입니다. 맞습니까? 이제 알았어! 감사합니다. – Setzer22