|
|
 |
Ответов
(1 - 11)
|
Aug 23 2006, 09:22
|

Частый гость
 
Группа: Свой
Сообщений: 144
Регистрация: 5-08-05
Пользователь №: 7 382

|
Цитата(RRaptor @ Aug 23 2006, 12:54)  И опять вопрос по ассемблеру, первый этап прошел нормально, функцию определения длины строки написал (всего 19 команд), но опять появились вопросы. Есть ли возможность из ассемблера присвоить некоторое переменной заданное значение. Загрузить его можно .extern buf ldr R0,=buf а как сохранить что либо в переменной buf. Похоже сохранение выполняется только командой str, но как тогда как получть адрес buf. Очевидно, что аналога команды LEA из Intel ассемблера в системе команд ARM7 нет. Можно конечно в функцию в качестве параметра передавать адрес переменной buf, но может есть решение лчше? Код mov r0,#0x00 ldr r1,=__program_start mov r2,#0x00 B L_2_MovVec L_1_MovVec: ldr r3,[R1,#+0] str r3,[r0,#+0] adds r1,r1,#0x04 adds r0,r0,#0x04 adds r2,r2,#0x1 L_2_MovVec: cmp r2,#0xE bcc L_1_MovVec типа
--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее? Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
|
|
|
|
|
Aug 23 2006, 09:23
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(Ken@t @ Aug 23 2006, 13:22)  Цитата(RRaptor @ Aug 23 2006, 12:54)  И опять вопрос по ассемблеру, первый этап прошел нормально, функцию определения длины строки написал (всего 19 команд), но опять появились вопросы. Есть ли возможность из ассемблера присвоить некоторое переменной заданное значение. Загрузить его можно .extern buf ldr R0,=buf а как сохранить что либо в переменной buf. Похоже сохранение выполняется только командой str, но как тогда как получть адрес buf. Очевидно, что аналога команды LEA из Intel ассемблера в системе команд ARM7 нет. Можно конечно в функцию в качестве параметра передавать адрес переменной buf, но может есть решение лчше?
Код mov r0,#0x00 ldr r1,=__program_start mov r2,#0x00 B L_2_MovVec L_1_MovVec: ldr r3,[R1,#+0] str r3,[r0,#+0] adds r1,r1,#0x04 adds r0,r0,#0x04 adds r2,r2,#0x1 L_2_MovVec: cmp r2,#0xE bcc L_1_MovVec типа обожаю ответы, которые ни на что не отвечают. как тогда как получть адрес buf
|
|
|
|
|
Aug 23 2006, 10:25
|

Частый гость
 
Группа: Свой
Сообщений: 144
Регистрация: 5-08-05
Пользователь №: 7 382

|
Цитата(DASM @ Aug 23 2006, 13:23)  обожаю ответы, которые ни на что не отвечают. как тогда как получть адрес buf Дим , это очевидно ldr r1,=__program_start в r1 адрес буфера .... ---- noli mi tangere
--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее? Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
|
|
|
|
|
Aug 23 2006, 10:52
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 3-08-06
Из: Санкт-Петербург
Пользователь №: 19 279

|
Если честно я вообще ничего не понял, среда CrossStudio, контроллер LPC2136, набор команд ARM, есть фаил *.cpp в котором Код extern "C" DWORD Funk(); int var=0;
int main(void) { Funk(); } второй файл *.asm Код .section .text, "ax" .code 32 .align 0 .global Funk .extern var Funk: stmdb sp!, {r0-r4} // как переменной var присвоить 1 ??
ldmia sp!,{r0-r4} bx LR // на строку - пишет неопределенный символ __var, _var тоже ldr r1,=__var
|
|
|
|
|
Aug 23 2006, 11:16
|

Частый гость
 
Группа: Свой
Сообщений: 144
Регистрация: 5-08-05
Пользователь №: 7 382

|
Цитата(DASM @ Aug 23 2006, 14:29)  а если переменная стековая ? Так в условии задачи этого нет ? вообще взять доку на кросс студию и почитать как именуются и где распологаются переменные. вконце концов листинг асм посмотреть, что там и куда кладёт студия... псы там из асма попытка достучаться до глобальной переменной - варианты 1. в куче 2. сегменте данных 3. в стеке доступ разный.... а пусть в билию смотрит. псы 2 прикрутка мт-линка к кейлу где нибудь описана , по шагам?
--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее? Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
|
|
|
|
|
Aug 23 2006, 11:17
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 3-08-06
Из: Санкт-Петербург
Пользователь №: 19 279

|
Цитата(klen @ Aug 23 2006, 15:08)  Ну я так и не понял какой у тебя ассемлер. Я CrossStudio не знаю, че это? CrossStudio - среда разработки, компилирует c, cpp, asm файлы для разных микроконтроллеров, в том числе и для LPC2136, использует компилятор gcc вроде бы, больше ничего сказать не могу.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|