官术网_书友最值得收藏!

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

可見,編寫匯編語言程序還是還挺簡單的。龍芯匯編源程序更詳細的語法和編寫方式會在后續章節中詳細介紹。

主站蜘蛛池模板: 清丰县| 荔波县| 延庆县| 镶黄旗| 潮州市| 青海省| 襄城县| 鄄城县| 和平县| 南乐县| 东阳市| 青冈县| 饶河县| 开化县| 兰溪市| 梨树县| 衡水市| 永年县| 亳州市| 冀州市| 禄丰县| 渝中区| 新干县| 东港市| 营口市| 米易县| 保定市| 防城港市| 静安区| 紫云| 大关县| 枞阳县| 子长县| 共和县| 扶余县| 浏阳市| 上栗县| 稻城县| 阿鲁科尔沁旗| 大港区| 井冈山市|