मैं वास्तविक मोड फ़ंक्शन लिख रहा हूं, जो स्टैकफ्रेम के साथ सामान्य कार्य होना चाहिए और इसलिए, इसे% esp के बजाय% sp का उपयोग करना चाहिए। क्या ऐसा करने का कोई तरीका है?वास्तविक मोड के लिए 16-बिट कोड जेनरेट करने के लिए जीसीसी को कैसे बताना है
उत्तर
जहां तक मुझे पता है, जीसीसी 16-बिट x86 के लिए कोड की पीढ़ी का समर्थन नहीं करता है। विरासत बूटलोडर्स और इसी तरह के उद्देश्यों के लिए, आपको 32-बिट मोड में cpu डालने और 32-बिट कोड पर निष्पादन को पास करने के लिए असेंबली भाषा में एक छोटा स्टब लिखना चाहिए। अन्य प्रयोजनों के लिए आपको वास्तव में 16-बिट कोड नहीं लिखना चाहिए।
क्या आप कृपया और अधिक समझाएंगे। -एम 16 विकल्प के बारे में क्या? –
जीसीसी 8086 कोड का उत्पादन नहीं करता है। जीएनयू एएस निर्देश .code16gcc
का उपयोग 16 सी बिट मोड में चलाने के लिए जीसीसी के आउटपुट को इकट्ठा करने के लिए किया जा सकता है, अपने सी स्रोत की शुरुआत में asm(".code16gcc")
डालें, आपका प्रोग्राम 64 किबाइट तक सीमित होगा।
पर प्रलेखित: https://sourceware.org/binutils/docs/as/i386_002d16bit.html#i386_002d16bit –
.code16gcc का उपयोग करना (मुझे अभी भी यकीन नहीं है कि कोई इसे एक स्थिर सुविधा कह सकता है) 16 बिट में चलने वाले कोड का उत्पादन करेगा वास्तविक मोड, हालांकि यह एक निर्देश उपसर्ग का उपयोग करता है जो केवल 386+ पर उपलब्ध है। इसका मतलब है कि यदि आप 8086/8088 (वास्तविक हार्डवेयर या एमुलेटर) को लक्षित कर रहे हैं तो कोड संभवतः ठीक से काम करने में विफल रहेगा। यदि आप 32-बिट संरक्षित मोड में बूटस्ट्रैप प्रविष्टि का इरादा रखते हैं तो एक छोटा 16-बिट असेंबलर स्टब लिखें जो सब कुछ सेट करता है, संरक्षित मोड में प्रवेश करता है और उसके बाद 32 बिट "सी" फ़ंक्शन पर कॉल करता है जो आपके प्रोग्राम की शुरुआत है। –
आप निश्चित रूप से __asm__ निर्देश का उपयोग कर इनलाइन असेंबली के रूप में जीसीसी में 16-बिट असेंबलर को कोड कोड कर सकते हैं। –
जीसीसी 5.2.0 (और संभव पूर्व संस्करण) -m16
ध्वज के साथ 16-बिट कोड पीढ़ी का समर्थन करते हैं। हालांकि, कोड लगभग 32-बिट प्रोसेसर सुविधाओं (जैसे 32-बिट चौड़े रजिस्टरों) पर निर्भर करेगा, इसलिए आपको जेनरेट की गई असेंबली सावधानीपूर्वक जांचनी चाहिए।
man
पृष्ठों से:
-m16 विकल्प के लिए है कि यह विधानसभा उत्पादन की शुरुआत ताकि कम से ".code16gcc" विधानसभा निर्देश आउटपुट को छोड़कर, -m32 रूप में ही है 16-बिट मोड में बाइनरी चलाया जा सकता है।
- 1. जेनरेट कोड पर कोड विश्लेषण को दबाने के लिए कैसे?
- 2. पार्सिंग कोड के लिए जीसीसी
- 3. पैरामीटर के लिए केवल वैध सूची इंडेक्स जेनरेट करने के लिए क्विक चेक को कैसे बताना है?
- 4. सभी टीम सदस्यों के लिए फ़ाइलों को अनदेखा करने के लिए एसवीएन को कैसे बताना है
- 5. जीसीसी आउटपुट को स्टडआउट करने के लिए कैसे करें?
- 6. कोड में नंबरपैड कीबोर्ड का उपयोग करने के लिए UITextField को कैसे बताना है?
- 7. तत्व को लोड करने के बाद फ़ंक्शन निष्पादित करने के लिए जावास्क्रिप्ट को कैसे बताना है?
- 8. अपवाद लॉग इन करने के लिए एनएलओजी कैसे बताना है?
- 9. सीए ++ मोड में .h फ़ाइल खोलने के लिए emacs को कैसे बताना है?
- 10. कैश को अनदेखा करने और सर्वर से ताज़ा करने के लिए OkHttpClient को कैसे बताना है?
- 11. एंट build.xml में त्रुटियों को अनदेखा करने के लिए ग्रहण को कैसे बताना है?
- 12. agda में वास्तविक संख्या को परिभाषित करने के लिए कैसे?
- 13. स्रोत फ़ाइलों में लाइनों को अनदेखा करने के लिए lcov को कैसे बताना है
- 14. Emacs, आर, संगठन मोड: कैसे आर कोड ब्लॉक के भीतर ईएसएस-मोड के लिए स्वचालित स्विच सक्षम करने के लिए?
- 15. अगली बार इसे कॉल करने के लिए कुछ अलग करने के लिए एक मॉकिटो मॉक ऑब्जेक्ट को कैसे बताना है?
- 16. जीसीसी के लिए अपना कोड जेनरेटर बैकएंड कैसे लिखें?
- 17. वास्तविक मोड प्रोग्राम और संरक्षित मोड प्रोग्राम के बीच वास्तविक अंतर क्या है?
- 18. जावा * .jars को शामिल करने के लिए sbt-proguard को कैसे बताना है?
- 19. उपयोगकर्ता अपलोड मीडिया निर्देशिका फ़ाइलों को एकत्रित करने के लिए Django staticfiles को कैसे बताना है?
- 20. प्रबंधित कलाकृतियों को हल करने के लिए एसबीटी को कैसे बताना है
- 21. Gulp.src ([...]) में कुछ फ़ाइलों को छोड़ने या अनदेखा करने के लिए Gulp को कैसे बताना है?
- 22. उद्धृत पहचानकर्ताओं को मजबूर करने के लिए हमेशा एनएचबर्ननेट को कैसे बताना है?
- 23. बंडलर को उन रत्नों को अनदेखा करने के लिए कैसे बताना है जो मौजूद नहीं हैं?
- 24. अमान्य चरित्र संदर्भों को अनदेखा करने के लिए Java SAX पार्सर को कैसे बताना है?
- 25. कोशिकाओं की एक बड़ी श्रृंखला को प्रीलोड करने के लिए UICollectionView को कैसे बताना है?
- 26. कक्षा नामों को खराब करने के लिए प्रोगुआर्ड को कैसे बताना है
- 27. टैग जेनरेट करने के लिए मैं हैकेल-मोड कैसे स्थापित करूं?
- 28. क्या जीसीसी सी ++ 14 उत्पादन कोड के लिए तैयार है?
- 29. एआरएम के लिए न्यूलिब के साथ जीसीसी संकलन क्रॉस: जीसीसी विकल्पों को निर्दिष्ट करने के लिए कैसे करें? मार्च?
- 30. 'लैम्ब्डा' के लिए एलएलवीएम कोड जेनरेट करना, 'परिभाषित करें'
क्या ओएस चलाने के लिए माना जाता है? जीसीसी एमएस-डॉस का समर्थन नहीं करता है। –