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

 
 
> ARM assembler - работа с "С" переменными
RRaptor
сообщение Aug 23 2006, 08:54
Сообщение #1


Участник
*

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



И опять вопрос по ассемблеру, первый этап прошел нормально, функцию определения длины строки написал (всего 19 команд), но опять появились вопросы. Есть ли возможность из ассемблера присвоить некоторое переменной заданное значение. Загрузить его можно
.extern buf
ldr R0,=buf
а как сохранить что либо в переменной buf. Похоже сохранение выполняется только командой str, но как тогда как получть адрес buf. Очевидно, что аналога команды LEA из Intel ассемблера в системе команд ARM7 нет. Можно конечно в функцию в качестве параметра передавать адрес переменной buf, но может есть решение лчше?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ken@t
сообщение Aug 23 2006, 09:22
Сообщение #2


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

Группа: Свой
Сообщений: 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

типа


--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее?
Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 23 2006, 09:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Ken@t
сообщение Aug 23 2006, 10:25
Сообщение #4


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

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



Цитата(DASM @ Aug 23 2006, 13:23) *
обожаю ответы, которые ни на что не отвечают. как тогда как получть адрес buf

Дим , это очевидно
ldr r1,=__program_start

в r1 адрес буфера ....
----
noli mi tangere


--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее?
Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
Go to the top of the page
 
+Quote Post
RRaptor
сообщение Aug 23 2006, 10:52
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
klen
сообщение Aug 23 2006, 11:08
Сообщение #6


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Ну я так и не понял какой у тебя ассемлер. Я CrossStudio не знаю, че это?
Go to the top of the page
 
+Quote Post



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

 


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


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