कुछ निर्देश सेट प्रति निर्देश एक बिट शिफ्ट तक ही सीमित हैं।और कुछ निर्देश सेट आपको एक निर्देश में स्थानांतरित करने के लिए किसी भी बिट्स को निर्दिष्ट करने की अनुमति देते हैं, जो आमतौर पर आधुनिक प्रोसेसर पर एक घड़ी चक्र लेता है (आधुनिक जानबूझकर अस्पष्ट शब्द)। एक बैरल शिफ्टर के बारे में dan04's answer देखें, एक सर्किट जो एक ऑपरेशन में एक से अधिक बिट को स्थानांतरित करता है।
यह सब लॉजिक एल्गोरिदम पर उबाल जाता है। परिणाम में प्रत्येक बिट इनपुट के आधार पर एक तर्क कार्य है। एक भी सही बदलाव के लिए, एल्गोरिथ्म की तरह कुछ होगा: शिक्षा [सही पारी] और इनपुट के बिट 1 1 है तो
- , तो थोड़ा परिणाम की 0 से 1 है, और बिट 0 0 है ।
- अनुदेश है [पाली सही], तो थोड़ा 1 = बिट 2.
- आदि
लेकिन तर्क समीकरण बस के रूप में आसानी से हो सकता है:
- यदि निर्देश [शिफ्ट सही है] और राशि ऑपरेंड 1 है, तो परिणाम बिट 0 = इनपुट इनपुट बिट 1
- यदि राशि 2 है तो बिट 0 = बिट 2.
- और इसी तरह।
लॉजिक गेट्स, असीमित होने के कारण, यह सब एक घड़ी चक्र में कर सकते हैं। फिर भी यह सच है कि एक ही शिफ्ट एक तेज घड़ी चक्र और कम द्वारों को व्यवस्थित करने की अनुमति देता है, यदि आप तुलना कर रहे हैं तो यह निर्देश के दो स्वाद हैं। या विकल्प इसे व्यवस्थित करने में अधिक समय ले रहा है, इसलिए निर्देश 2 या 3 घड़ियों या जो कुछ भी लेता है, और तर्क 3 की गणना करता है तो परिणाम को latches।
उदाहरण के लिए, एमएसपी 430, केवल थोड़ी सी घुमावदार सही निर्देशों को घुमाता है (क्योंकि आप एक ही बिट शिफ्ट या एक अन्य निर्देश के साथ एक घुमावदार बाएं कर सकते हैं, जिसे मैं समझने के लिए पाठक को छोड़ दूंगा)।
एआरएम निर्देश सेट तत्काल और पंजीकरण आधारित बहु-बिट घुमावदार, अंकगणितीय बदलाव और तार्किक बदलाव दोनों की अनुमति देता है। मुझे लगता है कि केवल एक वास्तविक घुमावदार निर्देश है और दूसरा एक उपनाम है, क्योंकि बाएं 1 घुमाएं एक घुमावदार दाएं 32 के समान है, आपको केवल एक दिशा बैरल शिफ्ट की आवश्यकता होती है ताकि एक बहु बिट घुमाने के लिए।
x86 में एसएचएल प्रति निर्देश एक से अधिक बिट की अनुमति देता है, लेकिन यह एक से अधिक घड़ी लेता था।
और इसी तरह, आप आसानी से वहां से किसी भी निर्देश सेट की जांच कर सकते हैं।
आपके प्रश्न का उत्तर यह है कि यह तय नहीं है। कभी-कभी यह एक ऑपरेशन, एक चक्र, एक निर्देश है। कभी-कभी यह एक निर्देश एकाधिक घड़ी चक्र है। कभी-कभी यह कई निर्देश हैं, एकाधिक घड़ी चक्र।
कंपाइलर अक्सर इस तरह के चीजों के लिए अनुकूलित करते हैं। मान लें कि आपके पास एक स्वैप बाइट निर्देश और तुरंत और एक निर्देश के साथ 16 बिट रजिस्टर निर्देश सेट है, लेकिन केवल एक ही बिट शिफ्ट है। आपको लगता है कि 8 बिट्स को स्थानांतरित करने के लिए 8 शिफ्ट निर्देश चक्रों की आवश्यकता होगी, लेकिन आप केवल बाइट्स (एक निर्देश) को स्वैप कर सकते हैं और फिर निचले आधे से ज़ीरो (जो दो निर्देश ले सकते हैं, या दो शब्दों का परिवर्तनीय शब्द लंबाई निर्देश हो सकता है, या यह एक ही निर्देश में एन्कोड हो सकता है) इसलिए इसमें केवल 8 या 3 निर्देश/घड़ी चक्र 8 की बजाय लेते हैं। 9 बिट्स की शिफ्ट के लिए, आप एक ही काम कर सकते हैं और एक शिफ्ट जोड़ सकते हैं, जिससे 9 घड़ियों बनाम 3 या 4 बनाते हैं इसके अलावा, कुछ आर्किटेक्चर पर, 256 से गुणा करने के लिए तेज़ी से 8, आदि इत्यादि की तुलना में गुणा करना तेज होता है। प्रत्येक निर्देश सेट की अपनी सीमाएं और चाल होती है।
यह भी मामला नहीं है कि या तो अधिकांश निर्देश सेट एकल बिट या एकाधिक बिट को अधिकतम सीमा प्रदान करते हैं। X86, ARM, PowerPC, और MIPS जैसे "कंप्यूटर" श्रेणी में आने वाले प्रोसेसर, एक ऑपरेशन को स्थानांतरित करने के लिए दुबला हो जाएंगे। सभी प्रोसेसर का विस्तार करें, लेकिन आमतौर पर "कंप्यूटर" का उपयोग नहीं किया जाता है, और यह दूसरी तरफ बदल जाता है, मैं कहूंगा कि उनमें से अधिकतर मल्टी बिट की तुलना में सिंगल बिट हैं, इसलिए बहु-बिट शिफ्ट करने के लिए कई संचालन की आवश्यकता होती है।
क्या उन्हें बाएं 31 को स्थानांतरित करने के लिए और अधिक संचालन की आवश्यकता है? – Flexo
मेरा सीपीयू ज्ञान बहुत पुराना है, लेकिन प्रत्येक शिफ्ट निर्देश मैंने एक बिट से बदलाव देखा है, इसलिए आपको एक से अधिक बार स्थानांतरित करने के लिए एक लूप चलाने की आवश्यकता है। मुझे लगता है कि यह संभव है कि आधुनिक सीपीयू के शिफ्ट निर्देश हैं जो एक घड़ी चक्र में निर्दिष्ट संख्या में बिट्स द्वारा स्थानांतरित होते हैं। –
मेरी मशीन 'इंट टेस्ट (int i) पर { वापसी मैं << 30; } 'एसए $ 30,% eax' – Flexo