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