addr 与 offset 区别
一、相同点
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 区别相关推荐
- addr和offset指令的区别
一.相同点 1.addr 和 offset 操作符都是获得操作数的偏移地址: 2.addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是全局变量则把其地址放到目标文件中. 二.不同 ...
- win32汇编中伪指令addr和offset指令的区别
一.相同点 1.addr 和 offset 操作符都是获得操作数的偏移地址: 2.addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是全局变量则把其地址放到目标文件中. 二.不同 ...
- 汇编中addr和offset
汇编中addr和offset的异同点!!! 一.相同点 1.addr 和 offset 操作符都是获得操作数的偏移地址: 2.addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是 ...
- jQuery中position()与offset()区别
转载自 jQuery中position()与offset()区别 position()获取相对于它最近的具有相对位置(position:relative或position:absolute)的父级元 ...
- addr 与 offset 异同
addr 与 offset 相同点: 均用于获取偏移地址 不同点: 1.offset 仅用于获取全局变量的地址:而addr既可以用于局部变量也可以用于全局变量,当用于局部变量时,addr 会转化成 l ...
- 汇编中addr和offset的异同点
转自:http://hi.baidu.com/popipo/blog/item/17a3ee0865aa71a42eddd492.html 一.相同点 1.addr 和 offset 操作符都是获得操 ...
- jQuery方法position()与offset()区别
参考别人写得比较明白的,红色部分为重点吧: 使用jQuery获取元素位置时,我们会使用position()或offset()方法,两个方法都返回一个包含两个属性的对象-左边距和上边距,它们两个的不同点 ...
- MYSQL limit,offset 区别
首先看下表 执行下面SQL SELECT* FROM`user` WHEREsex = 1 复制代码 结果 再来看下下面的SQL SELECT* FROM`user` WHEREsex = 1 LIM ...
- page,client,offset区别
offset:相对于当前"盒子"的距离 ,与滚动条无关 client:相对于可视区域的距离,与滚动条无关 page:相对于整个页面的距离,与滚动条有关 示例代码: 1 <!D ...
最新文章
- HarmonyOS shape 的使用
- 使用 8 位 YUV 格式的视频呈现
- 手把手教你 Vue 服务端渲染
- 知乎Live上线-学深度学习我们到底在学什么
- Android之Handler探索
- 【汇编语言】记录一组数中负数的个数,8086与MIPS汇编程序
- sql date 函数_SQL Server DATE函数–终极指南
- python_scrapy_爬虫
- Java反射----获取Class类实例的4种方式
- 小程序毕设作品之微信小程序点餐系统毕业设计(6)开题答辩PPT
- python获取cpu温度 window_使用python从windows10运行系统读取CPU温度
- java 打开 覆盖文件_如何用JAVA实现文件的覆盖
- 互联网+对酒店IPTV电视系统的影响
- 进入微信企业项目授权回跳之后退出项目需要点击两次(手机的返回主键,回退键)才能正常退出的问题解决
- RISCV学习笔记5.3--ubuntu18.04芯片设计软件(vcs、verdi)的简单使用
- ExpandListView 的一种巧妙写法
- php 字母数字下划线,CTF踩坑PHP编写一个不包含数字字母和下划线的后门
- 区块链让公益更透明安心 | FinTechathon 上园村小红果团队
- 一篇学习HTTP状态码的神文:我与依依的橙色岁月
- 【采用】信贷业务的25个风险点
热门文章
- AI:《人工智能+制造(智能制造)产业发展的现状、影响、+互联网、未来展望》演讲听课笔记
- DL:深度学习模型概览(包括DNN、CNN、RNN等)的简介、网络结构简介、使用场景对比之详细攻略
- EL之Bagging(DTR):利用DIY数据集(预留30%数据+两种树深)训练Bagging算法(DTR)
- DL之DNN:基于神经网络(从1层~50层)DNN算法实现对非线性数据集点进行绘制决策边界
- DL之VGGNet:VGGNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- SQLServer:GUI方式、SQL语句两种方式建立视图和GUI方式设置主键、约束等
- DL之GAN:生成对抗网络GAN的简介、应用、经典案例之详细攻略
- sshpass命令使用
- 自定义滚动条Js简版
- DHTML_____window对象方法