.type 매크로 없이는 ARM 어셈블리가 작동하지 않음

Bodokaiser

STM32F0 (ARM Cortex M0) 마이크로 컨트롤러 용 (ARMv6-M) 어셈블러를 배우고 있습니다. 우선, 나는 등록 초기화 스크립트 작성 r00r11, 마지막 r0으로 증가 1루프에 있습니다. 디버거, 즉를 gdb사용 si하여 한 단계를 실행 info reg하고 레지스터를 출력하는 데 사용할 수 있습니다 . 어셈블러 코드는 다음과 같습니다.

.syntax unified
.cpu cortex-m0
.fpu softvfp
.thumb

.global vector_table
.global reset_handler

.type vector_table, %object
vector_table:
    .word _estack
    .word reset_handler

.type reset_handler, %function
reset_handler:
    LDR r0, =0
    LDR r1, =1

    main_loop:
        ADDS r0, r0, 1
    B main_loop

이 훌륭한 튜토리얼을 기반으로 합니다 .

.type x매크로를 제거 할 때 디버거를 통해 레지스터에 변경 사항이 표시되지 않지만 .type 스택 오버플로 게시물에 따르면 -macro는 효과가 없습니다.

왜 등록을 r0하고 r1내가 제거 할 때 일정하게 유지 .type-macros를?

old_timer
.syntax unified
.cpu cortex-m0
.fpu softvfp
.thumb

.global vector_table
.global reset_handler

.type vector_table, %object
vector_table:
    .word 0x20001000
    .word reset_handler

.type reset_handler, %function
reset_handler:
    LDR r0, =0
    LDR r1, =1

.type 함수 사용

Disassembly of section .text:

00001000 <vector_table>:
    1000:   20001000    andcs   r1, r0, r0
    1004:   00001009    andeq   r1, r0, r9

