यह कैसे किया जाता है? मुझे क्या कदम उठाने की ज़रूरत है और विचार करने के लिए क्या नुकसान और गठजोड़ हैं?मैं आईफोन पर इनलाइन असेंबली कैसे करूं?
उत्तर
मैं काम करने के लिए, कुछ अंदर मदद के लिए धन्यवाद Apple Devforums पर पर इस मिल गया है, अगर आप एक समर्पित IPhone डेवलपर हैं, साइन अप करना चाहिए।
पहली बात का पहला, यह __asm __(), नहीं सादे एएसएम()।
दूसरे, डिफ़ॉल्ट रूप से, XCode एक संकलन लक्ष्य है कि एआरएम अंगूठे अनुदेश सेट के खिलाफ इनलाइन विधानसभा संकलित उत्पन्न करता है, तो USAT एक उचित शिक्षा के रूप में पहचाना गया था। इसे ठीक करने के लिए, लक्ष्य पर "जानकारी प्राप्त करें" करें। "जीसीसी 4.0 - कोड जनरेशन" अनुभाग में नीचे स्क्रॉल करें और "थंब के लिए संकलन" अनचेक करें। फिर इस निम्नलिखित स्निपेट स्वाभाविक रूप से करता है, तो आप "उपकरण" के लिए सक्रिय एसडीके सेट ठीक संकलन होगा
inline int asm_saturate_to_255 (int a) {
int y;
__asm__("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
return y;
}
, अब यह IPhone सिम्युलेटर के साथ काम नहीं करेगा। लेकिन TargetConditionals.h परिभाषित करता है कि आप #ifdef के खिलाफ कर सकते हैं। अर्थात् TARGET_OS_IPHONE और TARGET_IPHONE_SIMULATOR।
मुझे लगता है कि आप सादा asm() के बजाय __asm __() का मतलब है। –
यह आईफोन सिम्युलेटर के साथ क्यों काम नहीं करता है? क्या यह सिम्युलेटर पर कोई असेंबली काम नहीं करता है, या यह है कि आपको असेंबली निर्देशों का एक अलग सेट होना है क्योंकि यह i386 पर चल रहा है? – Roberto
@ रॉबर्टो: आपको मिल गया। सिम्युलेटर x86 पर चल रहा है, इसलिए आप एआरएम असेंबली नहीं चला सकते हैं। यह सिर्फ संकलित नहीं होगा। –
मैं एआरएम कॉर्टेक्स-ए 8 असेंबली-कोड का थोड़ा सा लिखता हूं। आईफोन पर सीपीयू एक एआरएम 11 (afaik) है, इसलिए मूल निर्देश सेट वही है।
आप वास्तव में क्या देख रहे हैं? यदि आप चाहें तो मैं आपको कुछ उदाहरण दे सकता हूं।
संपादित करें:
मैं सिर्फ पता चला आप LLVM-जीसीसी संकलक का उपयोग करना होगा iPhone पर। जहां तक मुझे पता है कि इसे जीसीसी से इनलाइन असेंबलर सिंटैक्स को समझना चाहिए। यदि ऐसा है तो सभी एआरएम इनलाइन असेंबलर ट्यूटोरियल भी आईफोन पर काम करेंगे।
यहां एक बहुत ही कम इनलाइन असेंबलर फ़ंक्शन (सी में) है। क्या आप कृपया मुझे बता सकते हैं कि यह आईफोन पर संकलित और काम करता है? अगर यह काम करता है तो मैं एआरएम इनलाइन असेंबलर में विशेष रूप से एआरएमवी 6 आर्किटेक्चर और डीएसपी एक्सटेंशन के लिए उपयोगी चीजें कैसे कर सकता हूं।
inline int saturate_to_255 (int a)
{
int y;
asm ("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
return y;
}
के बराबर होना चाहिए:
inline int saturate_to_255 (int a)
{
if (a < 0) a =0;
if (a > 255) a = 255;
return a;
}
मैं इसे संकलित करने में सक्षम नहीं हूं। मैं ऐप्पल के एक्सकोड के माध्यम से कोशिश कर रहा हूं। संकलक वास्तव में डिफ़ॉल्ट रूप से जीसीसी 4 पर सेट होता है। यदि मैं इसका उपयोग करके संकलित करता हूं तो यह एक अमान्य निर्देश 'usat' की शिकायत करता है और यदि मैं इसे llvm-gcc का उपयोग करने के लिए सेट करता हूं तो यह एक अवैध आर्किटेक्चर, 'armv6' की शिकायत करता है। –
gcc -O3 -march = armv6 परीक्षण आज़माएं।सी –
वास्तव में llvm-gcc नहीं है जो एक संकलक है जो llvm वर्चुअल मशीन को लक्षित करता है? – artificialidiot
अंगूठे को उस एप्लिकेशन के लिए अनुशंसित किया जाता है जिसके लिए भारी फ्लोट ऑपरेशन की आवश्यकता नहीं होती है। थंब कोड कोड को छोटा बनाता है और परिणाम भी तेज कोड निष्पादन में होता है।
तो आप केवल अंगूठे बंद 3 डी गेम्स की तरह आवेदन के लिए बारी चाहिए ...
वास्तव में, नियम के रूप में, अंगूठे निर्देश सेट का उपयोग करके एआरएम निर्देश सेट का उपयोग करने से काफी धीमी है। अंगूठे के नियम के रूप में (कोई इरादा नहीं है), आप कोड आकार में 1/3 प्राप्त करते हैं और गति में 1/3 ढीले होते हैं। उदाहरण देखें। http://www.arm.com/pdfs/Thumb-2CoreTechnologyWhitepaper-Final4.pdf –
रजिस्टरों भी इनलाइन एएसएम में स्पष्ट रूप से इस्तेमाल किया जा सकता
void foo(void) {
#if TARGET_CPU_ARM64
__asm ("sub sp, sp, #0x60");
__asm ("str x29, [sp, #0x50]");
#endif
}
- 1. जब मैं उन्हें इनलाइन असेंबली
- 2. जीसीसी इनलाइन असेंबली में लेबल
- 3. मैं सभी लोड असेंबली कैसे सूचीबद्ध करूं?
- 4. मैं ILMerged असेंबली में कैसे डिबग करूं?
- 5. इनलाइन असेंबली जो रेड जोन
- 6. मैं आईफोन पर एक लाइन कैसे आकर्षित करूं?
- 7. मैं आईफोन पर जियोकोडिंग (रिवर्स जियोकोडिंग) कैसे करूं?
- 8. मैं एक आईफोन पर एनएसएट्रिब्यूटेड स्ट्रिंग कैसे प्रदर्शित करूं?
- 9. मैं विम में गलत इनलाइन जावास्क्रिप्ट इंडेंटेशन कैसे ठीक करूं?
- 10. जीसीसी इनलाइन असेंबली: ब्लॉक के बाहर लेबल पर जाएं
- 11. मैं हैमल में इनलाइन जावास्क्रिप्ट कैसे शामिल करूं?
- 12. मैं प्रति-असेंबली रेजरपर सेटिंग्स कैसे सेट करूं
- 13. मैं साझा असेंबली और परियोजनाओं के साथ कैसे काम करूं?
- 14. मैं असेंबली में एडीसी का उपयोग कैसे करूं?
- 15. जीसीसी सी ++ और इनलाइन असेंबली कोड?
- 16. मैं जेवीएम असेंबली कोड को बाइटकोड में कैसे संकलित करूं?
- 17. मैं सी/सी ++ से .NET असेंबली कैसे कॉल करूं?
- 18. मैं सी # में असेंबली के संस्करण को कैसे प्राप्त करूं?
- 19. मैं मैन्युअल रूप से जीएसी में असेंबली कैसे कॉपी करूं?
- 20. मैं असेंबली कॉन्फ़िगरेशन फ़ाइल से AppSettings को कैसे पुनर्प्राप्त करूं?
- 21. मैं एमएस-एसक्यूएल में एक असेंबली और इसकी आश्रित असेंबली कैसे अपडेट करूं?
- 22. मैं अपने आईफोन ऐप में यूट्यूब वीडियो कैसे लॉन्च करूं?
- 23. मैं आईफोन UIImageView के साथ चेन स्केल एनिमेशन कैसे करूं?
- 24. आईफोन ऐप परीक्षण: मैं एक साफ इंस्टॉल कैसे प्राप्त करूं?
- 25. आईफोन और आईपैड - मैं कोड कैसे फोर्क करूं?
- 26. मैं संकलन समय पर ज्ञात असेंबली निर्देश का मशीन कोड कैसे प्राप्त करूं?
- 27. रनटाइम पर लोड असेंबली में मैं सामान्य लॉग 4नेट संदर्भ का उपयोग कैसे करूं?
- 28. मैं गतिशील रूप से असेंबली कैसे लोड करूं एएसपी में डिस्क पर नहीं। नेट वेब एप्लिकेशन?
- 29. मैं आईपैड/आईफोन पर फॉर्म
- 30. मैं लम्बे आईफोन 5 स्क्रीन आकार का समर्थन कैसे करूं?
अच्छा सवाल है, मैं बहुत देखने के लिए इच्छुक हूँ प्रतिक्रियाओं। – mdec