You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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寄存器,这里有两种更合理的修正方式:

  1. 用move指令直接复制寄存器(更符合MIPS的编程习惯,执行效率也更高):

    " move $8, $sp \n" /* stack pointer */
    
  2. 补全addiu的立即数参数(如果确实需要执行加法偏移操作,哪怕偏移量是0):

    " addiu $8, $sp, 0 \n" /* stack pointer */
    

验证修正

把代码按上面的方式修正后,重新执行你的交叉编译命令:

mips-mti-elf-gcc -o exception.o exception.c

应该就能顺利通过汇编阶段,不再报这个错误了。

内容的提问来源于stack exchange,提问作者Aixeta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:50:42