pcr386 发表于 2015-11-22 14:02:15

这段mips代码在讲什么啊?帮我看看呗,一小段。


兄弟们帮我看看,是在判断什么条件啊?这算是一个完整函数么?

这个应该是mips的汇编。

先谢过了。

<support_mifi>:
addiu        sp,sp,-24
sw        ra,16(sp)
jal        0 <support_mifi>
li        a0,7
lw        ra,16(sp)
nop
jr        ra
addiu        sp,sp,24

pcr386 发表于 2015-11-22 14:02:56

或者能否转换成c?我理解理解。

zzj0329 发表于 2017-2-20 15:58:14

<support_mifi>:                              //程序标号,相当于C语言里声明一个函数名
addiu      sp,sp,-24                        //向堆栈指针申请6行代码的空间
sw      ra,16(sp)                              //将之前的函数返回值ra存放到栈里保护
jal      0 <support_mifi>                   //跳到support_mifi这个函数,注意jal指令会更新ra(函数返回地址),所以在上一步保存了
li      a0,7                                       //a0这个通用寄存器赋值7,注意此条执行为jal的延时操位置,即先执行此条指令再执行上一条的跳转
lw      ra,16(sp)                              //将之前保存的函数返回地址取回
nop                                                 //空操作
jr      ra                                          //跳回ra寄存器的地址
addiu      sp,sp,24                           //恢复栈指针


看起来像是不断的重入support_mifi,不断的申请栈存放之前的重入前地址,反复给a0赋值,后续退出此循环的代码永远不会被执行到,楼主你确定代码复制正确了么

putty 发表于 2017-2-20 21:13:50

int support_mifi(void)
{
    return check_support_mifi(7);
}

之所以显示jal 0, 是因为还没有重定位, 符号地址还没解析. check_support_mifi是我随便猜测一个名字

pcr386 发表于 2017-2-21 17:40:15

zzj0329 发表于 2017-2-20 15:58
:                              //程序标号,相当于C语言里声明一个函数名
addiu      sp,sp,-24      ...

好的,多谢。代码应该没错。量产代码来着。

pcr386 发表于 2017-2-21 17:40:35

putty 发表于 2017-2-20 21:13
int support_mifi(void)
{
    return check_support_mifi(7);


感谢。这样看就清晰多了。

zzj0329 发表于 2017-2-21 21:59:23

putty 发表于 2017-2-20 21:13
int support_mifi(void)
{
    return check_support_mifi(7);


你这个相当于将楼主位的jal 0<support_mifi>替换成了jal 0<check_support_mifi>
MIPS汇编里通用寄存器a0~a3通常作为函数的参数传入寄存器,跳转之前将check_support_mifi的第0个参数赋值7了,
此时已经跳走了,后续的几行代码基本上是占位用,因为根本不会执行到,除非check_support_mifi函数内倒数第2行还有句jr ra指令返回到support_mifi函数内
(为了保险起见不让程序跑飞所以编译器在每个函数头尾相呼应,头部向栈申请空间,保存跳入指针,尾部回读之前的指针,返回之前调用此函数的地方并恢复栈指针)

putty 发表于 2017-2-22 13:28:40

zzj0329 发表于 2017-2-21 21:59
你这个相当于将楼主位的jal 0替换成了jal 0
MIPS汇编里通用寄存器a0~a3通常作为函数的参数传入寄存器,跳 ...

楼主很可能反汇编的是.o文件, 没有最终链接, 所以看到jal 0, 不要以为就是要跳到support_mifi去. 最终链接时, 地址0会被解析的.
页: [1]
查看完整版本: 这段mips代码在讲什么啊?帮我看看呗,一小段。