22、特定比特位操作技术详解

特定比特位操作技术详解

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 ,代码会更短:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值