|
|
 |
Ответов
|
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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|