導航:首頁 > 編程知識 > 如何在c51中調用匯編程序

如何在c51中調用匯編程序

發布時間:2025-09-17 09:13:56

① 51單片機,怎麼樣使得C語言與匯編語言結合起來我想在C語言里調用匯編語言函數。

首先寫個H文件,把匯編的函數申明在裡面
例如:
extern bit plus(iu8 *d_dat,iu8 *s_dat,u8 len);
然後,建立ASM文件,例如tool.asm
先指定存儲區
?PR?_plus?TOOL SEGMENT CODE
?PR?固定的,然後是函數名前+下劃線,?TOOL 是這個asm的名字,CODE是存儲區
然後向外申明函數
PUBLIC _plus
最後是函數體
RSEG ?PR?_plus?TOOL
_plus:
USING 0
。。。。
ret
參數傳遞,R7是第一個參數,R6是第二個。。。,如果不是char ,或參數是指針,那麼佔用多個Rn,
例如:
這個函數中,d_dat是R7,R6;s_dat是R5,R4;len是R3

② 關於51點單片機中匯編語言如何調用C的子程序

不太好辦,先用C51編寫出程序主體,在程序中加入#pragma src(*.a51)控制命令,或在工程項目窗口中設置「Generate Assembleer SRC File」和「Assemble SRC File」選項,編譯模塊文件,得到相應的a51文件,按要求改寫匯編代碼

③ 51單片機中匯編語言如何調用C的子程序

我的程序是KEIL編譯的,如下
先申明
EXTRN CODE (_Send_CRC) ;Send_CRC是C中的函數,匯編中加了_
調用的時候
LCALL _Send_CRC

如果要使回用C中的變答量,那麼CODE變成相應的DATA,XDATA等

④ 如何在64位的linux系統上使用匯編和C語言混合編程

編譯和鏈接的時候使用的指令:(AMD處理器,64位操作系統)
編譯鏈接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -c bar.c -o bar.o
3 ld -s -o foobar bar.o foo.o
匯編語言用nasm編寫並用nasm編譯器編譯,而C語言用的是gcc編譯,這些都沒有問題,但是在鏈接的時候出錯了,提示如下:
ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output
google了一下,意思就是nasm 編譯產生的是32位的目標代碼,gcc 在64位平台上默認產生的是64位的目標代碼,這兩者在鏈接的時候出錯,gcc在64位平台上默認以64位的方式鏈接。
這樣在解決的時候就會有兩種解決方案:
<1> 讓gcc 產生32位的代碼,並在鏈接的時候以32位的方式進行鏈接
在這種情況下只需要修改編譯和鏈接指令即可,具體如下:
32位的編譯鏈接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar.o
3 ld -m elf_i386 -s -o foobar foo.o bar.o
具體的-m32 和 -m elf_i386 請自行查閱gcc (man gcc)

如果你是高版本的gcc(可能是由於更新內核造成的),可能簡單的使用-m32 的時候會提示以下錯誤(使用別人的歷程,自己未曾遇到):
> In file included from /usr/include/stdio.h:28:0,
> from test.c:1:
> /usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
> compilation terminated.
這應該是缺少構建32 位可執行程序缺少的包,使用以下指令安裝:
sudo apt-get install libc6-dev-i386
此時應該就沒有什麼問題了。

⑤ 怎樣在單片機C代碼中加入匯編延時子程序

(1)、C51語言中調用匯編語言程序;
C51語言調用匯編語言程序要注意以下幾點:
1:在文件欄選中File Group和C51程序原文件,在配置文件選項中激活「產生匯編(SRC)文件,「編譯(SRC)文件」和「創建工程(目標)時包含」三個選項。
2:根據選擇的編譯模式,把相應的庫文件(如SMALL模式,庫文件為KEIL\C51\LIB\C51S.LIB)加入工程中。
3:在C51語言中必須聲明需要調用的函數為外部函數。extern void DELAY(void);
4:在匯編語言程序中必須聲明被調用子程序為公共子程序,在被調用的文件中還需要聲明此文件是可從新定位的。
PUBLIC DELAY,DEL
DELAYY SEGMENT CODE
RSEG DELAYY
實例如下:
C51語言文件:
#include "reg51.h"
extern void DELAY(void);
extern void DEL(void);
void main(void)
{
P1=0x00;
DELAY();
DEL();
P1=0xff;
}
匯編語言文件:
PUBLIC DELAY,DEL
DELAYY SEGMENT CODE
RSEG DELAYY

DELAY: MOV R2,#3H
DJNZ R2,$
RET
DEL: MOV R3,#03H
DJNZ R3,$
RET
END
(2)、C51語言中嵌入匯編程序;
在C51語言中嵌套使用匯編語言編寫程序要注意以下的幾個問題:
1:在文件欄選中File Group和C51程序原文件,在配置文件選項中激活「產生匯編(SRC)文件,「編譯(SRC)文件」和「創建工程(目標)時包含」三個選項。
2:根據選擇的編譯模式,把相應的庫文件(如SMALL模式,庫文件為KEIL\C51\LIB\C51S.LIB)加入工程中。
3:用#pragma asm,和#pragma endasm語句包含嵌入的匯編語言程序。
實例如下:
#include "reg51.h"
void delay(void);
void main(void)
{
void delay(void);
P1=0x00;
#pragma asm
MOV R3,#08H
DJNZ R3,$
#pragma endasm
P1=0xff;
}
void delay(void)
{
#pragma asm
MOV R4,#08H
DJNZ R4,$
#pragma endasm
}

閱讀全文

與如何在c51中調用匯編程序相關的資料

熱點內容
vbnet讀取xlsx文件 瀏覽:257
word2003公式編號右對齊 瀏覽:223
word文件夾怎麼樣可以全選 瀏覽:658
在大一編程跟不上怎麼辦 瀏覽:742
coreldraw文件如何導入3dmax 瀏覽:150
招標文件如何用word做密封頁 瀏覽:44
如何在c51中調用匯編程序 瀏覽:824
java字元串轉碼gbk 瀏覽:983
win怎麼打開隱藏文件夾選項 瀏覽:454
榮耀手機qq接收文件在哪個文件夾 瀏覽:708
messagebox的頭文件 瀏覽:100
java啟動線程處理 瀏覽:622
騰迅收藏的表情在哪個文件夾 瀏覽:388
為什麼excel的文件是word打開的 瀏覽:781
紅頭文件字體格式word 瀏覽:443
iis字體配置文件 瀏覽:285
少兒編程導師是做什麼的 瀏覽:593
當前的網路安全防禦技術有哪些 瀏覽:655
win如何重置用戶配置文件 瀏覽:178
java獲取cpu編號 瀏覽:960

友情鏈接