我目前正在通過Kip R. Irvine的x86處理器彙編語言第6版。這很令人愉快,但有些事情讓我感到困惑。在x86程序集的數組中使用OFFSET運算符?
早在書中,下面的代碼所示:
list BYTE 10,20,30,40
ListSize = ($ - list)
這對我有意義。在聲明一個數組之後,用數組的起始位置減去內存中的當前位置以獲取數組使用的字節數。
然而,這本書後來做:
.data
arrayB BYTE 10h,20h,30h
.code
mov esi, OFFSET arrayB
mov al,[esi]
inc esi
mov al,[esi]
inc esi
mov al,[esi]
據我瞭解,OFFSET
相對於程序的段返回變量的位置。該地址存儲在esi
寄存器中。立即用於訪問esi
中表示的地址處存儲的值。遞增將地址移動到下一個byte
。
那麼在數組上使用OFFSET
和簡單地調用數組變量有什麼區別?之前我曾經相信,簡單地調用數組變量也會給我它的地址。
根據您的彙編程序的語法,使用數組名稱會從內存中加載的第一要素,沒有地址。 – Jester 2015-04-03 18:19:58