2009-11-03 76 views

回答

15

正如其他一些答案所說,offset關鍵字指的是它所在的段的偏移量。但是,請注意,分段可能會重疊,並且一個分段中的偏移可能在另一個分段中不同。舉例來說,假設您在實模式下段

data SEGMENT USE16 ;# at 02000h 

    org 0100h 
    foo db 0 

    org 01100h 
    bar db 0 

data ENDS 

再看看下面的代碼:

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,所以無論它看到offset foo它會將值0100h,而不管當時的值爲DS

在第二個例子中,DS0300h,所以DS指向的段的基址是03000h。這意味着ds:[offset foo]指向地址03000h + 0100h,它與02000h + 01100h相同,它指向bar

編輯:在代碼

6

它只是表示該符號的地址。這有點像C中的&運算符,如果你對此熟悉的話。

3

offset意味着si寄存器將是等於偏移可變VALUE1(不是其實際值)的。偏移量是存儲變量的內存段開頭的地址。偏移量通常是相對於ds段(在您的情況下,dscs寄存器指向相同的段)。

1

偏移校正邏輯錯誤基本上是從段點(也稱爲基準點)的距離。例如 段地址是0000並且偏移量或邏輯地址是0100,則物理地址可以通過添加兩對來計數。 物理地址= 0000 + 0100 = 0100 意味着我們的居民點是對0100 同樣,如果段地址是1DDD地址和偏移量爲0100,則: 物理地址是:1DDD + 0100 = 1EDD

手段我們的目的地是1EDD。