다른 답변에 따르면 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
을 가리 킵니다.
편집 : 오프셋 코드