在C語(yǔ)言中調(diào)用匯編文件中的函數(shù),要做的主要工作有兩個(gè):
一是在C語(yǔ)言中聲明函數(shù)原型,并加extern關(guān)鍵字;
二是在匯編中用EXPORT導(dǎo)出函數(shù)名,并用該函數(shù)名作為匯編代碼段的標(biāo)識(shí),最后用mov pc, lr返回。然后,就可以在C語(yǔ)言中使用該函數(shù)了。
從C語(yǔ)言的角度,并不知道該函數(shù)的實(shí)現(xiàn)是用C語(yǔ)言還是匯編語(yǔ)言。更深的原因是因?yàn)镃語(yǔ)言的函數(shù)名起到表明函數(shù)代碼起始地址的位置,這個(gè)和匯編的label是一致的。
實(shí)例代碼:
#include <stdio.h>
extern void asm_strcpy(const char *src, char *dest);
int main()
{
const char *s = "welcome to ETC";
char d[32];
asm_strcpy(s, d);
return 0;
}
建立strcpy.s代碼,并加入工程中。文章來源:http://www.zghlxwxcb.cn/news/detail-625587.html
;asm function implementation
AREA asmfile, CODE, READONLY
EXPORT asm_strcpy
asm_strcpy
loop
ldrb r4, [r0], #1 ;address increment after
read
cmp r4, #0
beq over
strb r4, [r1], #1
b loop
over
mov pc, lr
END
在這里,C語(yǔ)言和匯編語(yǔ)言之間的參數(shù)傳遞是通過ATPCS(ARM Thumb Procedure Call Standard)的規(guī)定來進(jìn)行的。簡(jiǎn)單地說,就是如果函數(shù)有不多于4個(gè)參數(shù),對(duì)應(yīng)的用R0~R3來進(jìn)行傳遞,多于4個(gè)時(shí)借助棧,函數(shù)的返回值通過R0來返回文章來源地址http://www.zghlxwxcb.cn/news/detail-625587.html
到了這里,關(guān)于在C語(yǔ)言中調(diào)用匯編語(yǔ)言的函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!