请问一下rep与ret连在一起是什么意思?

天下第一好大人 2011-12-05 11:39:46

int sum( int n )
{
int sum = 0;
for( int i = 0; i < n; ++i ) sum += i;
return sum;
}


用gcc4.6.0编译( g++ -O2 -S )得到的汇编代码如下:

.p2align 4,,15
.globl _Z3sumi
.type _Z3sumi, @function
_Z3sumi:
.LFB0:
xorl %eax, %eax
testl %edi, %edi
jle .L2
xorl %edx, %edx
.p2align 4,,10
.p2align 3
.L3:
addl %edx, %eax
addl $1, %edx
cmpl %edi, %edx
jne .L3
.L2:
rep
ret
.LFE0:
.size _Z3sumi, .-_Z3sumi


想请教一下最后面rep紧跟着就是ret,这里的rep的作用是什么?
...全文
2328 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
找到答案了,看来还是得用google才行啊。

摘自http://board.flatassembler.net/topic.php?t=6264

其中提到AMD64的优化指南中提到,这么做是为了优化,在两种条件下无法发挥cpu的分支预测功能:
1> 一个分支,里面带有near-return(opcode C3h),例如
label:
ret
2> 一个判断条件紧跟着就是near-return,例如
jle label2
ret

为了使得代码还是能够用得上cpu的分支预测(branch prediction),最简单的解决办法就是在ret前面插入rep,这称之为two-byte ret,使得性能可以提高。

我上面的问题应该是第二种情况,所以要用rep ret。
WJN92 2011-12-05
  • 打赏
  • 举报
回复
重复执行
  • 打赏
  • 举报
回复
where to man?
man what?

[Quote=引用 1 楼 masmaster 的回复:]

man1man
[/Quote]
masmaster 2011-12-05
  • 打赏
  • 举报
回复
man1man

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