LEA指令的目的是什么?
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 对我来说,这就像一部时髦的MOV。 它的目的是什么?何时使用? #1楼 8086具有大量的指令集,它们接受寄存器操作数和有效地址,执行一些计算以计算该有效地址的偏移量部分,并执行一些涉及寄存器和所计算地址所指向的存储器的操作。 让该系列中的指令之一按上述方式操作非常简单,只是跳过了实际的内存操作。 这个,说明: mov ax,[bx+si+5] lea ax,[bx+si+5] 在内部几乎完全相同。 区别是跳过的步骤。 两种指令的工作方式如下: temp = fetched immediate operand (5) temp += bx temp += si address_out = temp (skipped for LEA) trigger 16-bit read (skipped for LEA) temp = data_in (skipped for LEA) ax = temp 至于为什么英特尔认为该指令值得包括在内,我不确定,但是实施起来便宜的事实将是一个很大的因素。 另一个因素可能是英特尔的汇编器允许相对于BP寄存器定义符号的事实。 如果将 fnord 定义为BP相对符号(例如BP + 8),则可以说: mov ax,fnord ; Equivalent to "mov ax,[BP+8]"