00001008 <reset_handler>:
    1008:   4800        ldr r0, [pc, #0]    ; (100c <reset_handler+0x4>)
    100a:   4901        ldr r1, [pc, #4]    ; (1010 <reset_handler+0x8>)
    100c:   00000000    andeq   r0, r0, r0
    1010:   00000001    andeq   r0, r0, r1

재설정을위한 벡터 테이블에는 1 0x1009의 적절한 주소 ORRed가 있습니다. 함수 선언을 제거하면

disassembly of section .text:

00001000 <vector_table>:
    1000:   20001000    andcs   r1, r0, r0
    1004:   00001008    andeq   r1, r0, r8

00001008 <reset_handler>:
    1008:   4800        ldr r0, [pc, #0]    ; (100c <reset_handler+0x4>)
    100a:   4901        ldr r1, [pc, #4]    ; (1010 <reset_handler+0x8>)
    100c:   00000000    andeq   r0, r0, r0
    1010:   00000001    andeq   r0, r0, r1

당신은 cortex-m에서 부팅되지 않는 바이너리를 얻습니다. 엄지 손가락으로 .thumb_func를 사용할 수도 있으며 발견 된 다음 레이블은 함수로 간주됩니다.

.thumb_func
reset_handler:
    LDR r0, =0
    LDR r1, =1

그리고 당신은 다시 훌륭합니다. 바이너리가 작동합니다.

so.elf:     file format elf32-littlearm


Disassembly of section .text:

00001000 <vector_table>:
    1000:   20001000    andcs   r1, r0, r0
    1004:   00001009    andeq   r1, r0, r9

00001008 <reset_handler>:
    1008:   4800        ldr r0, [pc, #0]    ; (100c <reset_handler+0x4>)
    100a:   4901        ldr r1, [pc, #4]    ; (1010 <reset_handler+0x8>)
    100c:   00000000    andeq   r0, r0, r0
    1010:   00000001    andeq   r0, r0, r1

gnu (s 링커)가 함수간에 트램폴린을 사용하도록하려면 엄지 손가락 연동에도 필요합니다.

.syntax unified
.cpu arm7tdmi
.thumb

.global vector_table
.global reset_handler

.type vector_table, %object
vector_table:
    .word 0x20001000
    .word reset_handler

.thumb_func
reset_handler:
    LDR r0, =0
    LDR r1, =1
    bl hello

.arm

.type hello, %function
hello:
    b reset_handler

준다

Disassembly of section .text:

00001000 <vector_table>:
    1000:   20001000    andcs   r1, r0, r0
    1004:   00001009    andeq   r1, r0, r9

00001008 <reset_handler>:
    1008:   4802        ldr r0, [pc, #8]    ; (1014 <hello+0x4>)
    100a:   4903        ldr r1, [pc, #12]   ; (1018 <hello+0x8>)
    100c:   f000 f80e   bl  102c <__hello_from_thumb>

00001010 <hello>:
    1010:   ea000002    b   1020 <__reset_handler_from_arm>
    1014:   00000000    andeq   r0, r0, r0
    1018:   00000001    andeq   r0, r0, r1
    101c:   00000000    andeq   r0, r0, r0

00001020 <__reset_handler_from_arm>:
    1020:   e59fc000    ldr r12, [pc]   ; 1028 <__reset_handler_from_arm+0x8>
    1024:   e12fff1c    bx  r12
    1028:   00001009    andeq   r1, r0, r9

0000102c <__hello_from_thumb>:
    102c:   4778        bx  pc
    102e:   e7fd        b.n 102c <__hello_from_thumb>
    1030:   eafffff6    b   1010 <hello>
    1034:   00000000    andeq   r0, r0, r0

그렇지 않으면

.arm

hello:
    b reset_handler

작동하지 않는 코드 제공

Disassembly of section .text:

00001000 <vector_table>:
    1000:   20001000    andcs   r1, r0, r0
    1004:   00001009    andeq   r1, r0, r9

00001008 <reset_handler>:
    1008:   4802        ldr r0, [pc, #8]    ; (1014 <hello+0x4>)
    100a:   4903        ldr r1, [pc, #12]   ; (1018 <hello+0x8>)
    100c:   f000 f800   bl  1010 <hello>

00001010 <hello>:
    1010:   ea000002    b   1020 <__reset_handler_from_arm>
    1014:   00000000    andeq   r0, r0, r0
    1018:   00000001    andeq   r0, r0, r1
    101c:   00000000    andeq   r0, r0, r0

00001020 <__reset_handler_from_arm>:
    1020:   e59fc000    ldr r12, [pc]   ; 1028 <__reset_handler_from_arm+0x8>
    1024:   e12fff1c    bx  r12
    1028:   00001009    andeq   r1, r0, r9
    102c:   00000000    andeq   r0, r0, r0

이제 cortex-m에는 arm 모드가 없으므로 인터 워킹이 없지만 C 또는 기타 상위 수준에서 호출하려는 어셈블리 언어의 벡터 테이블 및 기타 함수의 경우 함수 선언이 필요합니다.

내가 본 적이없는 객체 선언은 팔이 추가 될 무렵부터 gnu 도구를 사용해 왔으며 필요하지 않은 칩 작업을 베어 메탈 부트를 수행하고 있습니다 ... 그래서 거기에서 당신을 도울 수 없습니다.

그들이 일정하게 유지되는 이유는 당신이 칩을 매 달았거나 당신이 정의하지 않은 핸들러에 강제로 넣었 기 때문입니다. 현재의 오류 모드를 나타 내기 위해 프로세서 상태가 변경되어야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ARM 인라인 어셈블리 코드가 런타임에 올바르게 작동하지 않음

분류에서Dev

'어셈블리를로드 할 수 없음'이지만 어셈블리가 이미로드되었습니다.

분류에서Dev

C의 인라인 어셈블리가 제대로 작동하지 않음

분류에서Dev

모듈 파일에 필요한 어셈블리 미리로드 : 매니페스트가 작동하지 않음

분류에서Dev

VS2015 참조 된 어셈블리의 정의로 이동이 작동하지 않음

분류에서Dev

VS2015 참조 된 어셈블리의 정의로 이동이 작동하지 않음

분류에서Dev

ARM 어셈블리 시작-이진 파일을 실행할 수 없음

분류에서Dev

이 어셈블리가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

스크랩 된 데이터를 정리하는 VBA 매크로가 작동하지 않음

분류에서Dev

어셈블리의 비트 스터핑이 의도 한대로 작동하지 않음

분류에서Dev

Outlook 2013 매크로가 갑자기 더 이상 작동하지 않음

분류에서Dev

가변 크기 이미지 매핑이 작동하지 않음

분류에서Dev

이 어셈블리 코드가 VGA 텍스트 모드 비디오 메모리로 인쇄하는 데 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Scrapy : 페이지 매김 링크가 작동하지 않음

분류에서Dev

ARM 어셈블리 SVC 호출-LDRH로 SVC 명령어를 가져 오는 것에 대해 혼동

분류에서Dev

파일, 어셈블리 또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다.

분류에서Dev

.NET 어셈블리가 GAC에서로드되지 않음

분류에서Dev

x86 어셈블리 OS hello world가 예상대로 작동하지 않음

분류에서Dev

x86 어셈블리 OS hello world가 예상대로 작동하지 않음

분류에서Dev

SAS CALL SYMPUT이 매크로 내에서 작동하지 않음 (그리고 이전에 작동 함)

분류에서Dev

기본 어셈블리 계산기 할당이 작동하지 않음

분류에서Dev

어떤 이유로 키 리스너가 작동하지 않음

분류에서Dev

프로젝트 어셈블리-프로젝트 어셈블리 "학습 모음 문자"코드에 마크를 추가하는 방법은 무엇입니까?

분류에서Dev

ARM 어셈블리 언어에서 B 25 또는 BEQ 25가 "PC + 8 + 100으로 이동"을 의미하는 이유

분류에서Dev

EF 쿼리로 SQL 쿼리 매핑이 작동하지 않음

분류에서Dev

CSS 마스크 이미지가 반복 없음으로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

이 16 비트 메모리 감지 어셈블리 코드가 작동하지 않는 것 같습니다.

분류에서Dev

스크롤 내부 높이가없는 WebView가 작동하지 않음

분류에서Dev

어셈블리-프로그램이 아무것도 반환하지 않음

Related 관련 기사

  1. 1

    ARM 인라인 어셈블리 코드가 런타임에 올바르게 작동하지 않음

  2. 2

    '어셈블리를로드 할 수 없음'이지만 어셈블리가 이미로드되었습니다.

  3. 3

    C의 인라인 어셈블리가 제대로 작동하지 않음

  4. 4

    모듈 파일에 필요한 어셈블리 미리로드 : 매니페스트가 작동하지 않음

  5. 5

    VS2015 참조 된 어셈블리의 정의로 이동이 작동하지 않음

  6. 6

    VS2015 참조 된 어셈블리의 정의로 이동이 작동하지 않음

  7. 7

    ARM 어셈블리 시작-이진 파일을 실행할 수 없음

  8. 8

    이 어셈블리가 작동하지 않는 이유는 무엇입니까?

  9. 9

    스크랩 된 데이터를 정리하는 VBA 매크로가 작동하지 않음

  10. 10

    어셈블리의 비트 스터핑이 의도 한대로 작동하지 않음

  11. 11

    Outlook 2013 매크로가 갑자기 더 이상 작동하지 않음

  12. 12

    가변 크기 이미지 매핑이 작동하지 않음

  13. 13

    이 어셈블리 코드가 VGA 텍스트 모드 비디오 메모리로 인쇄하는 데 작동하지 않는 이유는 무엇입니까?

  14. 14

    Scrapy : 페이지 매김 링크가 작동하지 않음

  15. 15

    ARM 어셈블리 SVC 호출-LDRH로 SVC 명령어를 가져 오는 것에 대해 혼동

  16. 16

    파일, 어셈블리 또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다.

  17. 17

    .NET 어셈블리가 GAC에서로드되지 않음

  18. 18

    x86 어셈블리 OS hello world가 예상대로 작동하지 않음

  19. 19

    x86 어셈블리 OS hello world가 예상대로 작동하지 않음

  20. 20

    SAS CALL SYMPUT이 매크로 내에서 작동하지 않음 (그리고 이전에 작동 함)

  21. 21

    기본 어셈블리 계산기 할당이 작동하지 않음

  22. 22

    어떤 이유로 키 리스너가 작동하지 않음

  23. 23

    프로젝트 어셈블리-프로젝트 어셈블리 "학습 모음 문자"코드에 마크를 추가하는 방법은 무엇입니까?

  24. 24

    ARM 어셈블리 언어에서 B 25 또는 BEQ 25가 "PC + 8 + 100으로 이동"을 의미하는 이유

  25. 25

    EF 쿼리로 SQL 쿼리 매핑이 작동하지 않음

  26. 26

    CSS 마스크 이미지가 반복 없음으로 작동하지 않는 이유는 무엇입니까?

  27. 27

    이 16 비트 메모리 감지 어셈블리 코드가 작동하지 않는 것 같습니다.

  28. 28

    스크롤 내부 높이가없는 WebView가 작동하지 않음

  29. 29

    어셈블리-프로그램이 아무것도 반환하지 않음

뜨겁다태그

보관