Optimization 在汇编程序中使用指针偏移比递减快吗?

Optimization 在汇编程序中使用指针偏移比递减快吗?,optimization,assembly,x86-64,Optimization,Assembly,X86 64,指针偏移是否需要额外的时间?哪个更好 mov rcx, length dec rcx mov rax, qword ptr [rsi+rcx*8] 或 最好使用OFFET,在现代建筑中,这可以更快,但决不能慢 它少了一条指令。指令解码是一种有限的资源。 由于偏移量在字符范围内,代码序列的长度缩短了一个字节。这需要更少的缓存。 依赖链短一条指令。在第一个序列中,地址计算j必须等待递减的结果。 地址计算是在单独的单元中完成的。在使用复杂寻址模式时,没有速度损失。 另一方面,减量可能会被重新排序,以

指针偏移是否需要额外的时间?哪个更好

mov rcx, length
dec rcx
mov rax, qword ptr [rsi+rcx*8]


最好使用OFFET,在现代建筑中,这可以更快,但决不能慢

它少了一条指令。指令解码是一种有限的资源。 由于偏移量在字符范围内,代码序列的长度缩短了一个字节。这需要更少的缓存。 依赖链短一条指令。在第一个序列中,地址计算j必须等待递减的结果。 地址计算是在单独的单元中完成的。在使用复杂寻址模式时,没有速度损失。 另一方面,减量可能会被重新排序,以便更早地执行,因此在速度方面不会产生差异。
更多背景信息,请参见。

最好使用OFFET,在现代建筑中,这可以更快,但决不会更慢

它少了一条指令。指令解码是一种有限的资源。 由于偏移量在字符范围内,代码序列的长度缩短了一个字节。这需要更少的缓存。 依赖链短一条指令。在第一个序列中,地址计算j必须等待递减的结果。 地址计算是在单独的单元中完成的。在使用复杂寻址模式时,没有速度损失。 另一方面,减量可能会被重新排序,以便更早地执行,因此在速度方面不会产生差异。
有关OTOH评论,请参阅。

+1上的更多背景信息。很长一段时间以来,汇编代码和指令执行的实际顺序都是相同的。很长一段时间以来,汇编代码和指令执行的实际顺序都是相同的。
mov rcx, length
mov rax, qword ptr [rsi+rcx*8-8]