2009-11-03 7 views
13

मैं 16 बिट वास्तविक मोड के लिए कुछ उदाहरण असेंबली कोड के माध्यम से जा रहा हूं।16 बिट असेंबली कोड में ऑफसेट क्या है?

mov bx, cs 
    mov ds, bx 
    mov si, OFFSET value1 
    pop es 
    mov  di, OFFSET value2 

यह कर क्या है:

मैं लाइनों का सामना करना पड़ा? वहां 'ऑफसेट' क्या है?

क्षमा करें अगर यह एक बहुत ही बुनियादी सवाल है, तो मैं इस पर नया हूं।

उत्तर

15

जैसा कि कुछ अन्य उत्तरों कहते हैं, offset कीवर्ड उस सेगमेंट से ऑफसेट को संदर्भित करता है जिसमें इसे परिभाषित किया गया है। नोट, हालांकि, सेगमेंट ओवरलैप हो सकते हैं और एक सेगमेंट में ऑफ़सेट दूसरे सेगमेंट में भिन्न हो सकता है।

mov ax, 2000h 
mov ds, ax 

mov bx, offset foo ; bx = 0100h 
mov byte ptr [bx], 10 ; foo = 10 

mov ax, 3000h 
mov ds, ax 

mov bx, offset foo; bx = 0100h 
mov byte ptr [bx], 10 ; bar = 10 

कोडांतरक देखता foo पर data SEGMENT के आधार से 0100h ऑफसेट है कि, इसलिए जहाँ भी: उदाहरण के लिए, आप वास्तविक मोड में निम्न खंड

data SEGMENT USE16 ;# at 02000h 

    org 0100h 
    foo db 0 

    org 01100h 
    bar db 0 

data ENDS 

है और निम्नलिखित कोड को देखने लगता है यह offset foo देखता है, उस समय DS के मान के बावजूद यह मूल्य 0100h डाल देगा।

दूसरे उदाहरण DS में 0300h है, इसलिए खंड के आधार पर DS03000h है द्वारा इशारा किया। इसका मतलब है कि ds:[offset foo] पते 03000h + 0100h पर जो 02000h + 01100h के समान है, जो bar पर इंगित करता है।

संपादित करें: कोड

6

इसका मतलब सिर्फ उस प्रतीक का पता है। यदि आप उससे परिचित हैं, तो यह सी में & ऑपरेटर की तरह थोड़ा सा है।

1

x86 16 बिट मोड में, पता स्थान फ्लैट नहीं है; इसके बजाय, पते ऑफसेट और "सेगमेंट" से बने होते हैं। "सेगमेंट" एक 64 के स्पेस को इंगित करता है, ऑफ़सेट उस स्थान के भीतर है।

http://en.wikipedia.org/wiki/Memory_segmentation

3

offset मतलब यह है कि si रजिस्टर करने के लिए चर मान 1 (अपने वास्तविक मूल्य के लिए नहीं) की भरपाई बराबर होगा देखें। ऑफसेट स्मृति खंड की शुरुआत से पता है जहां चर संग्रहित किया जाता है। ऑफसेट आमतौर पर ds सेगमेंट के सापेक्ष होता है (आपके मामले में ds और cs रजिस्ट्रार एक ही सेगमेंट पर इंगित कर रहे हैं)।

1

ऑफसेट में सही तार्किक त्रुटि मूल रूप से खंड बिंदु (गृहीत बिंदु भी कहा जाता है) से दूरी है। उदाहरण के लिए सेगमेंट पता 0000 है और ऑफ़सेट या लॉजिकल एड्रेस 0100 है तो भौतिक पता दो जोड़े जोड़कर गिना जा सकता है। भौतिक पता = 0000 + 0100 = 0100 मतलब यह है कि हमारे लिए आवश्यक स्थान 0100. खंड पता 1DDD है इसी प्रकार यदि का पता पर है और ऑफसेट 0100 तो है: स्थायी पता है: 1DDD + 0100 = 1EDD

साधन कि हमारा गंतव्य 1EDD है।

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