gpt4 book ai didi

assembly - 编写汇编时使用哪个寄存器有关系吗?

转载 作者:行者123 更新时间:2023-12-04 22:02:43 24 4
gpt4 key购买 nike

如果要编写汇编,将值分配给哪个寄存器是否重要?假设您将一个累加/中间值存储在%ebx中,而不是通常用于此目的的%eax中。那是不好的做法吗?它会影响性能吗?

换句话说,您可以将它们等同地视为存储空间,还是应该坚持将它们用于特定目的?

最佳答案

首先,您必须使用支持您要使用的指令的寄存器。 x86上的许多指令(以及其他体系结构,尽管较少)对支持寄存器的方式有一些限制。

例如,使用某些双寄存器乘法和除法指令,这些指令在特定用途中特别涉及eax和edx。

接下来,您要使用高效的寄存器,即寄存器:

  • 的编码较短(here是关于x64指令长度的很好的讨论)。短编码可以更好地利用缓存资源,从而可以使大型程序更高效地运行。
  • 不受约束的
  • ,即由于调用约定,也就是说,它们不会为使用它们招致额外的开销(定义了软件/调用约定)–除非已经支付了开销!
  • 是所产生的值的最终目的地:例如如果是第二个参数,则对应于要传递的第二个值的寄存器(再次根据调用约定)。如果我们可以将值放置在正确的寄存器中(根据传递或返回值的需要),那么我们可以放弃数据移动(即复制)指令。
  • 关于assembly - 编写汇编时使用哪个寄存器有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59869218/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com