mips gdb调试发现

来源:互联网 发布:护国神翼 知乎 编辑:程序博客网 时间:2024/05/24 15:36

(1)如果同时使用-Os -g,则只有-Os生效。

(2)mips支持延时槽,参见:http://blog.csdn.net/dogsun88/article/details/7437178

例如:

   854f8:    0320f809     jalr    t9
   854fc:    02202021     move    a0,s1

其中上一次是调用子函数,下一句是将s1赋给a0,实际上调用子函数之前,move a0,s1也有生效。

使用-O0的方式进行编译,则不开启延时槽,例如:

   cd670: 10400008 beqz v0,cd694 <GAL_CalculateBlit+0x7c>
   cd674: 00000000 nop

目前已知使用-Os优化,会开启延时槽。

(3)-Os优化时,函数参数默认用a0 a1 a2寄存器进行传递。

(4)用反汇编的方式来研究现有优化后的库(看不到库调试信息),在使用info registers时,请不要使用up|down哦,我发现up之后,info registers的值有变化。

(5)常用指令集:

分类指令说明立即数加法addiu gp,gp,-11040gp=gp-11040加法addu gp,gp,t9gp=gp+t9乘法lui gp,0xagp=0xa0000位与andi v0,v0,0x4000v0=v0&0x4000load 32位lw v0,0(a0)v0=memory[a0+0]save 32位sw v0,0(a0)memory[a0+0]=v0load 无符号8位lbu a0,9(s2)a0=memory[s2+9]立即数赋值li a1,1a1=1变量赋值move s1,a0s1=a0变量为0跳转beqz v0,851acif (v0==0)跳转0x851ac变量不相等跳转bne a0,v1,8544cif (a0!=v1)跳转0x8544c函数调用跳转jalr t9跳转t9指向地址


原创粉丝点击