Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly C至组装-leaq说明_Assembly_Instruction Set - Fatal编程技术网

Assembly C至组装-leaq说明

Assembly C至组装-leaq说明,assembly,instruction-set,Assembly,Instruction Set,据我所知: %rdi=1参数=x %rsi=2参数=y %rdx=3参数=z 其他人操纵这些寄存器。。。并存储在返回值寄存器中 汇编代码leaq(%rsi,%rsi,2),%rdx上的第三行,我将其翻译为:z=y+2*y 我很困惑,这是错误的代码,还是一个汇编魔术 简单解释 它移动的是地址而不是值它正在做的是y*48作为y*3*16是的,我刚刚注意到,我认为它像3y@Jester,其中一些指令很难理解(对我来说),你碰巧有什么好的参考资料吗?对于其他人,再分析一次,这段代码似乎是正确的。除

据我所知:

  • %rdi=1参数=x
  • %rsi=2参数=y
  • %rdx=3参数=z
  • 其他人操纵这些寄存器。。。并存储在返回值寄存器中
汇编代码
leaq(%rsi,%rsi,2),%rdx
上的第三行,我将其翻译为:
z=y+2*y

我很困惑,这是错误的代码,还是一个汇编魔术

简单解释


它移动的是地址而不是值

它正在做的是
y*48
作为
y*3*16
是的,我刚刚注意到,我认为它像
3y@Jester,其中一些指令很难理解(对我来说),你碰巧有什么好的参考资料吗?对于其他人,再分析一次,这段代码似乎是正确的。除了官方的英特尔指令集参考?你还需要什么:)你能引用PDF链接最相关的部分吗?leaq(%rsi,%rsi,2),%rdx的意思是%rdx=2*rsi+rsi,等于3*rsi,我们把3写为000011,所以在4左sfift(sal shift acc.left)后,110000是48