|
startup asm |
|
|
|
Jan 14 2009, 14:12
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Объясните как работает этот кот, с ассемблером плохо знаком, сейчас читаю, но не совсем все понятно. А именно инструкция ldr записывает значение находящееся по адресу RESET_ADDR , в регистр pc, переменная RESET_ADDR не где не объявляется так же как и pc ? код взят отсюда : http://electronix.ru/forum/index.php?act=a...st&id=16569Код ldr pc, RESET_ADDR ldr pc, UNDEF_ADDR ldr pc, SWI_ADDR ldr pc, PREFETCH_ABORT_ADDR ldr pc, DATA_ABORT_ADDR .word 0 ldr pc, IRQ_ADDR ldr pc, FIQ_ADDR RESET_ADDR: .word RESET_handler UNDEF_ADDR: .word UNDEF_handler SWI_ADDR: .word SWI_handler PREFETCH_ABORT_ADDR: .word PREFETCH_ABORT_handler DATA_ABORT_ADDR: .word DATA_ABORT_handler .word 0 IRQ_ADDR: .word IRQ_handler FIQ_ADDR: .word FIQ_handler
|
|
|
|
|
Jan 14 2009, 15:56
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
В один регистр PC, по очереди запишутся адреса меток, или pc это счетчик и при каждой последующей записи он инкриминируется ? Еще простой вопрос, что означает .word 0 ? Где можно прочитать по ассемблеру для арм, здесь есть, но не подробно http://www.gaw.ru/html.cgi/txt/doc/micros/..._arm/survey.htmКод ldr pc, RESET_ADDR ldr pc, UNDEF_ADDR ldr pc, SWI_ADDR ldr pc, PREFETCH_ABORT_ADDR ldr pc, DATA_ABORT_ADDR
|
|
|
|
|
Jan 14 2009, 16:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sergey sva @ Jan 14 2009, 18:56)  В один регистр PC, по очереди запишутся адреса меток....  да уж.... а что такое у нас PC? И что произойдет после первой-же в него записи? У Вас проблемы не с ASM а много более глубокие  Цитата Где можно прочитать по ассемблеру для арм, Базовые понятия на http://arm.com Нюансы - в документации на конкретный ассемблер.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 14 2009, 16:28
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sergey sva @ Jan 14 2009, 18:56)  В один регистр PC, по очереди запишутся адреса меток, или pc это счетчик и при каждой последующей записи он инкриминируется ? В регистр PC (Program Counter) пишется один раз, после чего процессор уходит на исполнение программы по записанному в PC адресу. Как уже писали, это таблица векторов исключений. Цитата(sergey sva @ Jan 14 2009, 18:56)  Еще простой вопрос, что означает .word 0 ? Где можно прочитать по ассемблеру для арм .word резервирует в памяти 32-х битное слово, надо полагать. Особенности синтаксиса ассемблера в вашей среде лучше всего описаны в ее документации.
|
|
|
|
|
Jan 14 2009, 17:17
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата(zltigo @ Jan 14 2009, 19:26)   да уж.... а что такое у нас PC? И что произойдет после первой-же в него записи? У Вас проблемы не с ASM а много более глубокие  Базовые понятия на http://arm.com Нюансы - в документации на конкретный ассемблер. Да это верно, проблема гораздо глубже чем думал, не пойму как работает директива "Align 4"  нашел такой текст прочел : не совсем понятно как выравнивается, к примеру если в pc 0x000000ff после align 4 какое значение там будет? http://www.lib.kiev.ua/books/7/40n42.html вот отрывок где эта директива используется: Код .align 4 UNDEF_string: .asciz "\r\nUNDEFINED INSTRUCTION Exception!!!" .align 4 SWI_string: .asciz "\r\nSWI Exception!!!" .align 4 PREFETCH_ABORT_string: .asciz "\r\nPREFETCH ABORT Exception!!!" .align 4 DATA_ABORT_string: .asciz "\r\nDATA ABORT Exception!!!\r\n" .align 4 STOPPED_string: .asciz "\r\nStopped!!!" .align 4 eclipse + yagarto
Сообщение отредактировал sergey sva - Jan 14 2009, 17:21
|
|
|
|
|
Jan 14 2009, 17:25
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sergey sva @ Jan 14 2009, 20:17)  не совсем понятно как выравнивается, к примеру если в pc 0x000000ff после align 4 какое значение там будет? 0x000000ff, ибо align к PC ну никак не относится. Это просто указание ассемблеру, что следующий после align обект будет иметь соответствующее выравнивание. Код ldr r0, [r0] DCB "ab" ALIGN 4 ldr r0, [r0] Код 0x0000006c: e5900000 .... LDR r0,[r0,#0] $d 0x00000070: 00006261 ab.. DCD 25185 <---- ассемблер добавил два байта для выравнивания $a 0x00000074: e5900000 .... LDR r0,[r0,#0]
|
|
|
|
|
Jan 14 2009, 18:46
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sergey sva @ Jan 14 2009, 21:39)  строка abcdef занимает 6 байт Нет. Cемь. Цитата но если использовать выравнивание align 4 то она будет размещена в 8 байтах ? Нет. Семь или в зависимости от нюансов конткретного ассемблера, но совершенно вне зависимости от одиночного align перед этой строкой. P.S. Так и будете заниматься гаданиями?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 15 2009, 21:24
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
С этим кажется разобрался, ядро настраивается отдельно, для каждого режима и стек тоже для каждого режима свой. Другой вопрос: правильно я распределил адреса, для стеков. Ремап не используется. Начала адреса озу с 0x20000000 (at91sam7). Где нужно настраивать компоновщик ( в makefile ? )что бы не записать в стек переменные которые будут использоваться в программе? Код ldr r0, #0x20000900 msr cpsr_c, #(UNDEF_MODE | I_BIT | F_BIT) mov sp, r0 sub r0, r0, #0x00000100 msr cpsr_c, #(ABT_MODE | I_BIT | F_BIT) mov sp, r0 sub r0, r0, #0x00000100 msr cpsr_c, #(FIQ_MODE | I_BIT | F_BIT) mov sp, r0 sub r0, r0, #0x00000100 msr cpsr_c, #(IRQ_MODE | I_BIT | F_BIT) mov sp, r0 sub r0, r0, #0x00000100 msr cpsr_c, #(SVC_MODE | I_BIT | F_BIT) mov sp, r0 sub r0, r0, #0x00000100 msr cpsr_c, #USR_MODE mov sp, r0 sub sl, sp, #0x00000400
Сообщение отредактировал sergey sva - Jan 15 2009, 21:53
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|