Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ARM assembler - работа с "С" переменными
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
RRaptor
И опять вопрос по ассемблеру, первый этап прошел нормально, функцию определения длины строки написал (всего 19 команд), но опять появились вопросы. Есть ли возможность из ассемблера присвоить некоторое переменной заданное значение. Загрузить его можно
.extern buf
ldr R0,=buf
а как сохранить что либо в переменной buf. Похоже сохранение выполняется только командой str, но как тогда как получть адрес buf. Очевидно, что аналога команды LEA из Intel ассемблера в системе команд ARM7 нет. Можно конечно в функцию в качестве параметра передавать адрес переменной buf, но может есть решение лчше?
DASM
А чей ассемблер указывать будем ? RealView -

int q;
int tempReg;

__asm {
mov tempReg, 0x123
str tempReg, [&q]
}
Ken@t
Цитата(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

типа
DASM
Цитата(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
Ken@t
Цитата(DASM @ Aug 23 2006, 13:23) *
обожаю ответы, которые ни на что не отвечают. как тогда как получть адрес buf

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

в r1 адрес буфера ....
----
noli mi tangere
DASM
а если переменная стековая ?
RRaptor
Если честно я вообще ничего не понял, среда 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
klen
Ну я так и не понял какой у тебя ассемлер. Я CrossStudio не знаю, че это?
Ken@t
Цитата(DASM @ Aug 23 2006, 14:29) *
а если переменная стековая ?

Так в условии задачи этого нет ?
вообще взять доку на кросс студию и почитать как именуются и где распологаются переменные.
вконце концов листинг асм посмотреть, что там и куда кладёт студия...
псы
там из асма попытка достучаться до глобальной переменной -
варианты
1. в куче
2. сегменте данных
3. в стеке
доступ разный.... а пусть в билию смотрит.

псы 2
прикрутка мт-линка к кейлу где нибудь описана , по шагам?
RRaptor
Цитата(klen @ Aug 23 2006, 15:08) *
Ну я так и не понял какой у тебя ассемлер. Я CrossStudio не знаю, че это?


CrossStudio - среда разработки, компилирует c, cpp, asm файлы для разных микроконтроллеров, в том числе и для LPC2136, использует компилятор gcc вроде бы, больше ничего сказать не могу.
DASM
а чего описывать - он еще проще чем к иару привинчивается через RDI
niccom
[
псы 2
прикрутка мт-линка к кейлу где нибудь описана , по шагам?
[/quote]
Смотри
http://electronix.ru/forum/index.php?showtopic=19687
если что непонятно спроси.
У меня с кейлом работает как пулемет.

[
псы 2
прикрутка мт-линка к кейлу где нибудь описана , по шагам?
[/quote]
Смотри
http://electronix.ru/forum/index.php?showtopic=19687
если что непонятно спроси.
У меня с кейлом работает как пулемет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.