CentOS7下MIPS交叉编译报错:addiu指令操作数无效问题求助
解决MIPS交叉编译时的汇编指令错误
嘿,这个问题一眼就能看出是内联汇编里的指令语法出问题啦!
错误原因分析
你遇到的汇编错误 /tmp/ccFbK9Ow.s:123: Error: invalid operands addiu $8,$sp,,核心问题是**addiu是MIPS架构的三操作数指令**,它的标准语法是addiu 目标寄存器, 源寄存器, 立即数,必须提供完整的三个操作数才能被汇编器识别。
看你给出的代码段,这一行明显不完整:
" addiu $8, $sp, \n" /* stack pointer */
在$sp,后面完全没有填写立即数参数,汇编器无法解析这个残缺的指令,所以直接抛出了操作数无效的错误。
修正方案
结合你代码的上下文(前一行是" addiu $7, $sp, 0 \n"),你的意图应该是把栈指针$sp的值赋值给$8寄存器,这里有两种更合理的修正方式:
用
move指令直接复制寄存器(更符合MIPS的编程习惯,执行效率也更高):" move $8, $sp \n" /* stack pointer */补全
addiu的立即数参数(如果确实需要执行加法偏移操作,哪怕偏移量是0):" addiu $8, $sp, 0 \n" /* stack pointer */
验证修正
把代码按上面的方式修正后,重新执行你的交叉编译命令:
mips-mti-elf-gcc -o exception.o exception.c
应该就能顺利通过汇编阶段,不再报这个错误了。
内容的提问来源于stack exchange,提问作者Aixeta
相关产品推荐
相关产品推荐

