Перейти к содержанию
    

я ещё думал такой вариант типа это оптимизатор смотрит что параметры не юзаются и выкидывает их
Вот я тоже об этом думал. А если попробовать так:
static inline int sprintfa(char *dst, char *mft, ...)
{
    int ret_val;
    static int const swi_num = 22;
    asm volatile (
        "swi %1    \n\t" \
        "mov %0, r0 \n\t" \
        :    "=r" (ret_val)
        :    "n" (swi_num), "m" (dst), "m" (mft), "memory"
        :    "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc"
    );
    return ret_val;
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.text:00000560                 EXPORT start
.text:00000560 start
.text:00000560
.text:00000560 var_10          = -0x10
.text:00000560
.text:00000560                 STMFD   SP!, {R4,R5,LR}
.text:00000564                 MOV     R5, #0x80; 'А'
.text:00000568                 SUB     SP, SP, #4
.text:0000056C                 MOV     R0, R5
.text:00000570                 SWI     0x14
.text:00000574                 MOV     R4, R0
.text:00000578                 MOV     R0, R4
.text:0000057C                 MOV     R1, R5
.text:00000580                 SWI     0x11D
.text:00000584                 STR     R4, [SP,#0x10+var_10]
.text:00000588                 SWI     0x16
.text:0000058C                 MOV     R5, R0
.text:00000590                 MOV     R5, #1
.text:00000594                 MOV     R0, R5
.text:00000598                 MOV     R1, R4
.text:0000059C                 SWI     0x148
.text:000005A0                 MOV     R5, R0
.text:000005A4                 MOV     R0, R4
.text:000005A8                 SWI     0x15
.text:000005AC                 BL      sub_50C
.text:000005B0                 MOV     R0, #0
.text:000005B4                 ADD     SP, SP, #4
.text:000005B8                 LDMFD   SP!, {R4,R5,PC}

static inline int sprintfa(char *dst, char *mft, ...)
{
    int ret_val;
    static int const swi_num = 22;
    asm volatile (
        "swi %1    \n\t" \
        "mov %0, r0 \n\t" \
        :    "=r" (ret_val)
        :    "n" (swi_num), "m" (dst)                                    // ругалось на  "memory" что нету "memory"(аргумент)
        :    "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc"
    );
    return ret_val;
}

Изменено пользователем vova7890

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пробовал уже наверно все что можно, спасибо конечно всем кто помогает, но ничего не выходит... :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...