首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >很难理解GCC装配指令计算条件跳转

很难理解GCC装配指令计算条件跳转
EN

Stack Overflow用户
提问于 2014-12-29 16:21:41
回答 1查看 142关注 0票数 1

我有以下代码:

代码语言:javascript
复制
if(( a<0 ) || ( a>global_count ))  //global_count is a global int
{
    print error;
}

normal_flow
    ...

下面是GCC生成的汇编程序:

代码语言:javascript
复制
cmpl 0x0 , 0x10(%ebp) //first check
js print_error
mov 0x8(%ebp) , %eax
mov 0x8(%eax) , %eax 
cmp 0x10(%ebp) , %eax //second check
jge normal_flow
print_error

我不明白为什么是jge?我看到它使用的是mov,而不是movl,但我认为在这种情况下应该是jle,如果我们更改跳转目标,则应该是jg。还是我想错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-29 16:31:18

它是jge,因为编译器同时交换了操作数和条件。它在做global_count >= a。注意,0x10(%ebp)a%eaxglobal_count。更复杂的是,at&t语法本身就颠倒了操作数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27692373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档