国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在C語(yǔ)言中調(diào)用匯編語(yǔ)言的函數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了在C語(yǔ)言中調(diào)用匯編語(yǔ)言的函數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在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代碼,并加入工程中。

;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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 嵌入式:ARM匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)教程

    嵌入式:ARM匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)教程

    ① 合理地分配存儲(chǔ)器資源,將前述的目標(biāo)系統(tǒng)‘?dāng)?shù)據(jù)結(jié)構(gòu)模型’表示到各存儲(chǔ)器單元。 ② CPU寄存器數(shù)量有限,在程序中,大多數(shù)操作都要使用寄存器;并且有的操作使用特定的寄存器(如堆棧操作使用SP/R13等),程序中要合理分配各寄存器的用途。 用計(jì)算機(jī)語(yǔ)言,對(duì)數(shù)據(jù)結(jié)

    2023年04月23日
    瀏覽(41)
  • 匯編調(diào)用C語(yǔ)言定義的全局變量

    匯編調(diào)用C語(yǔ)言定義的全局變量

    在threadx移植中,系統(tǒng)的systick通過了宏定義的方式定義,很難對(duì)接庫(kù)函數(shù)的時(shí)鐘頻率,不太利于進(jìn)行維護(hù) 所以在C文件中自己定義了一個(gè)systick_Div的變量,通過宏定義方式設(shè)定systick的時(shí)鐘頻率 在匯編下要加載這個(gè)systick分頻系數(shù) 方法: 總結(jié):對(duì)匯編指令需要進(jìn)一步熟悉。

    2024年02月15日
    瀏覽(21)
  • Keil MDK配置ARM匯編/C語(yǔ)言混合開發(fā)環(huán)境

    Keil MDK配置ARM匯編/C語(yǔ)言混合開發(fā)環(huán)境

    1. 安裝Keil MDK 安裝方法這里不再說明,懂得都懂!?? 2. 安裝ARM開發(fā)包 在Keil MDK5之后,不再原生支持ARM7/9,需要自行安裝軟件包,鏈接在這,注意安裝與自己MDK版本對(duì)應(yīng)的那個(gè)包 我的版本是5.18,下載之后傻瓜式安裝,因?yàn)樗鼤?huì)自動(dòng)檢測(cè)你MDK所在的位置。 3. 新建工程 注意:選

    2024年02月02日
    瀏覽(28)
  • 用ARM進(jìn)行匯編語(yǔ)言編程(4)帶有分支的循環(huán)和條件指令執(zhí)行

    用ARM進(jìn)行匯編語(yǔ)言編程(4)帶有分支的循環(huán)和條件指令執(zhí)行

    ARM 編程模擬器網(wǎng)站地址: 在arm里也有和高級(jí)語(yǔ)言一樣的for和while循環(huán),可以根據(jù)條件來判斷是否執(zhí)行 首先我們創(chuàng)建一個(gè)data標(biāo)簽,然后在里面寫一個(gè)分支,存放一些數(shù)值,然后使這些存放的數(shù)值依次相加 然后我們要將list加載到內(nèi)存里 然后使用直接尋址,將r0寄存器里的值放

    2024年02月06日
    瀏覽(37)
  • 匯編語(yǔ)言(32位除法、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),奇偶校驗(yàn),ascii轉(zhuǎn)換,功能號(hào)調(diào)用)

    匯編語(yǔ)言(32位除法、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),奇偶校驗(yàn),ascii轉(zhuǎn)換,功能號(hào)調(diào)用)

    1)順序結(jié)構(gòu):編寫一個(gè)32位無符號(hào)數(shù)除法的程序。要求將存放在NUM1中的32位無符號(hào)數(shù)與存放在NUM2中的16位無符號(hào)數(shù)相除,結(jié)果存放在NUM3和NUM4中。 根據(jù)題目要求,應(yīng)把存放在數(shù)據(jù)段內(nèi)的被除數(shù)NUM1定義為32位,除數(shù)NUM2定義為16位,商N(yùn)UM3定義為16位,余數(shù)NUM4定義為16位。 2)分支

    2024年02月06日
    瀏覽(26)
  • 匯編語(yǔ)言實(shí)驗(yàn)8:BIOS/DOS功能調(diào)用與宏指令程序設(shè)計(jì)

    匯編語(yǔ)言實(shí)驗(yàn)8:BIOS/DOS功能調(diào)用與宏指令程序設(shè)計(jì)

    掌握匯編語(yǔ)言程序設(shè)計(jì)的基本方法和技能 掌握匯編語(yǔ)言源程序的編輯匯編連接和執(zhí)行的完整過程 通過上機(jī)操作理解宏定義、宏調(diào)用、宏展開的概念,熟練運(yùn)用宏功能編寫程序 掌握BIOS/DOS基礎(chǔ)功能的實(shí)現(xiàn)調(diào)用方法 理解常用的DOS功能調(diào)用的基本使用,能熟練運(yùn)用1號(hào),2號(hào),9號(hào),

    2024年02月03日
    瀏覽(45)
  • 匯編中的標(biāo)簽與C語(yǔ)言的函數(shù)對(duì)比與區(qū)別

    匯編語(yǔ)言中的標(biāo)簽(Labels)與C語(yǔ)言中的函數(shù)在程序結(jié)構(gòu)和功能上有所不同,它們分別對(duì)應(yīng)著不同級(jí)別的抽象和作用: 標(biāo)簽是匯編語(yǔ)言中用于定義代碼位置的符號(hào),通常是一個(gè)名稱后跟一個(gè)冒號(hào)(如 measure_pwm_freq_start: )。 標(biāo)簽相當(dāng)于程序的一個(gè)地址標(biāo)記,當(dāng)執(zhí)行到j(luò)mp、call等

    2024年01月24日
    瀏覽(24)
  • 嵌入式C語(yǔ)言自我修養(yǎng)筆記1-ARM體系結(jié)構(gòu)與編譯運(yùn)行

    嵌入式C語(yǔ)言自我修養(yǎng)筆記1-ARM體系結(jié)構(gòu)與編譯運(yùn)行

    ARM 體系結(jié)構(gòu) ARM 體系結(jié)構(gòu) ARM 相對(duì)精簡(jiǎn)指令集 RISC 還有如下區(qū)別 ● ARM 有桶型移位寄存器,單周期內(nèi)可以完成數(shù)據(jù)的各種移位操作。 ● 并不是所有的 ARM 指令都是單周期的。 ● ARM 有 16 位的 Thumb 指令集,是 32 位 ARM 指令集的壓縮形式,提高了代碼密度 ● 條件執(zhí)行:通過指令

    2024年02月07日
    瀏覽(100)
  • C語(yǔ)言之反匯編查看函數(shù)棧幀的創(chuàng)建與銷毀

    C語(yǔ)言之反匯編查看函數(shù)棧幀的創(chuàng)建與銷毀

    函數(shù)棧幀是用于在計(jì)算機(jī)程序中實(shí)現(xiàn)函數(shù)調(diào)用的一種數(shù)據(jù)結(jié)構(gòu)。在函數(shù)調(diào)用過程中,每個(gè)函數(shù)都需要在內(nèi)存中創(chuàng)建一個(gè)棧幀,用于存儲(chǔ)局部變量、返回地址和參數(shù)等。 具體來說,函數(shù)棧幀通常包含以下部分: 局部變量表:存儲(chǔ)函數(shù)的局部變量,包括基本數(shù)據(jù)類型(如整數(shù)、

    2024年01月23日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包