本程序用keil5實現。
keil4會將C程序的地址設為0x00000000,即一開始就運行C程序了,參數都還沒設置好。這個錯誤我也沒深究,因為我自己裝的是keil5.
首先需要在匯編代碼中給C程序指定參數。如果函數需要4個及4個以下的參數的話,那么把我們需要的參數分別賦值在R0~R3這4個寄存器中即可。
如果多於4個參數,那么既要在堆棧中放入參數了。
設定好sp即堆棧指針的地址,c函數會在該堆棧中取第4個以后的參數。
調用C函數時,C文件不需要聲明什么,就是普通的C即可。而匯編要在前面IMPORT 函數名
C語言代碼:
int SUM(int result,int a,int b,int c,int d,int e,int f){ return result = a+b+c+d+e+f; }
匯編代碼:
AREA EXAMPLE,CODE,READONLY IMPORT SUM PRESERVE8 ENTRY ARM MOV R0,#0;result MOV R1,#1;a MOV R2,#2;b MOV R3,#3;c LDR SP,=0X40001000 MOV R4,#4;d MOV R5,#5;e MOV R6,#6;f STMFD SP!,{R4,R5,R6}; BL SUM;調用C END