以下代码的环境是在MDK下的,其它环境不知道是否有用
GBLA 定义全局数字变量,并初始化为0
GBLL 定义全局的逻辑变量,并初始化为F(假)
GBLS 定义一个全局的字符串变量,并初始化为空
SETA 为数字变量赋值 Test1 SETA 0Xaa
SETL 为逻辑变量赋值 Test2 SETL {TRUE}
SETS 为字符串变量赋值 Test3 SETS "Testing"
控制语句
IF ELSE ENDIF
WHILE WEND
MACRO MEND
MEXIT
AREA指令
定义一个段,格式AREA 段名,属性1,属性2,。。。
EXPORT IMPORT
导出一个变量,引用一个变量
C中使用汇编代码
_ASM_
{
}
汇编实现的函数,在C语言中调用
例子
;汇编实现的函数
AREA asmfile, CODE, 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
END
//C语言调用
#include <stdio.h>
extern void asm_strcpy(const char *src, char *dest);
int main()
{
const char *s = "seasons in the sun";
char d[32];
asm_strcpy(s, d);
printf("source: %s", s);
printf("destination: %s",d);
return 0;
}
C语言实现的函数在汇编中调用
//c语言实现的函数
int cFun(int a, int b, int c)
{
return a + b + c;
}
;汇编调用
EXPORT asmfile
AREA asmfile, CODE, READONLY
IMPORT cFun
ENTRY
mov r0, #11
mov r1, #22
mov r2, #33
BL cFun
END