一、相同点

1、addr 和 offset 操作符都是获得操作数的偏移地址;
2、addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是全局变量则把其地址放到目标文件中。

二、不同点

1、addr    伪操作符,只能用在 invoke 伪指令语句中;
2、offset 伪操作符可以用在任何可能涉及偏移地址的指令(当然包括 invoke 伪指令)并想获取操作数偏移地址的场合中;
3、addr 不能处理向前引用(即 addr 引用的操作数必须在使用 addr 前就得定义或声明),而offset 则能(不管引用的操作数是
其前或其后定义或声明);

所谓向前引用是指:标号的定义是在invoke    语句之后,比如在如下的例子: 
invoke    MessageBox,NULL,    addr    MsgBoxText,addr    MsgBoxCaption,MB_OK    //引用MsgBoxText、MsgBoxCaption 在先

......

MsgBoxCaption    db    "Iczelion    Tutorial    No.2",0    //定义或声明 MsgBoxCaption 在 addr 后
MsgBoxText    db    "Win32    Assembly    is    Great!",0    //定义或声明 MsgBoxText 在 addr 后

如果您是用    addr    而不是    offset    的话,那    MASM    就会报

4、addr 是运行阶段在堆栈中分配内存空间,offset 是编译阶段由编译器解释。因此,addr 可以处理局部变量而 offset 则不能。

5、addr 如果检查到待处理的变量是局部变量,就在执行 invoke 语句前产生如下指令序列:

lea    eax,operand
push    eax

因为 lea 指令能够在运行时决定标号的有效地址,所以有了上述指令序列,就可以保证    invoke    的正确执行了。

总结:为了避免出现错误,建议除在局部变量中引用 addr 操作符外,其它场合使用 offset。

说明:某些文章中对 addr 和 offset 所引用的对象仅用了“变量或标号”,我是用“操作数”来阐述的,本人的观点是:
变量或标号感觉上包含的概念过窄,比如结构、函数等等,因此,觉得使用操作数好像感觉准确些

addr 与 offset 区别相关推荐

  1. addr和offset指令的区别

    一.相同点 1.addr 和 offset 操作符都是获得操作数的偏移地址: 2.addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是全局变量则把其地址放到目标文件中. 二.不同 ...

  2. win32汇编中伪指令addr和offset指令的区别

    一.相同点 1.addr 和 offset 操作符都是获得操作数的偏移地址: 2.addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是全局变量则把其地址放到目标文件中. 二.不同 ...

  3. 汇编中addr和offset

    汇编中addr和offset的异同点!!! 一.相同点 1.addr 和 offset 操作符都是获得操作数的偏移地址: 2.addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是 ...

  4. jQuery中position()与offset()区别

    转载自  jQuery中position()与offset()区别 position()获取相对于它最近的具有相对位置(position:relative或position:absolute)的父级元 ...

  5. addr 与 offset 异同

    addr 与 offset 相同点: 均用于获取偏移地址 不同点: 1.offset 仅用于获取全局变量的地址:而addr既可以用于局部变量也可以用于全局变量,当用于局部变量时,addr 会转化成 l ...

  6. 汇编中addr和offset的异同点

    转自:http://hi.baidu.com/popipo/blog/item/17a3ee0865aa71a42eddd492.html 一.相同点 1.addr 和 offset 操作符都是获得操 ...

  7. jQuery方法position()与offset()区别

    参考别人写得比较明白的,红色部分为重点吧: 使用jQuery获取元素位置时,我们会使用position()或offset()方法,两个方法都返回一个包含两个属性的对象-左边距和上边距,它们两个的不同点 ...

  8. MYSQL limit,offset 区别

    首先看下表 执行下面SQL SELECT* FROM`user` WHEREsex = 1 复制代码 结果 再来看下下面的SQL SELECT* FROM`user` WHEREsex = 1 LIM ...

  9. page,client,offset区别

    offset:相对于当前"盒子"的距离 ,与滚动条无关 client:相对于可视区域的距离,与滚动条无关 page:相对于整个页面的距离,与滚动条有关 示例代码: 1 <!D ...

最新文章

  1. HarmonyOS shape 的使用
  2. 使用 8 位 YUV 格式的视频呈现
  3. 手把手教你 Vue 服务端渲染
  4. 知乎Live上线-学深度学习我们到底在学什么
  5. Android之Handler探索
  6. 【汇编语言】记录一组数中负数的个数,8086与MIPS汇编程序
  7. sql date 函数_SQL Server DATE函数–终极指南
  8. python_scrapy_爬虫
  9. Java反射----获取Class类实例的4种方式
  10. 小程序毕设作品之微信小程序点餐系统毕业设计(6)开题答辩PPT
  11. python获取cpu温度 window_使用python从windows10运行系统读取CPU温度
  12. java 打开 覆盖文件_如何用JAVA实现文件的覆盖
  13. 互联网+对酒店IPTV电视系统的影响
  14. 进入微信企业项目授权回跳之后退出项目需要点击两次(手机的返回主键,回退键)才能正常退出的问题解决
  15. RISCV学习笔记5.3--ubuntu18.04芯片设计软件(vcs、verdi)的简单使用
  16. ExpandListView 的一种巧妙写法
  17. php 字母数字下划线,CTF踩坑PHP编写一个不包含数字字母和下划线的后门
  18. 区块链让公益更透明安心 | FinTechathon 上园村小红果团队
  19. 一篇学习HTTP状态码的神文:我与依依的橙色岁月
  20. 【采用】信贷业务的25个风险点

热门文章

  1. AI:《人工智能+制造(智能制造)产业发展的现状、影响、+互联网、未来展望》演讲听课笔记
  2. DL:深度学习模型概览(包括DNN、CNN、RNN等)的简介、网络结构简介、使用场景对比之详细攻略
  3. EL之Bagging(DTR):利用DIY数据集(预留30%数据+两种树深)训练Bagging算法(DTR)
  4. DL之DNN:基于神经网络(从1层~50层)DNN算法实现对非线性数据集点进行绘制决策边界
  5. DL之VGGNet:VGGNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  6. SQLServer:GUI方式、SQL语句两种方式建立视图和GUI方式设置主键、约束等
  7. DL之GAN:生成对抗网络GAN的简介、应用、经典案例之详细攻略
  8. sshpass命令使用
  9. 自定义滚动条Js简版
  10. DHTML_____window对象方法