微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

优化筛选从 C 到汇编的空格

如何解决优化筛选从 C 到汇编的空格

我正在学习汇编并将我的一些 C 代码编译为汇编以查看它在做什么。我有一段代码忽略了我的字符串中的空格。

while ((str[index] == ' ') || (str[index] == '\n') || (str[index] == '\t')
        || (str[index] == '\f') || (str[index] == '\r') || (str[index] == '\v'))
        index++;

在正常编译中,汇编会比较这些字符中的每一个,我理解这一点。但是如果我使用 -O 编译优化版本,我会得到一个更简洁的版本,但我不确定它在做什么。

LBB0_12:                                ##   in Loop: Header=BB0_1 Depth=1
    incq    %rax
LBB0_1:                                 ## =>This Inner Loop Header: Depth=1
    movzbl  (%rdi,%rax),%ecx
    leal    -9(%rcx),%edx
    cmpb    $5,%dl
    jb  LBB0_12
## %bb.2:                               ##   in Loop: Header=BB0_1 Depth=1
    cmpb    $32,%cl
    je  LBB0_12

我知道 32 正在检查空间。但是所有其他字符似乎都包含在标签 1 中,我迷路了。有人可以解释一下吗? 在此先感谢您!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。