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

 
 
 
Reply to this topicStart new topic
> 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
DASM
сообщение Aug 23 2006, 09:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



А чей ассемблер указывать будем ? RealView -

int q;
int tempReg;

__asm {
mov tempReg, 0x123
str tempReg, [&q]
}

Сообщение отредактировал DASM - Aug 23 2006, 09:22
Go to the top of the page
 
+Quote Post
Ken@t
сообщение Aug 23 2006, 09:22
Сообщение #3


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

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


Гуру
******

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


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

Группа: Свой
Сообщений: 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
DASM
сообщение Aug 23 2006, 10:29
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



а если переменная стековая ?
Go to the top of the page
 
+Quote Post
RRaptor
сообщение Aug 23 2006, 10:52
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #8


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

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



Ну я так и не понял какой у тебя ассемлер. Я CrossStudio не знаю, че это?
Go to the top of the page
 
+Quote Post
Ken@t
сообщение Aug 23 2006, 11:16
Сообщение #9


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

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



Цитата(DASM @ Aug 23 2006, 14:29) *
а если переменная стековая ?

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

псы 2
прикрутка мт-линка к кейлу где нибудь описана , по шагам?


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


Участник
*

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



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


CrossStudio - среда разработки, компилирует c, cpp, asm файлы для разных микроконтроллеров, в том числе и для LPC2136, использует компилятор gcc вроде бы, больше ничего сказать не могу.
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 23 2006, 11:52
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



а чего описывать - он еще проще чем к иару привинчивается через RDI
Go to the top of the page
 
+Quote Post
niccom
сообщение Aug 23 2006, 12:09
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 9-06-05
Пользователь №: 5 868



[
псы 2
прикрутка мт-линка к кейлу где нибудь описана , по шагам?
[/quote]
Смотри
http://electronix.ru/forum/index.php?showtopic=19687
если что непонятно спроси.
У меня с кейлом работает как пулемет.

[
псы 2
прикрутка мт-линка к кейлу где нибудь описана , по шагам?
[/quote]
Смотри
http://electronix.ru/forum/index.php?showtopic=19687
если что непонятно спроси.
У меня с кейлом работает как пулемет.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:23
Рейтинг@Mail.ru


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