Изучая доку на 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.