क्या x86 असेंबली पर एक विहित पुस्तक है? [बन्द है]


25

विधानसभा पर बहुत सारी किताबें हैं। हालांकि, वे आम तौर पर आईएसएएस से निपटते हैं, जिसके बारे में मुझे परवाह नहीं है, जैसे कि एमआइपी या एआरएम। मैं इन आर्किटेक्चर से नहीं निपटता; मेरे लिए उन्हें सीखने की कोशिश करने का कोई कारण नहीं है।

लेकिन x86 असेंबली की किताबें लगती हैं ... कोई नहीं।

उदाहरण के लिए मान लीजिए कि मैं विंडोज़ पोर्टेबल एक्ज़ीक्यूटेबल फाइल बनाने वाला खिलौना कंपाइलर बनाने की कोशिश कर रहा हूँ।

वहाँ एक किताब है कि x86 विधानसभा पर सर्वोत्तम प्रथाओं, डिजाइन के तरीके, और अन्य उपयोगी जानकारी का वर्णन करने के लिए वास्तविक मानक है? उस किताब के बारे में क्या खास है?


आपके पास कितना विधानसभा का अनुभव है? क्या आपने कभी विधानसभा में सरल सी कार्यक्रमों को संकलित करने के लिए अनुकूलन के बिना जीसीसी का उपयोग करने की कोशिश की है, फिर कोड को सी प्रोग्राम में वापस रिवर्स इंजीनियरिंग?
ब्रायन

10
@ ब्रायन: ऐसा करने में सक्षम होने से पहले मुझे विधानसभा को जानना होगा।
बिली ओनेल

मैंने x86 निर्देश सेट की एक प्रति देखी है। यह 2 खंड है, और शायद मैंने अब तक की सबसे बड़ी पुस्तक देखी है। मज़ा लें :)
एंग्रीबर्ड

2
बिली, यदि आप जानते हैं कि कोई असेंबली नहीं है, तो उनमें से कोई भी सामान्य विचारों को प्राप्त करने के लिए बहुत अच्छा होगा। असेंबली आर्किटेक्चर के बेहद करीब है, इसलिए असेंबली के निर्देश आर्किटेक्चर-विशिष्ट डिजाइनों को दर्शाते हैं। मैंने x86 असेंबली के साथ शुरुआत की, और किप इर्विन की "इंटेल-आधारित कंप्यूटर के लिए असेंबली लैंग्वेज" पढ़ी। पुस्तक को वास्तव में एक सामुदायिक कॉलेज में एक ऑनलाइन कक्षा के साथ जोड़ा गया था। मुझे यकीन नहीं है कि आप किस तरह के शिक्षार्थी हैं, लेकिन मुझे लगता है कि निर्देशित निर्देश सीखने के लिए सबसे अच्छा काम करता है।
ब्रायन

@ ब्रायन: "आप उनमें से किसी भी" से क्या मतलब है? मुझे समझ में नहीं आया कि "उन्हें" क्या है - कोई किताब? कोई असेम्बलर? कोई ISA? मैं पहले ही MIPS असेंबलर के साथ खेल चुका हूं; मैं x86 पर कुछ भी नहीं मिल सकता है।
बिली ओनेल

जवाबों:


18

जब मैं कॉलेज में था तब मैंने एक पाठ्यपुस्तक के रूप में x86 प्रोसेसर के लिए असेंबली लैंग्वेज का इस्तेमाल किया और मुझे यह समझना बहुत आसान लगा। मेरे पास पुराना चौथा संस्करण है और इसकी तुलना छठे संस्करण से की गई है और इसमें बहुत अधिक बदलाव देखने को नहीं मिले हैं, इसलिए आप शायद एक पुरानी प्रति सस्ते में ले सकते हैं। लोग I / O के लिए अपने स्वयं के पुस्तकालय के उपयोग के बारे में शिकायत करते हैं, लेकिन वह आपको बताता है कि बाद के अध्यायों में इसे "कठिन" तरीके से कैसे किया जाए।


1
बहुत अच्छी किताब!
कोडर

मैंने इरविन की पुस्तक के 5 वें संस्करण को पढ़ा जब इसे "असेंबली लैंग्वेज फॉर इंटेल-बेस्ड कंप्यूटर्स" शीर्षक दिया गया था। :)
ब्रायन

1
मुझे लगता है कि यह एक बहुत बुरा सुझाव है, क्योंकि दूसरे संस्करण के अधिकांश लेखक स्वयं गूढ़ प्रणाली उच्च स्तरीय विधानसभा के लिए विशिष्ट हैं जो अनिवार्य रूप से सी का एक संक्षिप्त संस्करण है। मैंने पहले प्रकाशित संस्करण को कभी नहीं पढ़ा है। डॉस संस्करण जिसे आप मुफ्त में उसकी साइट पर पा सकते हैं और कभी प्रकाशित नहीं किया गया है, हालांकि यह एक महान पढ़ा है। यह भी लगभग 50% लंबा है और एचएलए (जो समय की कुल बर्बादी है) के बारे में कुछ भी नहीं है ।
इवान कैरोल

1
@EvanCarroll मैं भ्रमित हूं। आपने गलत पुस्तक के लिंक को बदल दिया, फिर उस पुस्तक की आलोचना की, जिसके लिंक को आपने बदल दिया है। क्या वह अनजाना था?
मर्लिन मॉर्गन-ग्राहम

1
पूरी तरह से मेरी गलती। @ इसे पकड़ने और दोनों को सही करने के लिए मेरलिनमर्ग-ग्राहम आप पर अच्छा है।
इवान कैरोल

18

