2012-03-22 3 views
6

मैं अगले कोड देखा था?असेंबली - श्रम ध्वज पर निर्देश निर्देश बारी?</p> <pre><code>shr AL, 1 jnc bit_0 </code></pre> <p>जब कैरी झंडा SHR instrucrion की वजह से पर बारी है मुझे समझ नहीं आता:

धन्यवाद

+1

यह परीक्षण कर रहा है कि AL भी अजीब है या नहीं। – harold

उत्तर

0

यह नहीं है; scr (वाह के साथ शिफ्ट) करता है। हालांकि, परीक्षण का मतलब यह हो सकता है कि (और करता है) परीक्षण किया गया था कि सैर को निष्पादित करने से पहले कैरेट बिट सेट किया गया था।

+1

क्या आप निश्चित हैं? मेरी पुस्तक अगले उदाहरण देता है: शिफ्ट से पहले: AL = 10101110 ; shr AL, 1 ; शिफ्ट के बाद: 01011100, सीएफ = 1 ; क्या यह गलती है? –

+1

स्रोत: http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate इसके अलावा, अगर ऐसा होता है, तो स्क्रू होने का क्या मतलब होगा? –

+3

कोई 'scr' नहीं है। लेडी बिट में 'shr' और' shl' shift। स्रोत: http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-2b-manual.pdf – ughoavgfhw

9

shr AL, 1AL में सभी बिट्स को एक ही स्थान पर ले जाता है।

मूल दाएं बिट को AL से ले जाने के लिए ले जाया गया है (और नया बाएंतम बिट 0 पर सेट है)। उदाहरण के लिए:

+------------------------+    +------------------------+ 
| 1 0 0 1 0 1 0 1 |    | 0 1 1 0 0 1 0 0 | 
+------------------------+    +------------------------+ 
    \ \ \ \ \ \ \ \  or   \ \ \ \ \ \ \ \ 
    \ \ \ \ \ \ \ \     \ \ \ \ \ \ \ \ 
+------------------------+ CF   +------------------------+ CF 
|(0) 1 0 0 1 0 1 0 | 1    |(0) 0 1 1 0 0 1 0 | 0 
+------------------------+    +------------------------+ 

एक और जवाब पर अपनी टिप्पणी में:

मेरी किताब अगले उदाहरण देता है: बदलाव से पहले: अल = 10,101,110; एसएल एएल, 1; शिफ्ट के बाद: 01011100, सीएफ = 1; क्या यह गलती है?

यदि यह वही है, तो हाँ। यह एक बायीं शिफ्ट है (shl AL, 1), सही बदलाव नहीं: AL में बिट्स को एक ही स्थान से छोड़ दिया गया है, और ले जाने वाला ध्वज बाईं ओर सेट किया गया है जो बाएं हाथ के अंत में स्थानांतरित हो गया था।

0

कुछ स्पष्टीकरण जोड़ने के लिए:

SHR एएल, 1; यह (एसएच) ift (आर) ight (1) x एएल रजिस्टर में निहित मूल्य होगा, जो एक्स रजिस्टर के 8 निचले बाइट्स है। इसलिए यह एएल में निहित मूल्य 2 से विभाजित होगा।

यदि AL पहले 0b100 (4) की तरह भी था तो यह 0b10 (2) बन जाएगा और लेयर ध्वज में 0 डाल देगा। फ्लैग रजिस्टर https://en.wikipedia.org/wiki/FLAGS_register

यदि एएल पहले 0 बी 101 (5) जैसा अजीब मूल्य था तो यह 0 बी 10 (2) बन जाएगा और फ्लैग रजिस्टर में 1 डाल देगा। इसलिए यदि आप 2 से विभाजित होते हैं तो कैरी ध्वज शेष की तरह कार्य करेगा।

jnc bit_0; अगर (एन) ओ (सी) arry ध्वज सेट किया गया था, तो यह (जे) ump होगा (यानी) अगर शिफ्ट से पहले मूल्य (उदाहरण के ऊपर 0b100 जैसा) था।

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