汇编语言OFFSET运算符:返回数据标号的偏移量
OFFSET 運算符返回數據標號的偏移量。這個偏移量按字節計算,表示的是該數據標號距離數據段起始地址的距離。如下圖所示為數據段內名為 myByte 的變量。
OFFSET 示例
在下面的例子中,將用到如下三種類型的變量:
.data bVal BYTE ? wVal WORD ? dVal DWORD ? dVal2 DWORD ?假設 bVal 在偏移量為 0040 4000(十六進制)的位置,則 OFFSET 運算符返回值如下:
mov esi,OFFSET bVal ; ESI = 00404000h mov esi,OFFSET wVal ; ESI = 00404001h mov esi,OFFSET dVal ; ESI = 00404003h mov esi,OFFSET dVal2 ; ESI = 00404007hOFFSET 也可以應用于直接 – 偏移量操作數。設 myArray 包含 5 個 16 位的字。下面的 MOV 指令首先得到 myArray 的偏移量,然后加 4,再將形成的結果地址直接傳送給 ESI。因此,現在可以說 ESI 指向數組中的第 3 個整數。
.data myArray WORD 1,2,3,4,5 .code mov esi,OFFSET myArray + 4還可以用一個變量的偏移量來初始化另一個雙字變量,從而有效地創建一個指針。如下例所示,pArray 就指向 bigArray 的起始地址:
.data bigArray DWORD 500 DUP (?) pArray DWORD bigArray下面的指令把該指針的值加載到 ESI 中,因此,這個 ESI 寄存器就可以指向數組的起始地址:
mov esi,pArray4.1?操作數類型
4.2?MOV指令
4.3?MOVZX和MOVSX指令
4.4?LAHF和SAHF指令
4.5?XCHG指令
4.6?直接偏移量操作數
4.7?匯編語言數據傳送示例
4.8?加法和減法詳解
4.9?OFFSET運算符
4.10?ALIGN偽指令
4.11?PTR運算符
4.12?TYPE運算符
4.13?LENGTHOF運算符
4.14?LABEL偽指令
4.15?間接尋址
4.16?JMP和LOOP指令
4.17?64位MOV指令
4.18?64位加法和減法
總結
以上是生活随笔為你收集整理的汇编语言OFFSET运算符:返回数据标号的偏移量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse安装STS插件并解决安装缓
- 下一篇: 汇编语言LENGTHOF运算符:计算数组