Перейти к содержанию
    

WinAVR+AVRStudio Дизассемблирование

Вопрос.

Пишу программу в WinAVR-20090313 для mega128, потом пытаюсь отладить через AVRStudio. Загружаю проект в студию включаю view ->Diasassembler помогите разобраться в том как она выдает результат по сравнению с .lss файлом?

1. Что означает первое число с "+" в начале строки?

2. Код команды перевернут, поменяны местами старший и младший байт по сравнению с .lss файлом?

3. По ходу встречаются комментарии

@00000000: _delay_loop_2
---- UNKNOWN_FILE ---------------------------------------------------------------------------------
0: File not found
+00000000:   940C01EF    JMP       0x000001EF     Jump
....
311: File not found
+0000022F:   2E0F        MOV       R0,R31         Copy register
+00000230:   E3FE        LDI       R31,0x3E       Load immediate
+00000231:   2EEF        MOV       R14,R31        Copy register
+00000232:   24FF        CLR       R15            Clear Register
+00000233:   2DF0        MOV       R31,R0         Copy register
313: File not found
+00000234:   E36D        LDI       R22,0x3D       Load immediate
+00000235:   E070        LDI       R23,0x00       Load immediate
---- LCD_winAVR.c ---------------------------------------------------------------------------------
4284:         for(k=0; k<size_data; k++)
+00000236:   01D9        MOVW      R26,R18        Copy register pair
+00000237:   0FA4        ADD       R26,R20        Add without carry
+00000238:   1FB5        ADC       R27,R21        Add with carry
4286:             eeprom_write_byte(Adr_EE, data[k]);        //
+00000239:   01F8        MOVW      R30,R16        Copy register pair
+0000023A:   0FE2        ADD       R30,R18        Add without carry
+0000023B:   1FF3        ADC       R31,R19        Add with carry
+0000023C:   8190        LDD       R25,Z+0        Load indirect with displacement
---- d:\project\bzu_second\mega128\winavr\v_60/d:/winavr-20090313/lib/gcc/../../avr/include/avr/eeprom.h 
300: File not found
+0000023D:   8188        LDD       R24,Y+0        Load indirect with displacement
+0000023E:   FD81        SBRC      R24,1          Skip if bit in register cleared
+0000023F:   CFFD        RJMP      PC-0x0002      Relative jump
311: File not found
+00000240:   01F7        MOVW      R30,R14        Copy register pair
+00000241:   83B1        STD       Z+1,R27        Store indirect with displacement
+00000242:   83A0        STD       Z+0,R26        Store indirect with displacement
313: File not found
+00000243:   01FB        MOVW      R30,R22        Copy register pair
+00000244:   8390        STD       Z+0,R25        Store indirect with displacement
315: File not found
+00000245:   B60F        IN        R0,0x3F        In from I/O location
+00000246:   94F8        CLI                      Global Interrupt Disable
+00000247:   9AE2        SBI       0x1C,2         Set bit in I/O register
+00000248:   9AE1        SBI       0x1C,1         Set bit in I/O register
+00000249:   BE0F        OUT       0x3F,R0        Out to I/O location
+0000024A:   5F2F        SUBI      R18,0xFF       Subtract immediate
+0000024B:   4F3F        SBCI      R19,0xFF       Subtract immediate with carry

 

Какие файлы она не может найти, можно ли сделать чтобы этих ошибок не было?

 

4. Может в ассемблере на разобрался но эти команды похоже разные

