从 C 调用 MIPS:对齐未对齐的参数



我正在调用一些来自 C 的函数,这些函数是 MIPS 中的代码。 有时我通过 $a 0 到 $a 3 传递的参数没有对齐,如果我尝试使用lw加载它们,则会引发错误。

无论如何,我可以加载这些未对齐的参数并将它们转换为对齐的参数(除了使用lb然后将它们粘合在一起(?我不需要回信,只需阅读它们即可。

我也尝试在MIPS代码中使用"对齐",但它不起作用,可能不是为了那个。

编辑:我正在使用GCC 7.4.0

编辑:我正在使用包含未对齐数据的打包结构。

在 C 代码中使用打包结构时,编译器知道哪些字段未对齐,并创建必要的代码来访问未对齐的数据。可能它会完全按照您在问题中描述的那样,即使用lb而不是lw并组合字节。

(有一些陷阱。您可以创建代码,其中未对齐的数据的信息可能会丢失。

不幸的是,在汇编代码中,您必须手动执行此操作。

作为一种解决方法,您可以从 C 中的包装函数调用汇编程序代码,该包装器函数将值复制到对齐的变量,然后再将其传递给汇编程序代码。

最新更新