为何LEA(Load Effective Address)指令是必需的?mov与lea合法性疑问
关于MOV与LEA指令的疑问
我已阅读多篇关于LEA与MOV指令的相关问答,仍未找到所需答案。
已理解的基础差异
我理解lea和mov在执行结果上的部分差异,简而言之:
mov eax, ebp ;将ebp寄存器中的值存入eax寄存器 lea eax, [ebp] ;与上述操作等效
存在的困惑点
但遇到以下情况时我产生了疑问:
mov eax, ebp+8 ;寄存器集大小无效(非法) lea eax, [ebp+8] ;计算ebp值与8的和,再赋值给eax(合法)
为何mov eax, ebp+8非法,而lea eax, [ebp+8]合法?我的书中提到:
MOV存入EAX的值必须由汇编器计算(即最终必须是常量)
这让我无法理解!这里的“CONSTANT(常量)”指的是什么?直观理解是该常量需在程序运行前由汇编器/链接器计算,但mov eax, [ebp+8]是合法指令,而汇编器/链接器在程序运行前根本无法得知[ebp+8](对应C语言中的*(ebp+8))的值!
内容的提问来源于stack exchange,提问作者Guichi
相关产品推荐
相关产品推荐

