2017-04-10 15 views
1

이전에 부트 로딩 목적으로 16 진수 파일을 구문 분석했습니다. 이것은 마이크로 칩의 XC32 툴 체인을 사용하여 생성 된 16 진수 파일로 처음입니다. 지금 당장 나는 16 진수 파일과 디스 어셈블리 간의 차이점이있는 것으로 나타났습니다.16 진수 파일 및 디스 어셈블리 불일치

육각 파일의 처음 세 행 : 목록 파일에서

:020000040000fa 
:020000041d00dd 
:10000000030000100000000040f3060000000000a4 

:

9d000000 <_reset>: 
9d000000: 10000003 b 9d000010 <__reset_switch_isa> 
9d000004: 00000000 nop 

9d000008 <__reset_micromips_isa>: 
9d000008: f340 0006 jalx 9d000018 <_startup> 
9d00000c: 0000 0000 nop 

공지 사항이 목록 파일에는 0x06을 포함해야처럼 9d000008 보이는 해결합니다. 그러나 16 진수 파일은이 위치에서 0x40을 나타내는 것 같습니다. 다음 3 바이트도 예상 된 순서가 아닙니다.

: 10 0000 00 03 00 00 10 00 00 00 00 40 F3 06 00 00 00 예상대로 파일을 다른 기록이 비록 내가 보이지만 바이트이 jalx에 관한 00 00 A4

지시어가 고장난 것 같습니다. 누군가 나를 똑바로 세울 수 있습니까?

감사합니다.

업데이트 : 또 다른 복잡한 데이터 요소입니다. 디버거 (내 부트 로더를 사용하지 않음)를 사용하여 16 진수 파일을 파트로 플래시하는 경우. 내가 실행 메모리 및 분해 목록을 볼 수 있다면, 나는 다음을 참조 :

Address  Instruction  Disassembly 
1D00_0000 10000003  BEQ ZERO, ZERO, 0x1D000010 
1D00_0004 00000000  NOP 
1D00_0008 0006F340  SLL S8, A2, 13 
1D00_000C 00000000  NOP 

IDE에서이 글은 프로그램 코드를 재 해석, 그것은 지금 SLL 명령이 아닌 JALX을 보여줍니다. 이것은 컴파일러가 생성 한 시작 코드이므로 어떤 내용이어야하는지 확신 할 수 없습니다. 바이트 순서는 목록 파일이 아닌 16 진수 파일과 일치하므로, 마이크로 칩 도구는 16 진수 파일을 해석하지만 목록 파일과 일치하지 않습니다.

답변

1

이 질문은 microchip.com 포럼에 게시되었으며 거기에 몇 명의 사용자가 답변을 제공했습니다.

목록 파일 발췌문의 JALX 명령은 기본적으로 MIPS32가 아닌 microMIPS 형식으로되어 있습니다. 따라서 목록 파일과 16 진수 파일 사이에는 실제로 불일치가 없습니다. 16 진수 파일은 내가 시도한 것처럼 오름차순 주소 위치에 기록 된 각 바이트로 해석됩니다. 그러나 업데이트에서 수행 한 것처럼 디스 어셈블리를 보는 것은 명령을 microMIPS로 해석하지 않으므로 IDE를 통해 볼 때 해당 명령의 디스 어셈블리가 올바르지 않습니다. JALX이 실행되면 CPU의 플래그는 프로세서에이 명령을 mircoMIPS로 처리하도록 알립니다.

자세한 내용은, 내가 수신 우수한 응답을 참조하십시오

http://www.microchip.com/forums/FindPost/986740

0

목록에있는 16 비트 값에 Little Endian이 사용 된 것 같습니다. 그것이 32 비트 값인 경우 0x06이 먼저옵니다.

그렇다면 실제로 문제가 없습니다.

+0

헥스 파일은 인텔 형식으로되어 있습니다. the : 8 바이트 뒤에 :가 단지 0 또는 1이면, I8 = 16 비트입니다. 0 ~ 3이면 I16 = 20 비트입니다. 단지 0, 1, 4, 5이면 I32 = 32 비트입니다. 마이크로 칩은 일반적으로 I8을 사용합니다. – cup

+0

@ cup. 귀하의 의견을 보내 주셔서 감사합니다.모든 마이크로 칩이 생성 한 16 진수 파일은 모두 I32입니다. 위에 게시 한 스 니펫에는 처음 2 개 레코드가 32 비트 주소 지정을 허용하는 유형 4입니다. – user3692971

+0

@ 동문회, 귀하의 회신에 감사드립니다. 나는 확실히 전문가는 아니지만 데이터 레코드의 주소를 오름차순으로 연속 된 순서로 나열된 바이트 만 보았습니다. 그것이 통역사가 어떻게 알 수 있을까요? 게시 된 업데이트 된 정보를 기반으로, 나는이 경우에 일어나고 있다고 생각하지 않습니다. – user3692971