реклама на сайте
подробности

 
 
> Ассебмлер ARM, Система команд ARM а варианте ассемблера IAR
Dir
сообщение Dec 14 2007, 21:25
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Не пинайте ногами только. Поиском искал ... но не нашел. Встал вопрос скорректировать startup для ADuC7128 и ... понеслось sad.gif

Вот сам код хорошо всем известного startup (v4.42a ... arm\examples\AnalogDevices\ADuC712x\InterruptBlinl\cstartup.s79):

Код
        MODULE    ?RESET
        COMMON    INTVEC:CODE:NOROOT(2)
        PUBLIC  __program_start
        EXTERN    ?cstartup
        EXTERN    undef_handler, swi_handler, prefetch_handler
        EXTERN    data_handler,irq_handler, fiq_handler
        CODE32; Always ARM mode after reset    
        org    0x00
__program_start
        ldr    pc,=?cstartup; Absolute jump can reach 4 GByte
        org    0x04
        ldr    pc,=undef_handler
        org    0x08
;        ldr    pc,=swi_handler
        org    0x0c
        ldr    pc,=prefetch_handler
        org    0x10
        ldr    pc,=data_handler
                org     0x14
                DCD     0x00000000
        org    0x18
        ldr    pc,=irq_handler
        org    0x1c
        ldr    pc,=fiq_handler

; Constant table entries (for ldr pc) will be placed at 0x20
        org    0x20
        LTORG
                ENDMO

Приведен только кусок до метки ?csartup. Но это не важно. Вопрос собственно вот какой: где найти систематизированное описание этого ассемблера? Причем и инструкций компилятора, и самих кодов. Сразу скажу, что help к IAR EWB и pdf Assemler Reference Manual оттуда же прочел. Прочел также ARM Arсhitecture Reference Manual (ARM DDI 0100E). И все равно много вопросов. Вот один из них:
Что такое, например, команда
Код
        org    0x18
        ldr    pc,=irq_handler

Смысл ее в общем то понятен. По этому адресу располагается команда перехода на обработку прерывания IRQ. Но что такое "=" перед irq_handler? Описания такого формата нигде не нашел. Может плохо искал?
Ладно, пусть это адрес irq_handler, который находится где-то в области памяти и этот вдрес получим только после работы линкера. Но почему этото слово должно находиться по адресу 0x18 + 0x20? Т.е. в какой собственно код транслируется эта команда? В формате команд ldr всегда присутствует кроме регистра назначения (pc) еще и регистр, содержащий базовый адрес, а также (часто) смещение. Наверное (мне так кажется) данная конструкция транслируется относительно какого-то базового регистра, содержащего "0" со смещением 0x20, но относительно какого регистра? Или я не прав? А если мне смещение нужно не 0x20, а 0x40, например?

PS. Ну, короче, нихрена я не пойму этой команды. Объясните, плиз.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.07124 секунд с 7
ELECTRONIX ©2004-2016