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

 
 
 
Reply to this topicStart new topic
> Доступ к глобальным переменным из асм-функции
Trizna
сообщение Dec 1 2010, 10:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 10-01-07
Пользователь №: 24 278



Подскажите, как в ассемблерной функции использовать переменную объявленную в "С" части программы ?

Например имеем код:
CODE
char table[100]

main
{
GET_TABLE_ELEMENT_ASM (char number)
}


Как в ассемблерной функции GET_TABLE_ELEMENT_ASM получить указатель на table ?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 1 2010, 11:22
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



для какого проца?
Go to the top of the page
 
+Quote Post
Trizna
сообщение Dec 1 2010, 11:54
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 10-01-07
Пользователь №: 24 278



Цитата(_Pasha @ Dec 1 2010, 14:22) *
для какого проца?


ARM
Go to the top of the page
 
+Quote Post
alex_os
сообщение Dec 1 2010, 12:20
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Цитата(Trizna @ Dec 1 2010, 13:23) *
Подскажите, как в ассемблерной функции использовать переменную объявленную в "С" части программы ?

Например имеем код:
CODE
char table[100]

main
{
GET_TABLE_ELEMENT_ASM (char number)
}


Как в ассемблерной функции GET_TABLE_ELEMENT_ASM получить указатель на table ?


В r0 будет лежать указатель.
Гуглить "gccarm calling convention".


--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
ARV
сообщение Dec 1 2010, 12:36
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



а разве в ассемблерном файле нельзя указать extern char table[] и пускай линкер сам адреса подставляет?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 1 2010, 12:39
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ARV @ Dec 1 2010, 16:36) *
а разве в ассемблерном файле нельзя указать extern char table[] и пускай линкер сам адреса подставляет?

Код
.extern table

Кстати, r0 будет содержать номер элемента массива а не ссылку на элемент
Go to the top of the page
 
+Quote Post
Trizna
сообщение Dec 1 2010, 13:47
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 10-01-07
Пользователь №: 24 278



Цитата(_Pasha @ Dec 1 2010, 16:39) *
Код
.extern table


Я собственно так и делал, но не смог потом символ table использовать
конструкции
mov r3, table;
mov r3, #table;
компилятор не компилирует


Цитата(_Pasha @ Dec 1 2010, 16:39) *
Кстати, r0 будет содержать номер элемента массива а не ссылку на элемент

С этим всё ясно...
Go to the top of the page
 
+Quote Post
Trizna
сообщение Dec 2 2010, 03:43
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 10-01-07
Пользователь №: 24 278



разобрался!

делать нужно

ldr r3, =table

причем table не обязательно объявлять как extern, ассемблер все незнакомые символы считает внешними по умолчанию
Go to the top of the page
 
+Quote Post

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

 


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


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