gpt4 book ai didi

assembly - 将寄存器设置为1或(-1)的最有效方法

转载 作者:行者123 更新时间:2023-12-03 12:55:45 27 4
gpt4 key购买 nike

我现在正在上一门汇编类(class),而检查我们的家庭作业的那个人是一个非常老练的老派优化狂。例如,如果他看到以下情况,则扣除10%:

mov ax, 0

代替:
xor ax,ax

即使只使用一次。

我不是汇编程序设计的初学者,但是我不是优化专家,所以我在某些方面需要您的帮助(可能是一个非常愚蠢的问题,但我还是会问):
如果我需要将寄存器值设置为1或(-1),则最好使用:
mov ax, 1

或做类似的事情:
xor ax,ax
inc ax

我真的需要一个好成绩,所以我正在努力使其尽可能优化。 (我需要同时优化时间和代码大小)

最佳答案

一个快速的8086 instructions timings size谷歌打开了http://8086.tk/,它似乎具有8086(及更多)指令集的所有时间和大小。
毫无疑问,您可以在网上找到具有类似信息的官方英特尔doco。
对于您的具体问题:

xor ax,ax
inc ax
需要3 + 3 = 6个时钟周期和2 + 1 = 3个字节
mov ax,1
需要4个时钟周期和3个字节。
因此,在这种情况下,后者更好。

但是您需要与您的教育机构谈谈这个人。像乞for那样简单的事情的返回率为10%。
您应该问,如果有两种可能性,一种更快,一种更短,该怎么办。
然后,一旦他们承认根据您要实现的目标而采用不同的编码方式,请告诉他们您要实现的目标是可读性和可维护性,并且认真地避免浪费在此循环或字节*。
如果遇到性能问题,在一段代码处于接近完整的状态后,通常会执行优化操作-当代码仍然受到不小的影响时,几乎总是浪费精力。
值得一提的是, sub ax,ax在时钟周期和字节方面似乎与 xor ax,ax相当,因此也许您下次可以将其放入混音中以使他进行更多工作。
* a)不,不是真的,但偶尔发泄很有趣:-)

关于assembly - 将寄存器设置为1或(-1)的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2826872/

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