【问题标题】:making a C function with multiple arguments in assembly mips 64 (winmips64)在程序集 mips 64 (winmips64) 中创建具有多个参数的 C 函数
【发布时间】:2021-03-04 00:48:18
【问题描述】:

我必须用尽可能少的命令将这个 C 代码中的 FIR 滤波器转换为汇编 mips64。如何在程序集 mips64 中使用超过 4 个参数的 fir 函数?我正在使用 winmips64 作为模拟器。我只关心正确声明函数

void fir(int X[], int H[], int Y[], int n, int m)
{
    int i, j;
    int y0;
    
    for (j=0; j<m; j++){
        y0=0;
        for (i=0; i<n; i++){
            y0+=X[i+j]*H[i];
        }
        Y[j]=y0;
     }
}

【问题讨论】:

  • MIPS 除了$a0-$a3 之外还有很多其他的寄存器。因此,请选择其他一些用于附加论点。例如,N64 ABI 使用$a0-$a3$t0-$t3 最多允许8 个寄存器参数。或者你可以在堆栈上传递额外的参数。
  • @enhzflep 这是我要解决的家庭作业问题

标签: c assembly mips calling-convention mips64


【解决方案1】:

模拟器本身很可能不关心您的调用约定。

查看你的作业文本和课程作业,了解你应该遵循的官方调用约定。

如果您从 C 调用汇编代码,那么一种方法是编译和反汇编调用者的 C 代码,以查看参数是如何传递的,这就是您应该期望接收它们的方式。 (您也可以编译实际函数的 C 版本。)

我只关心正确声明函数

在汇编中没有声明函数(函数签名)的概念。 (搜索声明与定义。)在汇编中只有函数名称,以及(由调用者和被调用者)对哪个参数去/在哪里的期望,这由适用的调用约定决定。

【讨论】:

  • 这确实有助于查看参数是如何传递的,我将用我的代码进行更多试验,看看它是如何工作的,谢谢你的帮助和解释!我会进一步调查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多