问题描述
我正在学习汇编并将我的一些 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 (将#修改为@)