C語(yǔ)言中嵌入?yún)R編語(yǔ)言在本論壇中的集錦 論壇中的一些個(gè)人看法,我收集了一下,對(duì)錯(cuò)的話,大家見仁見智啊
下面是一個(gè)簡(jiǎn)單的例子,具體參數(shù)傳遞等,看書 $NOMOD51 ACC DATA 0E0H
P_VM EQU 0DFE2H P_PAGE EQU 0DFE0H NAME VM ?C_VM?VM SEGMENT CODE PUBLIC C_VM MOV ACC,#00H PUSH ACC PUSH ACC MOV DPTR,#P_VM MOV A,#0CH MOVX @DPTR,A NOP RET END 看了KEIL-C的手冊(cè),介紹可以這樣加入?yún)R編 #pragma asm; nop; nop; #pragma endasm; 在properties項(xiàng)使能對(duì)話框中的Generate Assembler SRC File和Assembler SRC File選項(xiàng)。 但為何我這樣做一直編譯通不過(guò)呢,它一直提示語(yǔ)法錯(cuò)誤。請(qǐng)大蝦指教
已經(jīng)搞定,是我在開始處定義了一個(gè)NOP,所以在使用寫ASM NOP時(shí)沖突才會(huì)報(bào)錯(cuò)。
請(qǐng)教:C語(yǔ)言調(diào)用匯編程序時(shí),如何使"Assembly output file"項(xiàng)激活請(qǐng)教:C語(yǔ)言調(diào)用匯編程序時(shí),創(chuàng)建匯編子程序框架時(shí),需要在Workbench菜單Project中選擇Option命令,并在其中的ICC430選項(xiàng)類中,對(duì)list設(shè)置:Assembly output file,可是這個(gè)選項(xiàng)時(shí)灰色的,如何才能激活?? C語(yǔ)言調(diào)用匯編程序不需要任何設(shè)置,只要將匯編的函數(shù)另外保存成一個(gè)獨(dú)立的匯編文件,并把該文件添加到工程中。在C語(yǔ)言中要聲明該匯編函數(shù)為外部函數(shù),當(dāng)然匯編的寫法要注意一些事項(xiàng),這要看一些相關(guān)的資料了。 我是想用c語(yǔ)言寫個(gè)框架,自動(dòng)生成匯編源程序,這樣就需要設(shè)置以上的選項(xiàng)。不過(guò)可以自己寫匯編的框架,就是以上你所說(shuō)的辦法,現(xiàn)在已經(jīng)好了,謝謝你!
keil c能編譯匯編程序嗎?keil c能編譯匯編程序嗎? 當(dāng)然可以了,內(nèi)嵌匯編語(yǔ)句就可以了#pragma src命令
c語(yǔ)言和匯編語(yǔ)言怎么連接誰(shuí)有c語(yǔ)言和匯編語(yǔ)言怎么連接的資料告訴我一下 建議: 用C語(yǔ)言做個(gè)框架,編譯后改為匯編框架,填入?yún)R編程序,一般可以保證和C語(yǔ)言兼容.注意格式 _asm { ....... ........ ...... }
如果你用KEIL C高版本的話可以分別編寫C和匯編的模塊,存成2個(gè)文件,分別添加到你的項(xiàng)目里,然后BUILD ALL就行了,系統(tǒng)集成環(huán)境回自動(dòng)聯(lián)接的。早期版本需要分別編譯生成OBJ文件,然后聯(lián)接就可以了。
用內(nèi)聯(lián)inline
請(qǐng)教keil c51中加入?yún)R編我在網(wǎng)上下載了一段程序,可怎么也不懂,調(diào)了半天也沒(méi)調(diào)通,請(qǐng)大家看看應(yīng)該怎么用呀,程序中的shiftR1是干什么的,還有x,ruturn(x)返回什么值? 這是下載的程序://<asm.h> #ifdef ASM unsigned long shiftR1(register unsigned long); #else extern unsigned long shiftR1(register unsigned long); #endif //end of asm.h //<asm.c> #define ASM #include <asm.h> #include <reg52.h> #pragma OT(4,speed) unsigned long shiftR1(register unsigned long x) { #pragma asm clr c mov a,r4 rrc a mov r4,a mov a,r5 rrc a mov r5,a mov a,r6 rrc a mov r6,a mov a,r7 rrc a mov r7,a #pragma endasm return(x); } //end of asm.c
x=x*2; x為4位長(zhǎng)整型。 r4567是放x的
在C51中插入?yún)R編問(wèn)題!請(qǐng)教各位: 1、我想在C51的程序中插入?yún)R編程序,然后用KEIL編譯。使用的格式是 asm(" ljmp 8000h ");。但在用keil編譯是提示有錯(cuò)。是否要include 什么頭文件。 2、在C51的源程序中能否進(jìn)行絕對(duì)地址的調(diào)用與跳轉(zhuǎn)。如;LCALL 8000H LJMP 8000H。
1;旌暇幊涛乙蚕雽W(xué)哦,不過(guò)我用WAVE試過(guò)幾次都不行,現(xiàn)在聽說(shuō)WAVE有指令能用了,不過(guò)我沒(méi)試過(guò)哦! 2。好象沒(méi)有哦,不如沒(méi)必要有呀,因?yàn)橛卸紱](méi)用!
KEILC51中是不能直接嵌入?yún)R編,C196就可以。
{f2)我使用的是wave,可以先用c51編個(gè)子程序接口(定好接口變量),再在a51下用匯編編子程序。最后用L51把這兩部分聯(lián)結(jié)起來(lái)(注意用參數(shù),避免程序重疊)。我沒(méi)用過(guò)什么特殊的頭文件,至于是否可以用長(zhǎng)跳轉(zhuǎn)語(yǔ)句不是很清楚。
絕對(duì)地址跳轉(zhuǎn)應(yīng)該不能用。
樓上的說(shuō)的對(duì),keilc51中要想嵌入?yún)R編,必須單獨(dú)寫一匯編的程序文件,然后和c51的程序文件連接編譯。其中還牽扯一些問(wèn)題,參數(shù)、程序名等,去老古那里看看吧
KEILC51中是可以直接嵌入?yún)R編,方法為#Pragma asm 匯編行 #pragma ,注意在寫匯編之后要記得加 END 這樣子就OK了。( 這樣我試過(guò)了,編譯時(shí)時(shí)需要勾選SRC項(xiàng),不過(guò)軟仿真執(zhí)行時(shí)遇到莫名其妙的問(wèn)題。如整個(gè)程序不從MAIN處執(zhí)行等,不知怎么回事?)
|