arm學習筆記五 c c 與arm彙編混合程式設計

2021-09-01 15:42:35 字數 1200 閱讀 6229

混合程式設計

常見方式:

1 在c/c++程式中嵌入彙編指令

語法格式:

__asm

2 在匯程式設計序中訪問c/c++定義的全域性變數

示例**如下:

test.c

#include

int gvar_1=12;

extern asmdouble(void)

int main(void)

test.s

area asmfile,code,readonly

export asmdouble;宣告全域性引用標號

import gvar_1;引用

asmdouble

ldr r0,=gvar_1

ldr r1,[r0]

mov r2,#2

mul r3,r1,r2

str r3,[r0]

mov pc,lr

end

3 在c/c++程式中呼叫彙編函式

示例**如下:

test1.s

area asmfile,coce,readonly

export asm_strcpy;宣告全域性引用標號

asm_strcpy;函式名

loop:

ldrb r4,[r0],#1

cmp r4,#0

beq over

strb r4,[r1],#1

b loop

over:

mov pc,lr;用於函式返回

endtest1.c

#include

extern void asm_strcpy(const char *src,char *dest);

int main()

上面程式jni的味道有木有?

4 匯程式設計序中呼叫c/c++函式

示例**如下:

test2.c

int cfun(int a,int b,int c)

test2.s

export asmfile

area asmfile,code,readonly

import cfun;引用函式

entry;指定應用程式入口

mov r0,#11

mov r1,#22

mov r2,#33

bl cfun;返回

end

ARM彙編程式設計學習筆記(五)

硬體平台 使用友善之臂mini2440平台。軟體平台 keil 下面直接給出例子和注釋。關於使用keil的一些注意事項,以及除錯的注意事項,放在本文末給出。area led,code,readwrite 宣告乙個 段,可讀寫,名字為led entry 標記下面的指令為入口點 include regi...

arm學習筆記四 arm偽指令

arm偽指令 符號定義偽指令 定義arm匯程式設計序中的變數 對變數賦值以及定義暫存器的別名 定義全域性變數 gbla 全域性數字變數,初始化值為0 gbla 全域性變數名 示例 如下 gbla test1 定義全域性數字變數test1 test1 seta 0x123 將該變數賦值為0x123 g...

ARM學習筆記 三

異常 exceptions 當正常的程式執流程發生暫時的停止時,稱之為異常。處理中斷請求,處理前保留現場以便處理完後返回 處理器允許多個異常同時發生,它們會按固定的優先順序被處理。arm體系結構所支援的異常型別及其具體含義 按優先順序從高到低 1 復位 當處理器復位電平有效時產生復位異常 3 fiq...