主题:LEA指令和 OFFSET操作符有什么区别吗
风一般的女孩
[专家分:50] 发布于 2006-11-25 19:52:00
LEA指令和 OFFSET操作符有什么区别吗 都是取偏移地址 但有什么不同吗
回复列表 (共5个回复)
沙发
qwy123 [专家分:230] 发布于 2006-11-26 14:24:00
应该差不多吧,只是格式不同而已吧
LEA AX,BUF和MOV AX,OFFSET BUF是等价的
板凳
wp2011 [专家分:130] 发布于 2006-11-26 18:32:00
还是有一点区别的,OFFSET取的是静态地址,LEA既可取静态地址也可取动态地址。不过对于初学者来说,两者可通用。
3 楼
jhkdiy [专家分:1620] 发布于 2006-11-26 23:53:00
不注意的话有时会给你致命打击噢.
offset 是在程序 编译时 获取偏移地址。
lea 是在程序 运行期间 动态计算后得到偏移地址。
虽然大部分情况可以互用,但有些情况不能,例如操作堆栈变量就不可以用offset,否则会出问题。
4 楼
bruce1914 [专家分:250] 发布于 2006-11-27 10:20:00
[quote]不注意的话有时会给你致命打击噢.
offset 是在程序 编译时 获取偏移地址。
lea 是在程序 运行期间 动态计算后得到偏移地址。
虽然大部分情况可以互用,但有些情况不能,例如操作堆栈变量就不可以用offset,否则会出问题。[/quote]
学习了
5 楼
neverstop118 [专家分:40] 发布于 2006-11-27 17:53:00
先看一个例题:
LEA BX,LIST
MOV BX,OFFSET LIST
可以看出,这两条指令在功能上是相同的,BX寄存器中都可得到地址LIST的值,而且此时MOV指令的执行速度会比LEA指令更快。但是,OFFSET只能与简单的符号地址相连,而不能和诸如LIST[SI]或[SI]等复杂操作数相连.因此,LEA指令在取得访问变量的工具方面是很有用的.
我来回复