मैं खुद को एक असेंबलर लिखने के लिए x86 और x86_64 सीख रहा हूं। यदि आप खुद को एक असेंबलर नहीं लिखेंगे तो मैं जो कुछ बताऊंगा वह काफी बेकार है। मुझे हालांकि एमआईपीएस के बारे में पता नहीं है।
x86 अप्रत्यक्ष पता एक जटिल बात है। एक एकल अनुदेश में, आप इन कर सकते हैं:
mov reg, [reg+offset]
mov reg, [reg*scale+base register+offset] # in where scale can be 1, 2, 4 or 8.
उनके अनुदेश एन्कोडिंग इस वजह से जटिल है, लेकिन यह हर अनुदेश कि इस तरह से encodes के लिए संगत है। आप इसे sandpile.org से पढ़ना चाहते हैं। यदि आप एन्कोडिंग के बारे में अधिक जानना चाहते हैं, तो आप हमेशा मुझसे इसके बारे में पूछ सकते हैं। एक और निर्देश एन्कोडिंग से संबंधित परेशान विवरण उपसर्ग हैं। वे निर्देश का अर्थ बदलते हैं। उदाहरण के लिए, 0x66 (अगर मुझे सही याद है) और कुछ निर्देश 32 बिट के बजाय 16 बिट जीपीआर के लिए बन जाते हैं।
32 बिट GPRS (क्रम में): eax, ECX, EDX, EBX, esp, ईबीपी, ईएसआई, ईडीआई
64 बिट GPRS: RAX, RCX, RDX, Rbx, आरएसपी, RBP, RSI, RDI, r8 , आर 9, आर 10, आर 11, आर 12, आर 13, आर 14, आर 15
ध्यान दें कि वहां कितने सामान्य प्रयोजन पंजीकृत हैं, इससे अधिकांश सॉफ्टवेयर इसे स्टैक-मशीन मैननेड तरीके से कम या ज्यादा उपयोग करने के लिए मजबूर करेंगे। एक दर्दनाक विस्तार। आरएसपी का उपयोग स्टैक (पॉप, पुश-इंस्ट्रक्शन) के लिए किया जाता है, और आरबीपी भी आरक्षित होता है। x86_64 में अधिक रजिस्ट्रार हैं, लेकिन इसमें समय लगेगा जब लोग इसे अपनाएंगे, भले ही प्रत्येक उपभोक्ता के पास प्रोसेसर सक्षम हो।
फ़्लोटिंग पॉइंट अंकगणित के लिए दो अलग-अलग निर्देश सेट हैं। एक्सएमएम नया है। X86_64 में 16 128 बिट रजिस्ट्रार उपलब्ध हैं और x86 में उनमें से केवल 8 हैं। पुराना निर्देश सेट एक स्टैक के रूप में रजिस्टरों को संभालता है। आपके पास स्वैप, निप या सड़ांध नहीं है, इसलिए इसके साथ काम करना दिमागी झुकाव है।
उपयोग में x86 एक आरआईएससी मशीन में कम करने के लिए जाता है। उनमें से कुछ जटिल निर्देश लाभ नहीं देते हैं या नई मशीनों पर भी धीमे होते हैं। आप जो पढ़ रहे हैं या लिख रहे हैं उसके आधार पर आप 30-150 निर्देशों के बारे में समझने के साथ करेंगे। आप कुछ पुराने निर्देशों और AL/HL -stuff को पूरी तरह अनदेखा भी कर सकते हैं। 1 9 78 के पीछे इस अव्यवस्था की उत्पत्ति को ध्यान में रखें, जो आश्चर्यजनक है कि यह बदतर नहीं है, उससे 31 साल और आईए -32 के पहले परिचय से 24 साल। उस समय बहुत सी चीजें अपनी प्रासंगिकता बदलती हैं।
प्रत्यक्ष कूद और कॉल x86 में अगले निर्देश से संबंधित प्रतीत होते हैं। इसलिए:
jmp nowhere # or call, jz, jg whatever...
nowhere:
nop
'जेएमपी इम: 0, एनओपी' को एन्कोड किया गया। रजिस्टर-अप्रत्यक्ष जेएमपी जो पूर्ण कूदता है। यह भी ध्यान रखना अच्छा होता है कि पंजीकरण-अप्रत्यक्ष सशर्त कूद नहीं हैं, इससे मुझे भी परेशान किया गया।
यहां सबकुछ संभव नहीं है जो आपको पता होना चाहिए, लेकिन पहले प्रश्न जो आपके दिमाग में आपके प्रश्न से आता है। लेकिन शायद आप इनके साथ अब मिल सकते हैं।
आप सीडी [यहां] (https://secure.hibbertgroup.com/intel/spm?programId=1) ऑर्डर कर सकते हैं। दुर्भाग्यवश हार्ड कॉपी की पेशकश नहीं की जा रही है। – new123456
x86 निर्देश सेट पुरातत्व द्वारा सबसे अच्छी तरह से समझा जाता है, मुझे लगता है - अगर आपने देखा है कि 8080 में क्या है, तो यह 8088 के डिजाइन को अस्पष्ट रूप से कैसे सूचित करता है, और आखिरकार 386 चीजों को शीर्ष पर कैसे जोड़ा जाता है, यह सब समझ में आता है। अन्यथा नियम थोड़ा मनमाना लगते हैं। – ijw