2012-06-01 2 views
2

에서 테스트 한 후 다음 코드를 참조하십시오. test % ebx와 같은 명령어를 사용한다면 % ebx는 항상 같아야합니까?JL 조립

또한, 나는 GDB에 달려 다음은 정보의 출력이 등록되어 -

(gdb) info registers 
eax   0x0  0 
ecx   0x189f 6303 
edx   0x6  6 
ebx   0x442ff4 4468724 
esp   0xffbde13c  0xffbde13c 
ebp   0xffbde4c8  0xffbde4c8 
esi   0x1d5c4d50  492588368 
edi   0x444140 4473152 
eip   0x80590dd  0x80590dd 
eflags   0x296 [ PF AF SF IF ] 
cs    0x23  35 
ss    0x2b  43 
ds    0x2b  43 
es    0x2b  43 
fs    0x0  0 
gs    0x63  99 

사람이 작업을 수행하는 방법을 설명시겠습니까?

+2

'jl'는 "동일한"과 거의있다. 그것은 단지 SF! = OF인지 테스트합니다. 'test'는 OF를 false로, SF를'operand1 & operand2'의 부호로 설정합니다. 그래서'ebx'가 음수이면 점프를 취할 것입니다. 왜 그들이'js '를 쓰지 않았는지 나는 모른다. 그것은 더 합리적인 것입니다. – harold

+0

위의 코드는 icc 컴파일러에서 디스 어셈블 된 코드입니다. –

+0

그래,하지만 난 아직도 어떤 이유라도 생각할 수 없다. 그것은 매크로 연산 융합을 돕지도 않습니다. 'js'는'jl'과 마찬가지로'test'와 융합 될 수 있습니다. – harold

답변

2

Sign 플래그를 테스트하는 이상한 방법입니다. JL 명령어는 CMP 명령어의 (빼기) 결과가 음수가되었는지 테스트하도록 설계되었습니다.

그러나 TEST 명령어는 결과에 부호 비트가 설정된 경우 SF 플래그도 설정하는 것처럼 보입니다.

http://en.wikipedia.org/wiki/TEST_(x86_instruction)

+0

위의 코드는 icc 컴파일러에서 디스 어셈블 된 코드입니다. –