还有哪些其他优化(例如此处提供的优化`testl` eax against eax?可以应用以减少代码大小?
我特别感兴趣的是一线优化,例如使用测试eax,eax 而不是 cmp eax,0 。
感谢。
答案 0 :(得分:2)
将常量有符号字节(-128到127)移动到寄存器可以与push和pop一起使用以节省几个字节。
6A09 push byte 9 ; Push byte 9 on stack
58 pop eax ; Pop into 32-bit eax
这是与mov 5字节等效的
比较的三个字节B809000000 mov eax, 9
答案 1 :(得分:0)
在不使用mov的情况下,可以更有效地将一些常量移动到寄存器中。例如,将零移动到rax:
xor eax, eax
或者将rax设置为1:
xor eax, eax
inc eax
可以使用eax(而不是rax),因为rax的上半部分被隐式清除(感谢评论)
答案 2 :(得分:-1)
我发现了另一个:
add eax, 1
替换为
inc eax