문제

내가 찾는 일부에서는 어셈블리에 의해 생성된 분해 일부는 C 프로그램과 나는 혼동하여 하나의 최적화를 참조하는 것이다.

말할 수 없는 최적화에서 GCC 컴파일러 사용 subl 지시 빼기위한 경우는 최적화 설정(-O3 정확한 수)컴파일러 사용 leal 교육 대신 뺄셈,아래 예제:

없이 최적화:

83 e8 01     subl $0x1, %eax 

최적화

8d 6f ff     leal -0x1(%edi), %ebp 

이 두 지시는 3 바이트의 길이를,그래서 나는 보지 않는 최적화 here.할 수 있는 사람이 있었 저를 도와주고 설명하려고 컴파일러의 선택입니까?

어떤 도움을 감사하겠습니다.

도움이 되었습니까?

해결책

그것이 어렵게 말하지 않고 보는 원래 C 는 코드를 생산하고 이것이다.

하지만 나는 생각했다 경우,기 때문에 그것이 leal 할 수 있습 빼기를 할 수 밖의 위치를 파괴하지 않고 소스에 등록합니다.

이 저장할 수 있습니다 추가 등록을 이동합니다.


첫 번째 예제:

83 e8 01     subl $0x1, %eax 

덮어 %eax 이로써 파괴합니다.

두 번째 예제:

8d 6f ff     leal -0x1(%edi), %ebp 

%edi - 1%ebp. %edi 보존을 위해 사용 가능합니다.

다른 팁

또한 명심하십시 즉 lea 에 영향을 미치지 않는 반면,플래그 sub 는 않습니다.그렇다면 계속되는 지침에 의존하지 않는 것에 의해 업데이트 뺄셈 다음 업데이트 플래그를 좀 더 효율적으로 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top