जाने के लिए स्पष्ट स्थान इंटेल की वेबसाइट है, जहां आप डाउनलोड करने के लिए प्रोग्रामिंग और संदर्भ मैनुअल पा सकते हैं जिसमें x86 वास्तुकला के बारे में जानने के लिए सब कुछ है।

यहाँ: Intel® 64 और IA-32 आर्किटेक्चर सॉफ्टवेयर डेवलपर मैनुअल


9

असेंबली प्रोग्रामिंग की कला एक उत्कृष्ट संसाधन है जिसमें x86 प्रोग्रामिंग के बारे में बहुत कुछ है।

x64 एबीआई प्रलेखन भी उपयोगी है। मैं उस संस्करण का लिंक खोजने की कोशिश कर रहा था जो AMDs वेबसाइट पर था, लेकिन मैं इसे अब और नहीं ढूंढ सकता, इसलिए मुझे लगता है कि यह करना होगा।

ऐसा कुछ जो सीखने के दौरान काफी [थोड़ा सा] मदद कर सकता है, इसके बजाय विधानसभा में खरोंच से एक पूर्ण एप्लिकेशन लिखने की कोशिश कर रहा है, इसके बजाय इसे सी (या किसी अन्य संकलित भाषा वास्तव में) में लिखें और फिर विधानसभा कोड का एक हिस्सा कॉल करें उस। एक बार जब आप ऐसा कर लेते हैं, तो इसे उल्टा कर देते हैं, एक असेंबली प्रोग्राम लिखते हैं, और उसमें से कुछ C फंक्शन्स को कॉल करते हैं।

संपादित करें: एक टाइपो फिक्स्ड।


1
एक और सुझाव: सी में एक सरल कार्यक्रम लिखें, इसे विधानसभा के लिए संकलित करें, इसे साफ करें ताकि आपके कोडांतरक इसे इकट्ठा कर सकें, फिर विधानसभा संस्करण बढ़ाएं। यह कुछ न्यूनतम कार्यक्षमता प्राप्त करने का एक अच्छा तरीका है (कीबोर्ड से पढ़ें, कंसोल पर लिखें) जल्दी जा रहा है।
TMN

4

X86 असेंबली सीखने के लिए एक बहुत अच्छी किताब पेंटियम प्रोसेसर ऑप्टिमाइज़ेशन टूल्स है । जबकि पुस्तक का मुख्य फोकस असेंबली कोड का अनुकूलन है, यह पेंटियम असेंबली को रास्ते में सिखाता है, और एक अच्छी संदर्भ पुस्तक भी है।

यह लंबे समय तक प्रिंट आउट है, लेकिन इसका उपयोग करना मुश्किल नहीं है।

यह एक फ्लॉपी डिस्क के साथ आता है जिसमें "असेंबली कोड ऑप्टिमाइज़र" होता है। यह वास्तव में आपके कोड का अनुकूलन नहीं करता है, बल्कि एक टिप्पणी सूची बनाता है जो इंगित करता है कि पाइपलाइन की स्टालों जैसे अक्षमताएं कहां हैं।

पुस्तक के साथ आने वाला उपकरण एक अधिक विशिष्ट उत्पाद का एक सीमित संस्करण है जिसे लेखक की कंपनी बेचने के लिए इस्तेमाल करती थी, लेकिन उन कारणों से जिनसे मैं अपरिचित हूं, वे लंबे समय से व्यवसाय से बाहर हैं। मुझे पता नहीं क्यों - मुझे लगता है कि इस तरह के उपकरण हॉटकेस की तरह बिकेंगे।

सामान्य रूप से x86 एक बहुत ही जटिल विषय है क्योंकि कई वेरिएंट हैं जो माइक्रोप्रोसेसर के विभिन्न मॉडलों द्वारा समर्थित हैं। एक बार जब आप मूल बातें जान लेते हैं, तो आप जिस इंटेल या एएमडी के डेटाबूक को लक्षित करने वाले सटीक चिप के लिए परामर्श करना चाहेंगे। दुर्भाग्य से सीपीयू के एक मॉडल पर तेजी से चलने वाला कोड अलग चिप पर उतना तेज नहीं हो सकता है।


वास्तव में प्रदर्शन के लिए नहीं जा रहा है; बस बायनेरिज़ उत्पन्न करने में सक्षम होना चाहते हैं। अभी भी देख लेंगे :)
बिली ओनली

2
आपको विधानसभा असेंबली ही नहीं, किसी विशेष कोडांतरक का उपयोग करना भी सीखना होगा। प्रत्येक कोडांतरक चीजों को पूरी तरह से अलग करता है। यदि आप बहुत सारे असेंबली कोड लिखने जा रहे हैं, तो masm का उपयोग करें क्योंकि यह मानव कोडर को ध्यान में रखते हुए विकसित किया गया था। यदि आप इनलाइन असेंबली के छोटे स्निपेट लिखने जा रहे हैं, तो आप GNU के साथ gcc (गैस भी कह सकते हैं) इनलाइन असेंबली का उपयोग कर सकते हैं। GNU 'वाक्यविन्यास' masm के पूरी तरह से अलग है। जैसा कि मुख्य रूप से gcc के लिए बैक एंड के रूप में उपयोग करने के लिए, निष्पादन योग्य कोड जनरेशन करने के लिए लिखा गया था, और इसलिए कई ऐसे फीचर्स प्रदान नहीं किए गए जो मानव कोडर चाहते हैं।
माइक क्रॉफर्ड

1

Wikibook की कोशिश क्यों नहीं की - http://en.wikibooks.org/wiki/X86_Assembly । यह विधानसभा भाषा के लिए एक अच्छी परिचयात्मक शुरुआत देता है।

असेंबली के बारे में कठिन सा एहसास है कि यह कितना सरल है, और आपको उस सादगी के साथ रहने की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.