2011-09-08 14 views
5

यह हेडर से कोड स्निपर है। कर्नेल कोड में फ़ाइल। मैं समझ नहीं पाया कि lretw निर्देश क्या करता है। मैंने निर्देश के लिए कई ऑनलाइन स्रोतों की जांच की है।इस कोड स्निपेट को समझने में सहायता

# We will have entered with %cs = %ds+0x20, normalize %cs so 
# it is on par with the other segments. 
     pushw %ds 
     pushw $6f 
     lretw 

क्या कोई भी इस निर्देश को समझने में मेरी सहायता कर सकता है?

+0

http://disi.unitn.it/~abeni/SO2/LinuxKernel/boot.html? – istepura

उत्तर

5

ret एक प्रक्रिया से वापस आने के लिए निर्देश है। तो मूल रूप से यह स्टैक से ईआईपी रजिस्टर में वापसी का पता चलाता है।

l उपसर्ग यह कहने के लिए यहां है कि यह दूर प्रक्रिया से वापस आ गया है। इस मामले में, निर्देश पहले ईआईपी रजिस्टर में स्टैक से एक मूल्य पॉप करता है और फिर सीएस रजिस्टर में दूसरा मूल्य पॉप करता है।

w प्रत्यय यहां है क्योंकि इस चरण में हम वास्तविक मोड में चल रहे हैं, और ऑपरेंड 16 बिट चौड़े हैं।

सटीक कोड है:

pushw %ds 
    pushw $6f 
    lretw 
6: 

6: यहाँ बहुत महत्वपूर्ण है। तो यह क्या करता है: डीएस के मूल्य को ढेर में दबाएं, 6 लेबल के एड्रेस को स्टैक में दबाएं, और उसके बाद यह lretw निर्देश ट्रिगर करें। तो मूल रूप से, यह निर्देश सूचक सूचक में 6 लेबल का पता लोड करेगा, और csds रजिस्टर के मान के साथ पंजीकृत करें। तो cs रजिस्टर मूल्य के परिवर्तन के साथ लेबल 6 पर निष्पादन जारी रखने के लिए यह एक चाल है।

आपको http://www.intel.com/design/intarch/manuals/243191.htm डाउनलोड करना चाहिए जो छद्म कोड सहित सभी निर्देशों के लिए सटीक विवरण देता है जो बताता है कि प्रत्येक निर्देश क्या कर रहा है।

+0

मैंने इस मैनुअल में देखा ... लेकिन विशिष्ट निर्देश नहीं मिला। हो सकता है कि मैं बहुत स्पष्ट नहीं था .. आप स्पष्ट स्पष्टीकरण के लिए वास्तव में बहुत ही बढ़िया धन्यवाद हैं .. मुझे यह पसंद आया .. –

+0

जिस तरह से टिप्पणी का मतलब% cs को सामान्य करने के लिए कहता है ... मुझे मदद करने के लिए धन्यवाद । –

+0

यह $ 6 एफ क्यों है? $ 6f का मतलब 6 का पूर्ण मूल्य नहीं है .. और एफ प्रत्यय क्या करता है? प्रश्नों की धारा के लिए खेद है। –

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