汇编语言编程基础:基于LoongArch
上QQ阅读APP看书,第一时间看更新

1.4 龙芯汇编语言程序编写示例

和C语言类似,汇编程序也是以函数(也称为方法)为单位编写,函数可以有输入参数或者输出参数。汇编程序所在文件称为汇编源文件(扩展名为.S)。编写后的汇编源文件使用GCC编译器进行编译链接,和其他C语言文件形成最终可执行的二进制文件(即内部已是机器指令)。龙芯汇编源文件的编写、编译、执行全过程的示例如下:

#文件add.S
#接口定义 int add_f(int a, int b, int c, int d)
#功能定义:return (a+b+c+d)
 
    .text
    .align   2
    .globl   add_f
    .type    add_f,@function
add_f:
    add.w    $a0,$a0,$a1
    add.w    $a0,$a0,$a2
    add.w    $a0,$a0,$a3
    jr       $ra
    .size    add_f, .-add_f

add.S源文件里实现了一个add_f函数,其功能为实现4个32位整型数据(分别为寄存器a0、a1、a2和a3)的加法操作,并将结果返回(使用寄存器a0作为返回值)。汇编指令“jr $r1”意为函数返回。

接下来C语言文件test.c对这个汇编源文件中的汇编程序进行调用。

#include <stdio.h>
extern int add_f(int a, int b, int c, int d); //外部函数引用
int main(){
  int ret = add_f(1, 2, 3, 4); //调用add.S中的汇编函数add_f
  printf("ret = %d\n", ret); //输出结果
  return 0;
}

C语言文件test.c对汇编程序的调用与对其他C语言外部函数的调用方式是一致的,使用前通过关键字extern声明即可。

下面通过GCC编译器将汇编源文件add.S和C语言文件test.c编译成最终可执行文件test_add。

$ gcc test.c add.S -o test_add

最后我们可以运行这个可执行文件test_add并查看结果,结果显示为10(1+2+3+4),说明汇编源程序编写和执行正确。

$ ./a.out
ret = 10

可见,编写汇编语言程序还是还挺简单的。龙芯汇编源程序更详细的语法和编写方式会在后续章节中详细介绍。