取有效地址指令LEA(Load Effective Address)
指令LEA是把一个内存变量的有效地址送给指定的寄存器。其指令格式如下:
LEA Reg, Mem
该指令通常用来对指针或变址寄存器BX、DI或SI等置初值之用
LEA 与 OFFSET 的比较
①一般来说,
mov reg,offset xxx 比 lea reg,xxx 的指令长度少一个字节,且快一个时钟,
因此,应优先选用 mov offset 指令,
lea的优势真正体现在这个方面:
计算两个寄存器的和并放入另一个寄存器中
比如
lea ax,[bx+di+100]
比
mov ax,bx
add ax,di
add ax,100
高效得多
②
lea可以用基址、变址...寻址,offset则只能用mem,offset是由汇编程序实现,而lea是在程序运行时由指令实现,所以在程序中才可得到的地址时只能用lea,如果在汇编时可得到地址则用offset,毕竟指令短,又是由汇编程序操作,程序执行时可直接使用得到的地址
>
③
都说得不对啊。
lea是真正的汇编指令,它对应于一个机器码,而offset只是一个给汇编程序的关键字,它要求汇编程序在汇编时算出相应的地址偏移,也就是说它对应的操作数必须是一个汇编程序知道的变量或者标量!而lea却可以算出任何形式的地址偏移!这才是它们真正的区别哟。
④
=>offset的确不是指令,mov offset汇编前会被替换成真正的mov
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|