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 装配力和动压差_Assembly_X86_Att - Fatal编程技术网

Assembly 装配力和动压差

Assembly 装配力和动压差,assembly,x86,att,Assembly,X86,Att,当我在读我的计算机系统书时, 如果存在$eax包含x值而%ecx包含y的前提, 那么上面的意思是,x+4y放入%edx 如果是的话 leal(%eax,%ecx,4), %edx ,那么与上面的leal表达式不一样吗 正如我所知,leal创建的地址可以被引用,而不是像movl那样由自身引用,而是 当我看到leal(%eax,%ecx,4),%edx等于将x+4y放入edx寄存器, 那么是否意味着它“引用了”%eax和%ecx`并提取了用于计算的值x和y “it”()不是指“reference

当我在读我的计算机系统书时, 如果存在$eax包含x值而%ecx包含y的前提, 那么上面的意思是,x+4y放入%edx

如果是的话

leal(%eax,%ecx,4), %edx
,那么与上面的leal表达式不一样吗

正如我所知,leal创建的地址可以被引用,而不是像movl那样由自身引用,而是

当我看到
leal(%eax,%ecx,4),%edx
等于将
x+4y
放入
edx
寄存器, 那么
是否意味着它“引用了”
%eax
%ecx`并提取了用于计算的值x和y

  • “it”()不是指“referenced”吗

    • LEA
      将地址计算生成的有效地址加载到寄存器中
      MOV
      将某物移动到某处,当使用SIB寻址作为源操作数时,它将地址计算生成的地址处的任何内容移动到目标操作数中

      因此:


      但是,不管是movl还是leal,%eax+%ecx*4本身就是地址,对吗?:)所以区别在于,是否“引用”地址“%eax+%ecx*4”?区别在于该地址是否被取消引用,或者它是否被用作一个值。那么我可以问你一些问题吗?如果%eax的整数值不是地址,该怎么办?那么如果它是leal,那么会发生错误吗?虽然这对movl不重要,但leal不知道它是否是地址,它只计算一个值<另一方面,code>movl将尝试从地址中读取一个值,并注意该值是否无效(无法访问)。
      movl(%eax,%ecx,4), %edx
      
      leal (%eax,%ecx,4), %edx  ←  moves %eax+%ecx*4 into %edx
      movl (%eax,%ecx,4), %edx  ←  moves whatever is at address %eax+%ecx*4 into %edx