特定比特位操作技术详解
1. GCC优化
在进行代码优化时,GCC编译器有其独特的表现。以下是一段优化后的GCC代码示例:
public f
f
proc near
arg_0 = dword ptr 8
push ebp
mov ebp, esp
mov eax, [ebp+arg_0]
pop ebp
or ah, 40h
and ah, 0FDh
retn
f endp
值得注意的是,编译器通过 AH 寄存器来操作 EAX 寄存器的一部分,即从第8位到第15位。在早期的16位CPU 8086中,累加器名为 AX ,由两个8位部分组成,即 AL (低字节)和 AH (高字节) 。到了80386,几乎所有寄存器都扩展到32位,累加器名为 EAX ,但为了兼容性,其旧部分仍可作为 AX/AH/AL 访问。由于所有x86 CPU都是16位8086 CPU的继承者,这些旧的16位操作码比新的32位操作码更短。例如, or ah, 40h 指令仅占用3个字节,而 or eax, 04000h 则需要5个字节,若第一个操作数中的寄存器不是 EAX ,则需要6个字节。
如果开启 -O3 优化标志并设置 regparm=3 ,代码会更短:
超级会员免费看
订阅专栏 解锁全文
3626

被折叠的 条评论
为什么被折叠?



