Скомпилированный бинарный файл AVR не содержит моих инструкций? - PullRequest
0 голосов
/ 28 сентября 2019

Итак, я написал и вручную «собрал» следующий фрагмент ассемблера, используя набор инструкций AVR PDF с их сайта.

ldi     r17, 0          ; 1110 0000 0001 0000
ldi     r18, 3          ; 1110 0000 0010 0011
ldi     r16, 0          ; 1110 0000 0000 0000
loop:  
    sbrc    r18, 0      ; 1111 1101 0010 0000
    add     r16, r17    ; 0000 1111 0000 0001
    lsl     r17         ; 0000 1100 0001 0001
    lsr     r18         ; 1001 0101 0010 0110
    brne    loop        ; 1111 01-- ---- ----
again:
    rjmp again          ; 1001 010- ---- 110- 
                        ; ---- ---- ---- ----

Однако, когда я на самом деле собираю файл с Avra ​​и выгружаю полученный результат.hex файл в двоичном виде я получаю это:

0011101000110000
0011001000110000
0011000000110000
0011000000110000
0011001000110000
0011000000110000
0011000001000110
0100001100001101
0000101000111010
0011000100110000
0011000000110000
0011000000110000
0011000000110000
0011000100110000
0100010100110000
0011001000110011
0100010100110000
0011000000110000
0100010100110000
0011001000110000
0100011001000100
0011000000110001
0011000001000110
0011000100110001
0011000001000110
0011001000110110
0011100100110101
0100010000111001
0100011000110111
0011010000110101
0000110100001010
0011101000110000
0011001000110000
0011000000110001
0011000000110000
0011000001000110
0100011001000011
0100011000110010
0011000000001101
0000101000111010
0011000000110000
0011000000110000
0011000000110000
0011000000110001
0100011001000110
0000110100001010
0000110100001010

Когда я прошиваю шестнадцатеричный файл на Arduino, он работает нормально (данный asm не дает никакого вывода, но я сделал asm, чтобы повернутьот светодиода и тому подобное, которое работало нормально, поэтому я предполагаю, что это также).Может кто-нибудь сказать мне, что здесь происходит?Почему так много лишних битов и почему я не могу найти ни одной из моих инструкций?

1 Ответ

2 голосов
/ 30 сентября 2019

Я не знаю, почему вы решили взять ASCII-текстовый файл ".hex" и преобразовать его в строки двоичных цифр, если только вы не хотели сделать нашу жизнь сложнее.

Я преобразовал эти загадочныелинии назад к источнику .hex:

:020000020000FC
:1000000010E023E000E020FD010F110F2695D9F745
:02001000FFCF20
:00000001FF

что такое файл ".hex" - вы можете прочитать, например, в Википедии .

Сначаластрока: 02 0000 02 0000 FC устанавливает начальное смещение сегмента (0).

Вторая строка: 10 0000 00 10E023E000E020FD010F110F2695D9F7 45 - это место, где содержится ваш код.Вы можете преобразовать выделенную строку в двоичный файл, если хотите:

1110000000010000
1110000000100011
1110000000000000
1111110100100000
0000111100000001
0000111100010001
1001010100100110
1111011111011001

Как видите, весь ваш код там и без изменений.

...