2011-10-22 10 views
17

मैंने नेट पर खोज की है, लेकिन मुझे यह समझने के लिए एक स्पष्ट उदाहरण नहीं मिला कि यह निर्देश क्या करता है। इसलिए, अगर कोई इस बारे में एक उदाहरण दे सकता है, तो यह मेरे लिए बहुत उपयोगी होगा।movsbl निर्देश क्या करता है?

+3

वहां केवल एक असेंबली निर्देश सेट किया गया है ... आप किसके साथ काम कर रहे हैं? 86? MIPS? पीपीसी? एआरएम? आदि ... आदि ... आदि ..? –

+0

मुझे लगता है कि यह ia32 है। – sarslanhan

+1

और MOVZBL से शून्य तक विस्तार: http://stackoverflow.com/questions/9317922/what-does-the-movzbl-instruction-do-in-ia-32-att-syntax?lq=1 –

उत्तर

28

बाइट से लांगवर्ड तक विस्तार के साथ ले जाएं। इंटेल सिंटैक्स में, इस निर्देश का निमोनिक MOVSX है।

ए सी कंपाइलर इस निर्देश का उपयोग कर सकता है जब int8_t के एक चर को int में परिवर्तित करने की आवश्यकता है, जो अंकगणित और कुछ अन्य परिचालनों (पूर्णांक पदोन्नति) पर स्वचालित रूप से होता है।

क्योंकि यह निर्देश गंतव्य रजिस्टर के सभी 32 (या 64) बिट्स को लिखता है, यह प्रदर्शन दंड से बचाता है जो लेखन के परिणामस्वरूप केवल निम्न 8 (या 16) बिट्स के रजिस्टर के परिणामस्वरूप हो सकता है। निर्देशों का एक समान सेट शून्य बिट्स (इंटेल सिंटैक्स में MOVZX, AT & टी वाक्यविन्यास (आकार से आकार टी तक) में MOVZX के साथ विस्तार करने की अनुमति देता है।

1

मान लीजिए कि यह एटी & आईए 32 (i386/x86_64) के लिए टी असेंबली सिंटैक्स का अर्थ है बाइट से लांग तक साइन-एक्सटेंशन के साथ एमओवी। यह MOVSX r32, r/m8 के बराबर है 3-730 Vol. 2A देखें।

14

movsbl के लिए शीर्ष वेब हिट this page है, और यदि आप movsbl के लिए खोज यह कहता है

MOVSBL and MOVZBL 
* MOVSBL sign-extends a single byte, and copies it into a 
    double-word destination 
* MOVZBL expands a single byte to 32 bits with 24 leading 
    zeros, and copies it into a double-word destination 

Example: 
%eax = 0x12345678 
%edx = 0xAAAABBBB 
MOVB %dh, %al   %eax = 0x123456BB 
MOVSBL %dh, %eax  %eax = 0xFFFFFFBB 
MOVZBL %dh, %eax  %eax = 0x000000BB 

मेरे लिए एक बहुत स्पष्ट उदाहरण की तरह लग रहा। अधिक उदाहरणों के लिए, अगले पृष्ठ को पढ़ें।

3

मान लीजिए कि आप x86 के बारे में बात कर रहे हैं, MOVSBL निर्देश का प्रतिनिधित्व करते हुए एक बाइट (8 बिट्स) का विस्तार करता है संख्या 32-बिट हस्ताक्षरित संख्या पर हस्ताक्षर करता है। शेष 24 बिट्स संकेत के आधार पर शून्य या एक हैं ताकि दोनों का पूरक मूल्य बना रहता है।

मतलब, यदि आपके पास ऋणात्मक संख्या है, तो ऊपरी 24 बिट्स 1 एस होंगे, अन्यथा वे शून्य होंगे।

हस्ताक्षरित संख्याओं के बराबर MOVZBL है, जो हमेशा 0 के साथ विस्तारित होता है।

संबंधित मुद्दे