一、內嵌匯編的方式,使用關鍵字__asm{匯編指令……},這種方式操作簡單,但是限制很多,比如:不能寫PC、不支持標號表達式等等,許多正常的匯編指令和偽指令都不用。 下面是個例子:
//******************************************
int x = 3;
int y = 5;
int z;
int main(void)
{
__asm
{
MOV R0,x
MOV R1,y
ADD R0,R0,R1
MOV z,R0
}
while(1);
}
//******************************************
結果即z=x+y
如圖

二、調用外部匯編的方式
1) 如果參數不超過4個,依靠R0-R3傳遞,程序如下:
//******************************************
//main.C int z; extern int add(int,int); //外部鏈接 int main(void)
{
z = add(3,5);
while(1);
}
//******************************************
;*********************************************
;add.S
EXPORT add
AREA add,CODE,READONLY
CODE32
ADD R0,R0,R1
MOV PC,LR ;返回
END
;********************************************* 仿真結果: z=3+5
如下圖:

2) 如果參數超過4個,前四個用R0-R3傳遞,其余用堆棧傳遞,程序如下:
//******************************************
//main.C int z; extern int add(int,int,int,int,int); //外部鏈接 int main(void)
{
z = add(1,2,3,4,5);
while(1);
}
//******************************************
;*********************************************
;add.S
EXPORT add
AREA add,CODE,READONLY
CODE32
ADD R0,R0,R1
ADD R0,R0,R2
ADD R0,R0,R3
LDR R1,[SP] ;取出第五個參數
ADD R0,R0,R1
ADD SP,SP,#4 ;調整堆棧指針,找到返回地址
MOV PC,LR ;返回
END
;*********************************************
仿真結果: z=1+2+3+4+5
如下圖:

|