发布网友 发布时间:2022-04-23 19:51
共4个回答
热心网友 时间:2023-10-06 00:46
MOV指令的功能是传送数据,例如MOV AX,[1000H],作用是将1000H作为偏移地址,寻址找到内存单元,将该内存单元中的数据送至AX;热心网友 时间:2023-10-06 00:47
LEA指令的功能是取偏移地址,例如LEA AX,[1000H],作用是将源操作数[1000H]的偏移地址1000H送至AX;热心网友 时间:2023-10-06 00:47
mov有很多很多种,格式上跟lea对应的那种是从一个内存地址(可以是很复杂的寻址模式)到一个寄存器的mov,效果是计算内存地址,然后把里面的值读出来放在寄存器里。而lea是计算内存地址,然后把内存地址本身放进寄存器里。注意有的作者(以及编译器)会利用lea指令支持的寻址模式来计算一些例如一个数乘2/4/8并且加另一个数一类的运算,所以如果你感觉计算的东西不太像个真正的内存地址,它有可能真的不是。要注意指令的名字跟它的字面意义未必符合,所以你要看手册里对指令功能的描述(intel手册有官方下载,你可以去找,不过格式跟gcc的不同; 你教材里多少也应该会写一点,记不清CSAPP里的Y86语言有没有LEA了,没有的话你得找本讲汇编的书参考一下)。比如mov其实在别的编程语言里一般不对应到“移动”而是对应到“赋值”、“拷贝”、“读取”、“写入”等操作(不同格式的mov不一样);lea名字叫load effective address,但是不要太字面地理解,它的本意是让你用各种寻址模式去算地址,实际用法就是凡是可以塞进寻址模式的计算公式里的算式都可以用它算。热心网友 时间:2023-10-06 00:49
MOV指令是数据传送指令,LEA指令是地址传送指令