그래서 R0와 R1은 현재 작업 + 1
을에 2 (잘 더하기를 수행 한 가지로로드 : 내가 사용 크로스 컴파일러는 우분투의 기본에있다
10648: e1a00003 mov r0, r3
1064c: e51b1010 ldr r1, [fp, #-16]
10650: eb00fd36 bl 4fb30 <____aeabi_uidivmod_veneer>
나는 그들이 엄지 손가락으로 팔을 전환하는 _veneer 사용 추측이 모드를 전환 할 수 트램 폴린이다, 여기에 실제 모듈로 작업을 이동합니다
0004fb30 <____aeabi_uidivmod_veneer>:
4fb30: e51ff004 ldr pc, [pc, #-4] ; 4fb34 <____aeabi_uidivmod_veneer+0x4>
4fb34: 00010905 .word 0x00010905
을,이 엄지 손가락 코드 ,
00010904 <__aeabi_uidivmod>:
10904: 2900 cmp r1, #0
10906: d0f8 beq.n 108fa <__aeabi_uidiv+0x252>
10908: e92d 4003 stmdb sp!, {r0, r1, lr}
1090c: f7ff fecc bl 106a8 <__aeabi_uidiv>
10910: e8bd 4006 ldmia.w sp!, {r1, r2, lr}
10914: fb02 f300 mul.w r3, r2, r0
10918: eba1 0103 sub.w r1, r1, r3
1091c: 4770 bx lr
1091e: bf00 nop
엄지 손가락 모드 그래서 그 다음, 정상적인 분열을 보이는 결과를 곱하고 예를
문제가 엄지 손가락 모드 궁금
12345 % 100 = 12345 - ((12345/100)*100) = 12345 - (123*100) = 12345 - 12300 = 45
에 대한 뺍니다. arm1176에는 확실히 엄지 손가락 형태가, 진짜 것 및 I qemu 엄지를 할 수있다.
당신은 알아 조립 및 링크 할 수 있지만 실험을 시도 할 수 있습니다 : 당신의 툴체인 접두사가있는 경우입니다
.thumb
.thumb_func
.globl thumb_test
thumb_test:
add r0,#1
bx lr
arm-none-linux-gnueabi-as thumb_test.s -o thumb_test.o
또는 무엇이든을, 그리고 다른 모든 것들에 제출 된 .o를 연결합니다. C 코드에서
이
unsigned int thumb_test (unsigned int);
로 선언하고 그 값을 더한 다시 가야 전달할 어떤 ... 대신 모듈의이 시도.
시도해 볼 또 다른 사항은 나누기가 작동하지만 모듈러스가 아닌지 확인하십시오. 문제는 곱하기 명령어입니까? 누가 알아.
흠, 나는 내가 문제를 볼 생각 : 당신은 그것이 BX 또는 BLX 수있는 LDR로 모드를 전환하지 못할
0004fb30 <____aeabi_uidivmod_veneer>:
4fb30: e51ff004 ldr pc, [pc, #-4] ; 4fb34 <____aeabi_uidivmod_veneer+0x4>
4fb34: 00010905 .word 0x00010905
을가 엄지 손가락을 실행하려고 할 때, 그것은 아마도 정의되지 않은 핸들러 것입니다 암 모드의 코드.
전환 모드가 작동해야하는 몇 가지 예를 특히 qemu로 작성했습니다.이제 이것은 낮은 수준의 예제입니다. 예를 들어 printf가 없습니다. uart에 대한 정보를 볼 수있는 출력을 가지고 있습니다. 이것이 문제 (엄지 모드로 전환) 인 경우 프로그램을 컴파일하고 링크하는 방법을 검토해야합니다. 인터 워킹을 지정해야 할 수도 있고 이전에 코드 쉐어리 (현재 멘토 그래픽에 의해 소비 됨) 툴 체인을 사용하지 않는 경우 툴 체인이 어떻게 구축되었는지 이해해야 할 수도 있습니다. gnu/gcc 기반의 것을 사용하고 있다고 가정합니다.
거기에 정의되지 않은 처리기를 넣거나 추적을보고 주소 0x0000000 근처의 PC 드롭을 볼 수 있다면 어떻게 될까요? 당신이 나의 작은 thumb_test 물건으로 만들면 bx 대신에 ldr을 사용하여 거기에 도착하면 작동하지 않아야합니다. ...
해체를 검사해야합니다. 관련 디스 어셈블리를 게시 할 수 있습니까? 당신이 만든 프로그램? qemu가 아닌 실제 하드웨어에서 이것을 실행 했습니까? –
https://singpolyma.net/test.asm에서 분해 코드를 게시했습니다 (경고 : 매우 큼). 실제 하드웨어에는 액세스 할 수 없습니다. 내 목표는 QEMU입니다. – singpolyma