我在论坛中遇到了asm的一个关键记录器程序。我虽然可以自己创建一个关键记录器。当我阅读代码以查看该程序中实际发生的情况时,我发现了一些有趣的事情。
1.程序几乎从未将变量推送到堆栈。它将变量的值移动到寄存器,然后按下寄存器。 例如。
;hInst:DWORD 4
lea esi, hInst
push esi
2.程序使用stosd清除数组。 例如:
;array1 BYTE 256 DUP(?)
lea edi, array1
push 256/4
xor eax, eax
rep stosd 3
该程序使用push-pop来分配值,如上例所示。
上述约定有哪些优点?
答案 0 :(得分:1)
1)我想不出当前机器的任何优势,但回到白天,你只能推动注册。没有push mem / immed形式。
2)简单/与#1相同。我听说现在字符串指令都被弃用了。然而,回到白天它们是唯一的飞行方式,因为它们更快(循环时间不是更好,但通过不强制更多的指令加载来保留当天非常有限的内存带宽)。