g cc: Что такое раздел в начале функции с MIPS в форме сборки? - PullRequest
1 голос
/ 01 апреля 2020

Я пишу простой код для теста.

#include <stdio.h>

int funadd(int a, int b){
  int x = 0;

  x = a + b;

  return x;
}

int fun(int a, int b){
  int y = 17;
  int returnvalue = 0;

  returnvalue = funadd(a, b);
  returnvalue = returnvalue - y;

  return returnvalue;
}

int main(){

  int a = 32;
  int b = 24;

  int c = 0;

  c = fun(a, b);

  printf("%d\n", c);

  return c;

}

И затем собираю его.

После сборки я понимаю, что в начале каждой функции есть какой-то раздел.

funadd:
    .frame  $fp,24,$31      # vars= 8, regs= 1/0, args= 0, gp= 8
    .mask   0x40000000,-4
    .fmask  0x00000000,0
    .set    noreorder
    .set    nomacro
...
fun:
    .frame  $fp,40,$31      # vars= 8, regs= 2/0, args= 16, gp= 8
    .mask   0xc0000000,-4
    .fmask  0x00000000,0
    .set    noreorder
    .cpload $25
    .set    nomacro
...
main:
    .frame  $fp,48,$31      # vars= 16, regs= 2/0, args= 16, gp= 8
    .mask   0xc0000000,-4
    .fmask  0x00000000,0
    .set    noreorder
    .cpload $25
    .set    nomacro

Я хочу знать, что означает каждый раздел, как использовать эти разделы и почему они здесь. И почему они отличаются в разных функциях, таких как main и funadd.

И что Больше всего меня волнует, если я сам добавлю некоторые функции с помощью формы сборки в файл .s, который делает g cc, могу ли я игнорировать эти разделы и напрямую написать инструкции, например, начать с addiu $sp,$sp,-48.

Может кто-нибудь объяснить это подробно или просто дать мне ссылку с подробным объяснением.

Я не знаком с MIPS. Спасибо.

...