.lss код

    ac9c:    31 e0           ldi    r19, 0x01; 1
    ac9e:    f9 01           movw    r30, r18
    aca0:    31 97           sbiw    r30, 0x01; 1
    aca2:    f1 f7           brne    .-4     ; 0xaca0 <main+0x3e>
        {
            // wait 1/10 ms
            _delay_loop_2(((F_CPU) / 4e3) / 10);
            __ticks --;
    aca4:    01 97           sbiw    r24, 0x01; 1
        __ticks = 1;
    else if (__tmp > 65535)
    {
        //    __ticks = requested delay in 1/10 ms
        __ticks = (uint16_t) (__ms * 10.0);
        while(__ticks)
[b]    aca6:    d9 f7           brne    .-10    ; 0xac9e <main+0x3c>[/b]

    _delay_ms(30);        //    1000 Задержка на переходные процессы

 

AVRStudio

 

---- d:\project\bzu_second\mega128\winavr\v_60/d:/winavr-20090313/lib/gcc/../../avr/include/util/delay_basic.h 
105: File not found
+0000564D:   E720        LDI       R18,0x70       Load immediate
+0000564E:   E031        LDI       R19,0x01       Load immediate
+0000564F:   01F9        MOVW      R30,R18        Copy register pair
+00005650:   9731        SBIW      R30,0x01       Subtract immediate from word
+00005651:   F7F1        BRNE      PC-0x01        Branch if not equal
---- d:\project\bzu_second\mega128\winavr\v_60/d:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h 
124: File not found
+00005652:   9701        SBIW      R24,0x01       Subtract immediate from word
120: File not found
[b]+00005653:   F7D9        BRNE      PC-0x04        Branch if not equal[/b]
---- LCD_winAVR.c ---------------------------------------------------------------------------------
8138:         Init_Port();
+00005654:   940E0932    CALL      0x00000932     Call subroutine

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пишу программу в WinAVR-20090313 для mega128, потом пытаюсь отладить через AVRStudio.
Сочувствую. Когда-то я тоже был вынужден вести отладку в AVRStudio (необходимо было работать с атмеловским эмулятором). Вспоминаю как страшный сон...

 

1. Что означает первое число с "+" в начале строки?

Я дизассемблером почти никогда не пользовался, отлаживал по исходникам. Но, насколько я помню, это адрес команды (процессорной инструкции) в словах (не байтах!) программной памяти (как это принято у Атмела). Байтовый адрес получается умножением этого числа на 2.

 

2. Код команды перевернут, поменяны местами старший и младший байт по сравнению с .lss файлом?
В чем вопрос-то? Почему поменяны? :)

Не знаю, что у Вас за lss файл (похоже, что он получен дизассемблером из комплекта binutils), но, насколько я вижу, там показана последовательность байтов (между ними есть пробел), в то время как дизассемблер AVR-студии показывает коды инструкций в виде чисел. Для AVR принят little-endian формат, то еть младший байт идет первым, старший последним. Поэтому и получается что, например, число abcd представляется последовательностью байтов cd ab.

 

3. По ходу встречаются комментарии

---- [b]d:\project\bzu_second\mega128\winavr\v_60/d:/winavr-20090313/lib/gcc/../../avr/include/avr/eeprom.h[/b] 
300: File not found

Какие файлы она не может найти, можно ли сделать чтобы этих ошибок не было?

??? Так написано ведь, какой файл. Она не находит файл с исходным кодом, из которого был получен дизассемблированный код. Типичная причина - исходник был удален после компиляции (например редко кто держит исходники стандартных библиотек типа libc). Хотя я вижу, что у Вас студия не находит eeprom.h - это странно, проверяйте пути. Возможно Вы перемещали эти файлы, в этом случае надо пересобрать библиотеки, чтобы в отладочной информации объектных файлов были актуальные пути.

Другая возможная причина - в объектном файле вообще отсутствует отладочная информация (модуль скомпилирован без -g), в результате студия просто не знает, из какого файла получен код. Предполагаю, что именно поэтому она пишет "UNKNOWN_FILE".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я дизассемблером почти никогда не пользовался, отлаживал по исходникам. Но, насколько я помню, это адрес команды (процессорной инструкции) в словах (не байтах!) программной памяти (как это принято у Атмела). Байтовый адрес получается умножением этого числа на 2.

 

Не совсем так, это смещение относительно стартового адреса программы или отдельного модуля если дизассемблируется объектник или библиотека.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...