免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2566 | 回复: 8
打印 上一主题 下一主题

-----------> 几个汇编问题,请教大家 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-04 15:04 |只看该作者 |倒序浏览
int addFunc(int,int);
int subFunc(int);

void main()
{

int x,y,z;
x= 1;
y=2;
z = addFunc(x,y);
}


int addFunc(int x,int y)
{
int value1 = 5;
int value2;

value2 = subFunc(value1);
return (x+y+value2);

}

int subFunc(int value)
{
return value--;
}

以上代码反汇编以后,如下: 有一些地方不明白  ,请大家帮忙看看
///////////////////////////////////////////////////////////////////////////

/* main Function */
0000000000000000 :

0: 27bdfff8 addiu $sp,$sp,-8

4: afbf0000 sw $ra,0($sp)

8: 0c000000 jal 0                 // 这样又跳回0,不就死循环了 ???  后面的代码如何执行?

c: 00000000 nop

10: 24040001 li $a0,1

14: 0c00000a jal 28            //同样问题,又跳到28,那后面的18 等指令 如何运行?

18: 24050002 li $a1,2

1c: 8fbf0000 lw $ra,0($sp)

20: 03e00008 jr $ra

24: 27bd0008 addiu $sp,$sp,8

28: 27bdfff0 addiu $sp,$sp,-16

2c: afbf0008 sw $ra,8($sp)

30: afb10004 sw $s1,4($sp)

34: afb00000 sw $s0,0($sp)

38: 0080802d move $s0,$a0

3c: 00a0882d move $s1,$a1

40: 0c000019 jal 64          // 又是乱跳,如何理解?

44: 24040005 li $a0,5

48: 02118021 addu $s0,$s0,$s1

4c: 02021021 addu $v0,$s0,$v0

50: 8fbf0008 lw $ra,8($sp)

54: 8fb10004 lw $s1,4($sp)

58: 8fb00000 lw $s0,0($sp)

5c: 03e00008 jr $ra

60: 27bd0010 addiu $sp,$sp,16

64: 03e00008 jr $ra

68: 0080102d move $v0,$a0

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2008-01-04 16:47 |只看该作者
MIPS内部无互锁机制,为了避免冲突,只有在软件上做手脚。个人意见,仅供参考。

论坛徽章:
0
3 [报告]
发表于 2008-01-04 17:01 |只看该作者
但关键是这样的跳跃

如何保证执行顺序  ??

论坛徽章:
0
4 [报告]
发表于 2008-01-08 09:08 |只看该作者
哪个哥们帮忙说一下啊

呵呵

谢谢拉

论坛徽章:
0
5 [报告]
发表于 2008-01-08 18:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2008-01-08 22:04 |只看该作者
mips的跳转延迟只有一个。我觉得是你使用了优化,你可以去掉优化使用objdump -S 看看汇编和c的对照了

论坛徽章:
0
7 [报告]
发表于 2008-01-09 09:32 |只看该作者
jamesr  你好,

先谢谢你的解答,

但我还是有些疑惑,

没有看懂你的意思,

可以再详细说一下吗? 如果有时间的话,谢谢了 :)

论坛徽章:
0
8 [报告]
发表于 2008-01-09 09:41 |只看该作者
watsonts    谢谢你拉

论坛徽章:
0
9 [报告]
发表于 2008-01-09 10:21 |只看该作者
LZ的MIPS汇编怎么学的
jal相当于是call,要返回的,1c到24返回后执行。

MIPS的跳转延时槽应该是1,不是3
从48-4c的功能来看,是return (x+y+value2); 它的执行时间是jal返回之后。

第8行确实没看懂。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP