递增具有最大值的寄存器?
逆向工程
艾达
部件
2021-06-12 09:10:17
2个回答
正如评论的那样,增加最大值确实会回到 0。但是,我想解释一下为什么代码看起来像这样。原始来源可能类似于:
int pos = 0;
while (buf[pos]==0) pos++;
现在,对汇编的简单/字面翻译将在开始时进行检查和有条件跳出循环,并在结束时进行无条件向后跳转。但是,通过将其转换为 do-while 循环,您可以摆脱无条件跳转,并在最后只有条件跳转:
int pos = -1;
do
{
pos++;
} while (buf[pos]==0);
虽然是次要优化,但它可以改进分支预测,并且通过错误二进制文件可以显着提高性能。这很可能是您看到初始值 -1(表示为 0FFFFFFFFh)的原因。
其它你可能感兴趣的问题

