【发布时间】:2015-10-27 00:50:57
【问题描述】:
这是我的函数的汇编代码。 这是使用 gcc -O2 -fsanitize=undefined
运行的 0: 55 push %rbp
1: 53 push %rbx
2: 48 ba ff ff ff ff ff movabs $0x7fffffffffffffff,%rdx
9: ff ff 7f
c: 48 83 ec 08 sub $0x8,%rsp
10: 48 8b 1d 00 00 00 00 mov 0x0(%rip),%rbx # 17 <testovf+0x17>
17: 48 89 dd mov %rbx,%rbp
1a: 48 01 d5 add %rdx,%rbp
1d: 70 0d jo 2c <testovf+0x2c>
1f: 48 39 eb cmp %rbp,%rbx
22: 0f 9f c0 setg %al
25: 48 83 c4 08 add $0x8,%rsp
29: 5b pop %rbx
2a: 5d pop %rbp
2b: c3 retq
2c: 48 89 de mov %rbx,%rsi
2f: bf 00 00 00 00 mov $0x0,%edi
34: e8 00 00 00 00 callq 39 <testovf+0x39>
39: eb e4 jmp 1f <testovf+0x1f>
我知道当 1a 加法发生溢出时,它会跳转到 2c。 但是,在 2c 之后, mov %rbx,%rsi 和 mov $0x0,%edi 做了什么? 他们需要在那里吗?
【问题讨论】:
-
托尼,停止编辑问题的正文。没有代码,这是一个不完整且无用的问题,应该删除。如果您要进行编辑,请同时输入新内容。如果您有其他问题,请发布新问题
标签: assembly optimization x86-64