2025年4月7日 星期一 乙巳(蛇)年 正月初八 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 汇编

汇编语言OFFSET运算符:返回数据标号的偏移量

时间:03-05来源:作者:点击数:81

OFFSET 运算符返回数据标号的偏移量。这个偏移量按字节计算,表示的是该数据标号距离数据段起始地址的距离。如下图所示为数据段内名为 myByte 的变量。

名为myBye的变量

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 = 00404007h

OFFSET 也可以应用于直接 - 偏移量操作数。设 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,pArray
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门