2013-05-31 3 views
-2

x86 프로세서에서 cmp 명령을 사용 중이고 제대로 작동하고 있습니다 (이진 파일은 gcc를 사용하여 생성됩니다). 그러나 arm cortex a9에서 사용하는 동안 올바른 출력을 제공하지 않습니다 (이진 파일은 십자 기호를 사용하여 생성됩니다 gcc)CMP 명령이 제대로 작동하지 않습니다.

cmp 명령을 사용하는 X86 시스템에서 비교할 때 보드 특정 바이너리가 적절한 출력을 생성합니다.

X-86 시스템 :

cmp a.bin b.bin 

및 적절한를

내가 b.bin, a.bin 2 개 파일을 가지고 말은 (CMP를 사용하여 비교하면서 같아야한다).

팔 피질 A9 : 여기

cmp a.bin b.bin 

b.bin

a.bin도가 동일해야합니다.

그러나 불일치가 발생합니다.


실마리주세요!

+0

'gcc'의 버전이 동일한가요? 양쪽 모두에'gcc -v'를 실행하고 출력을 게시하십시오. 또한, 똑같이 부르시겠습니까? 참고 자료 : [binary changes each build] (http://stackoverflow.com/questions/4140329/binary-object-file-changing-in-each-build). –

+0

이 exe 대 elf 일입니까? elf 및 다른 형식의 gcc 및 기타 컴파일러는 바이트를 파일과 비교하는 경우 꽤 쉽게 볼 수있는 컴파일 타임의 타임 스탬프를 넣습니다. 일부 형식은 그렇지 않을 수도 있습니다. 랩퍼와 같은 elf/coff/exe가없는 원시 바이너리 파일이라면 tangrs 응답을 참조하십시오. 두 개의 바이너리가 동일한 부모 이름 (gcc, msvc 등)을 공유하는 두 개의 툴과 일치한다고 기대할 이유가 없습니다. –

+0

차이점을 표시/나열하십시오. –

답변

0

당신의 질문은 분명하지 않고 어렴풋합니다. 그래서 어둠 속에서 찔러보고 똑같은 소스 코드가 왜 다른 파일로 컴파일되는지 묻고 있습니다.

컴파일 된 프로그램 (UB 또는 이식성 문제가 없다고 가정)은 컴파일러가 어떤 컴파일러이든 관계없이 기능적으로 동일하지만 이진 수준의 프로그램은 반드시 필요하지는 않습니다.

서로 다른 최적화 수준은 서로 다른 파일을 생성합니다. 컴파일러는 빌드 날짜를 파일에 포함시킬 수 있습니다. 다른 컴파일러가 코드를 다르게 정렬합니다.

'동일한'프로그램에 대해 서로 다른 결과가 나올 수있는 이유는 다음과 같습니다.

관련 문제