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

 
 
> поясните принцип действия, матчасть :)
Kail
сообщение Feb 3 2007, 21:18
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 3-08-06
Пользователь №: 19 285



Изучая доку на RealView ASM V. 3.0, решил углубить свои знания в асме и пописать на нем. И как обычно стали вылезать впросы, которые не приходят в голову, когда пишешь на С и все опции проекта, почти без изменений из Keil'a.
Вот код:
Код
    
    AREA Strcopy, CODE, READONLY
            ENTRY
start
            ldr        r1, =srcstr    ; Pointer o first string
            ldr        r0, =dststr    ; Pointer to second string
            ldr        r3, =45        ; load 45
            ldr        r4, =0x40000004; load addres of RAM
            str     r3, [r4]    ; store 45 in RAM
            bl         strcopy        ; Call subroutie to do copy
stop
            b        stop        ;    make loop
strcopy
            ldrb    r2, [r1], #1; load byte and update address
            strb    r2, [r0], #1; Store byte and update address
            cmp        r2, #0        ; check for zero terminator
            bne        strcopy        ; keep going if not
            mov        pc, lr        ; return

            AREA Strings, DATA, READWRITE
srcstr        DCB "First string - source",0
dststr        DCB "Seconf string - destination",0
            END


Вот листинг линкера
Код
  
    Strcopy                                  0x00000000   Section       56  source1.o(Strcopy)
    source1.s                                0x00000000   Number         0  source1.o ABSOLUTE
    Strings                                  0x40000000   Section       50  source1.o(Strings)
    srcstr                                   0x40000000   Data          22  source1.o(Strings)
    dststr                                   0x40000016   Data          28  source1.o(Strings)
................................................................................
.........................................
    Total RO  Size (Code + RO Data)                   56 (   0.05kB)
    Total RW  Size (RW Data + ZI Data)                52 (   0.05kB)
    Total ROM Size (Code + RO Data + RW Data)        108 (   0.11kB)


Вот вопрос: в процессе отадки в симуляторе кейла, гляжу на адреса ОЗУ, т.е. 0x40000000. А там ничего нету. И кстати часть кода, которая должна копировать строку не работает. Точнее срабатывает один раз, находит нуль и все! Специально написал ряд инструкций, чтобы записать число 45 в ОЗУ. Все работает, в окне просмотра памяти вижу записанное мной число! Как я понимаю Total ROM Size (Code + RO Data + RW Data) - размер образа программы, который будет размещен во флэш. А Total RO Size - та область памяти, которую непосредственно будет считывать процессор и последовательно выполнять комманды (не учитывая прыжков и проч.). Но вот никак не могу понять как Total RW Size перебертся из Total ROM Size в ОЗУ, где ей и место. И почему вобще код копировани строки не работает???

Не хватает мне знания курса "Архиктура ЭВМ", который читают на специальностях, связанных с программированием. Всегда осовные вопросы возникают на грани взаимодействия памяти и процессора. Почему alligment, почему разные инструкции могут работать только с разными данными и проч. Приходится информацию доставать по крупицам, причем под x86. А потом додудывать под arm.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
d__
сообщение Feb 5 2007, 16:46
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



Возьми доку на линкер и запусти поиск по тексту с параметрои одной из этих меток, например Load$$ER_RW$$Base, там все написано... Инициализация так называемого RTL у ИАРА и РВ спрятана в либах и относится к исполняемой системе языка Ц. Если ты пишешь прогу на чистом ассемблере инициализацию ртл должен делать ручками или выдернуть соотв субрутины из либы, но там очень много лишнего. И по моему есть сурцы этих субр, только не помню где...

Зачем стек? Он ведь не используется?

Это так наз "правила хорошого тона " при программировании на ассемблере. Правильно, у тебя используется только один уровень вложения подпрограмм, но если не дай Бог уровень вложения больше одного, тебя постигнет краш. Поэтому, это та сама соломка подстеленная на случай падения...
Go to the top of the page
 
+Quote Post



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

 


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


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