मैं एआरएम असेंबलर कोड में बाहरी परिभाषा जैसे LONG_MIN और LONG_MAX का उपयोग कैसे कर सकता हूं?एआरएम असेंबलर में सी परिभाषा का उपयोग कैसे करें
मान लीजिए कि my_arm.h इस तरह दिखता है:
int my_arm(int foo);
चलो कहते हैं कि मैं एक my_main.c इस प्रकार करते हैं:
.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
:
...
#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 इस तरह दिखता है
दूसरी पंक्ति के लिए दूसरा, मुझे यकीन नहीं है कि सही तरीके से लोड कैसे किया जाए, मुझे अस्पष्ट रूप से कहीं पढ़ना याद है, मुझे परिभाषित करना था .global में LONG_MAX, लेकिन अब एक कामकाजी उदाहरण के लिंक नहीं मिल रहा है।
मैं के साथ हाथ-linux-gnueabi-जीसीसी संस्करण 4.3.2
==================
अद्यतन संकलन कर रहा हूँ: सुझाव की सराहना ! दुर्भाग्य से, मुझे अभी भी वाक्यविन्यास के साथ परेशानी हो रही है।
पहले, मैं
#define MY_LONG_MIN 0x80000000
my_arm.S में मैं जोड़ा (एस के रूप में ही निर्देशिका में अब के लिए) एक छोटे से हेडर फाइल mylimits.h बनाया निम्नलिखित:
...
.include "mylimits.h"
...
ldr r7, =MY_LONG_MIN @ when it was working it was ldr r7, =0x80000000
...
दो समस्याओं इस दृष्टिकोण के साथ।
सबसे पहले सबसे बड़ी समस्या: .include मुझे शामिल <limits.h>
, मैं जोड़ने के लिए है कि mylimits में होता नहीं करता है के लिए वाक्य रचना: प्रतीक MY_LONG_MIN मान्यता प्राप्त नहीं है ... इसलिए कुछ अभी भी ठीक नहीं है
दूसरा। एच, थोड़ा सा लगता है, लेकिन मुझे लगता है, यह ठीक है :)
कोई बात नहीं?
मैं करने के लिए एआरएम सिस्टम डेवलपर की मार्गदर्शिका डिजाइनिंग और अनुकूलन सिस्टम सॉफ्टवेयर [2004] और एआरएम वास्तुकला संदर्भ मैनुअल [2000] उपयोग कर सकते है, मेरे लक्ष्य X स्केल-IXP42x परिवार फिरना 2 (v5l), हालांकि है।
न एआरएम के बारे में पता है, लेकिन अगर आप MIPS में, एस के लिए विस्तार करने के लिए का नाम बदलकर सी preprocess फ़ाइल बनाता है। – Tom
का उपयोग # शामिल नहीं है। शामिल करें, और। नहीं, जैसा कि उत्तर में कहा गया है। इस तरह आप एक जीसीसी फीचर का फायदा उठाते हैं, और सबकुछ x86 में मेरे परीक्षणों के लिए जाना चाहिए, असेंबली अलग-अलग – ShinTakezou