编写一简单ARM汇编程序段

现字符串的复制(提示:字符串以0作为结尾),源字符串的首地址存储在R1中,目标字符串的首地址存放于R0中。程序的每一个语句都必须写注释。

最简单的办法,你用C实现该功能,然后仿真运行可以查看生成的汇编代码。

C语言原型

void strCpy(char *pDst, const char *pSrc)

{

 while(*pSrc)

 {

  *pDst = *pSrc;

  pDst ++;

  pSrc ++;

 }

}

仿真编译结果

     8:         while(*pSrc) 
     9:         { 
0x00000EF0 E003      B        0x00000EFA
    10:                 *pDst = *pSrc; 
0x00000EF2 780A      LDRB     r2,[r1,#0x00]
0x00000EF4 7002      STRB     r2,[r0,#0x00]
    11:                 pDst ++; 
0x00000EF6 1C40      ADDS     r0,r0,#1
    12:                 pSrc ++; 
    13:         } 
0x00000EF8 1C49      ADDS     r1,r1,#1
     8:         while(*pSrc) 
     9:         { 
    10:                 *pDst = *pSrc; 
    11:                 pDst ++; 
    12:                 pSrc ++; 
    13:         } 
0x00000EFA 780A      LDRB     r2,[r1,#0x00]
0x00000EFC 2A00      CMP      r2,#0x00
0x00000EFE D1F8      BNE      0x00000EF2
    14: }

然后取出其中的汇编代码就行了

LOOP

 LDRB  R2, [R1]

 STRB  R2, [R0]

 

 ADDS R0, R0, #1

 ADDS R1, R1, #1

 LDRB R2, [R1]

 CMP  R2, #0

 BNE  LOOP

 BX  LR

 注释参考C语言函数

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答