mov offset和lea的区别
全局变量取地址用mov offset
例如:mov dword ptr [ebp-14h],offset ConsoleTest+0x94620(00494620)
局部变量取地址用lea
例如:
0042fb24 8d45f8 lea eax,[ebp-8]
0042fb27 8945ec mov dword ptr [ebp-14h],eax//EBP-8这个变量的地址存入变量[ebp-14h]
其实区别就是offset的第二个参数是地址,lea第二个参数是寄存器。
LEA SI,STR与MOV SI,OFFSET STR最大区别在于OFFSET STR是一条伪指令,与SEG DATA之类相似,它在编译和连接过程被赋给一个值,你可以把它看成一个立即数,LEA SI,STR是把STR的内存指针赋给SI,你可以把它看成内存变量。另外,MOV SI,OFFSET STR是一条2字节立即寻址指令,LEA SI,STR是一条3字节内存寻址指令,后者虽然有比较灵活的寻址方式,但前者具有更小的容量和更快的执行速度,推荐尽可能使用MOV SI,OFFSET STR。当然,OFFSET后面只能是标号或变量名。
本文详细解释了在汇编语言中,movoffset与lea指令的区别。movoffset用于全局变量的地址获取,而lea用于局部变量。movoffset的第二个参数为地址,lea则使用寄存器。此外,文章还对比了LEASI, STR与MOVSI, OFFSETSTR的差异,指出后者虽为伪指令但在执行速度上占优。
3225

被折叠的 条评论
为什么被折叠?



