keil C呼叫彙編模組的例子

2021-06-02 20:00:28 字數 1384 閱讀 9253

//第乙個檔案是c的內容

#include 

extern void delay(unsigned int delaytime);//對彙編函式的宣告

void main(void) }

//第二個檔案是彙編的內容

?pr?_delay segment code 

public _delay

rseg ?pr?_delay

_delay:                    //注意這裡有個「_」下劃線是不可缺的

using 0

?c0001:

mov   a,r7

dec   r7

mov   r4,ar6

jnz   ?c0004

dec   r6

?c0004:

orl   a,r4

jnz   ?c0001

?c0003:

ret  

end

這兩個新增都keil工程裡面就可以了,可簡單了,希望新手少走點彎路

其它的知識:

函式名的轉換規律

主函式中的宣告 彙編符號名 說明

viod func(void) func 無引數傳遞或不含暫存器的函式名不作轉變轉入目標檔案中,名字只是簡單地轉為大寫形式

void func(char) _func 帶暫存器引數的函式名,前面加「_」字首,它表明這類函式包含暫存器內的引數傳遞

void func(void) reentrant _?func 對於重入函式,前面加「_?」字首,它表明該函式包含棧內才引數傳遞

命名轉換規律

儲存區 命名轉換

code  ?pr?co

xdata ?xd

data ?dt

bit ?bi

pdata ?pd

接收引數暫存器

引數序號 char int long,float 通用指標

1 r7 r6&r7 r4~r7 r1~r3

2 r5 r4&r5 - -

3 r3 r2&r3 - -

返回值型別與暫存器對照

返回值型別 暫存器 說明

bit c(標誌位) 由具體標誌位返回

char/unsigned char 1byte指標 r7 單位元組由r7返回

int/unsigned int 2byte指標 r6&r7 雙位元組由r6和r7返回,高位在r6中,低位在r7中

long、unsigned long r4~r7 高位在r4中,低位在r7中

float r4~r7 32bit ieee格式,指數和符號位在r7中

通用指標 r1~r3 儲存型別在r3中,高位在r2中,低位在r1中

c語言呼叫彙編的方法

c部分很簡單,檔名隨便,如main.c 複製 如下 include include void dectobin long dec,char b 宣告外部彙編函式 int main 本人使用的是mac 64位系統,所以64bit暫存器為r開頭,如 kmabupbrax rbx等。c呼叫的 如下,儲存的...

c呼叫彙編函式 1

guang guang laptop temp h ls hello hello.o hello.s main.c main.o hello.s.global hello hello movl 4,eax movl 1,ebx movl hello,ecx movl 30,edx int 0x80 ...

c程式呼叫彙編函式

c程式呼叫彙編函式 程式例項 按鍵控制led燈 main.c static int printf const char format,int const char format,0xc3e11ad0 void start led key.s define gpm4con 0x110002e0 def...