Как я могу использовать внешние определения, такие как LONG_MIN и LONG_MAX в коде ассемблера ARM?
Допустим, my_arm.h выглядит так:
int my_arm(int foo);
Допустим, у меня есть my_main.c следующим образом:
...
#include <limits.h>
#include "my_arm.h"
...
int main (int argc, char *argv[])
{
int foo=0;
...
printf("My arm assembler function returns (%d)\n", my_arm(foo));
...
}
И my_arm.s выглядит так:
.text
.align 2
.global my_arm
.type my_arm, %function
my_arm:
...
ADDS r1, r1, r2
BVS overflow
...
overflow:
LDR r0, LONG_MAX @ this is probably wrong, how to do it correctly?
BX lr @ return with max value
Со второй по последнюю строку, я не уверен, как правильно загрузить, я смутно помню, где-то читал, что я должен был определить LONG_MAX в .global, но больше не могу найти ссылку на рабочий пример.
Я компилирую с arm-linux-gnueabi-gcc версии 4.3.2
==================
ОБНОВЛЕНИЕ: цените предложения!К сожалению, у меня все еще возникают проблемы с синтаксисом.
Сначала я сделал небольшой заголовочный файл mylimits.h (сейчас в том же каталоге, что и .S)
#define MY_LONG_MIN 0x80000000
в my_arm.Sя добавил следующее:
...
.include "mylimits.h"
...
ldr r7, =MY_LONG_MIN @ when it was working it was ldr r7, =0x80000000
...
Две проблемы с этим подходом.
Сначала самая большая проблема: символ MY_LONG_MIN не распознается ... так что что-то все еще не правильно
Второе: синтаксис для .include не позволяет мне включать <limits.h>
, я должен был бы добавить, что в mylimits.h, кажется немного глупым, но я полагаю, это нормально:)
Любые указатели?
У меня есть доступ к Руководству разработчика систем ARM Проектирование и оптимизация системного программного обеспечения [2004] и Справочное руководство по архитектуре ARM [2000], однако моя цель - семейство XScale-IXP42x rev 2 (v5l).