जैसा कि कुछ अन्य उत्तरों कहते हैं, 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
है, इसलिए खंड के आधार पर DS
03000h
है द्वारा इशारा किया। इसका मतलब है कि ds:[offset foo]
पते 03000h + 0100h
पर जो 02000h + 01100h
के समान है, जो bar
पर इंगित करता है।
संपादित करें: कोड
स्रोत
2009-11-03 20:02:43