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

 
 
> Сви прерывания в gcc, переменное количество аргументов??
vova7890
сообщение Nov 20 2010, 07:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



Долго искал метод запуска сви на гсс, и недавно нашёл одно единственное решение - инлайновая функция с асм встакой. Так вот оно прокатывает когда есть фиксированное количество аргументов, а вот как быть с переменным? К примеру у меня есть функция sprintf(char *dst, char *mft, ...) под номером сви 22, как сделать вызов сви на такое? Вот как я делаю с фиксированным количеством аргументов.

Код
static inline long do_SWI1( const int swi_num,
    long par0)
{
    long ret_val;

    asm volatile (
        "mov r0, %2 \n\t" \
        "swi %1    \n\t" \
        "mov %0, r0 \n\t" \
        :    "=r" (ret_val)
        :    "n" (swi_num), "r" (par0)
        :    "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc"
    );

    return ret_val;
}


В асм вставку можно передавать ва_листы? :-D

Сообщение отредактировал vova7890 - Nov 20 2010, 07:51
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vova7890
сообщение Nov 26 2010, 07:39
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 19-11-10
Пользователь №: 61 026



Вот что происходит:

Код
  char *temp = (char*)malloc(128);
  zeromem(temp, 128);
  sprintfa(temp, "%s %s", "Hello", "world"); // ваш вариант функции

  ShowMSG (1, (int)temp);
  mfree(temp);
  
  maincsm_onclose(0);


Код
.text:000004C8                 EXPORT start
.text:000004C8 start
.text:000004C8                 STMFD   SP!, {R4,R5,LR}
.text:000004CC                 MOV     R5, #0x80; 'А'
.text:000004D0                 MOV     R0, R5
.text:000004D4                 SWI     0x14
.text:000004D8                 MOV     R4, R0
.text:000004DC                 MOV     R0, R4
.text:000004E0                 MOV     R1, R5
.text:000004E4                 SWI     0x11D
.text:000004E8                 SWI     0x16                ; вот она просто втыкнутая в код свишка
.text:000004EC                 MOV     R5, R0
.text:000004F0                 MOV     R5, #1
.text:000004F4                 MOV     R0, R5
.text:000004F8                 MOV     R1, R4
.text:000004FC                 SWI     0x148
.text:00000500                 MOV     R5, R0
.text:00000504                 MOV     R0, R4
.text:00000508                 BL      sub_8
.text:0000050C                 BL      sub_474
.text:00000510                 MOV     R0, #0
.text:00000514                 LDMFD   SP!, {R4,R5,PC}


я ещё думал такой вариант типа это оптимизатор смотрит что параметры не юзаются и выкидывает их, пробовал различные атрибуты оптимизации к вставке шото тоже ничего не выходит sad.gif

Сообщение отредактировал vova7890 - Nov 26 2010, 07:58
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vova7890   Сви прерывания в gcc   Nov 20 2010, 07:51
- - rezident   А в документации разве не описаны правила передачи...   Nov 20 2010, 19:40
- - vova7890   че это не рекомендуется? А че лучше будет когда пр...   Nov 20 2010, 20:02
|- - rezident   Цитата(vova7890 @ Nov 21 2010, 01:02) Как...   Nov 20 2010, 20:25
|- - AHTOXA   rezident, gcc умеет оптимизировать asm-вставки. v...   Nov 20 2010, 21:40
|- - vova7890   Цитата(AHTOXA @ Nov 21 2010, 00:40) rezid...   Nov 21 2010, 06:33
- - vova7890   Похоже это невозможно, или никто не знает   Nov 21 2010, 19:48
- - vova7890   блин, и тип double неправильно передаётя... Короче...   Nov 22 2010, 07:59
|- - klen   Цитата(vova7890 @ Nov 22 2010, 10:59) бли...   Nov 24 2010, 19:05
- - vova7890   да вот уже 4-й день никак не придумаю... видимо по...   Nov 25 2010, 10:41
|- - Сергей Борщ   QUOTE (vova7890 @ Nov 25 2010, 12:41) да ...   Nov 25 2010, 11:16
- - vova7890   КАК РАЗОБРАТЬ ЭТИ ПАРАМЕРТЫ ДЛЯ АСМ ВСТАВКИ!...   Nov 25 2010, 13:36
|- - Сергей Борщ   QUOTE (vova7890 @ Nov 25 2010, 15:36) КАК...   Nov 25 2010, 14:21
- - vova7890   А вы думаете я так не пробывал? Не совсем так но ч...   Nov 25 2010, 17:03
|- - Сергей Борщ   QUOTE (vova7890 @ Nov 26 2010, 09:39) я е...   Nov 26 2010, 13:49
- - vova7890   Код.text:00000560 EXPORT start .text:0...   Nov 26 2010, 20:46
- - vova7890   Я пробовал уже наверно все что можно, спасибо коне...   Nov 26 2010, 22:12


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

 


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


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