memset_arm.s(26): error: A1163E: Unknown opcode |.text|,CODE , expecting opcode or Macro
memset_arm.s: 26 00000000 AREA |.text|,CODE
memset_arm.s: ^
memset_arm.s(29): error: A1355U: A Label was found which was in no AREA
memset_arm.s: 29 00000000 ALIGN
---------------------------------------------------------------------------------
我做了个测试,写了两个简单的.h和.c,用Keil生成汇编文件给你参考下:
arm_memset.h:
-------------------------
#ifndef ARM_MEMSET_H
#define ARM_MEMSET_H
void arm_memset16(unsigned short* dst, unsigned short value, int count);
void arm_memset32(unsigned int* dst, unsigned int value, int count);
#endif
--------------------------
arm_memset.c:
--------------------------
#include "arm_memset.h"
void arm_memset16(unsigned short* dst, unsigned short value, int count)
{
while (count--)
*dst++ = value;
}
void arm_memset32(unsigned int* dst, unsigned int value, int count)
{
while (count--)
*dst++ = value;
}
----------------------------
生成的汇编文件:
THUMB
AREA ||i.arm_memset16||, CODE, READONLY, ALIGN=1
arm_memset16 PROC
;;;2
;;;3 void arm_memset16(unsigned short* dst, unsigned short value, int count)
000000 1e52 SUBS r2,r2,#1
;;;4 {
;;;5 while (count--)
000002 d303 BCC |L1.12|
|L1.4|
;;;6 *dst++ = value;
000004 f8201b02 STRH r1,[r0],#2
000008 1e52 SUBS r2,r2,#1 ;5
00000a d2fb BCS |L1.4|
|L1.12|
;;;7 }
00000c 4770 BX lr
;;;8
ENDP
AREA ||i.arm_memset32||, CODE, READONLY, ALIGN=1
arm_memset32 PROC
;;;8
;;;9 void arm_memset32(unsigned int* dst, unsigned int value, int count)
000000 1e52 SUBS r2,r2,#1
;;;10 {
;;;11 while (count--)
000002 d303 BCC |L2.12|
|L2.4|
;;;12 *dst++ = value;
000004 f8401b04 STR r1,[r0],#4
000008 1e52 SUBS r2,r2,#1 ;11
00000a d2fb BCS |L2.4|
|L2.12|
;;;13 }
00000c 4770 BX lr
ENDP