Keil™, An ARM® Company

CARM User's Guide

Discontinued

Inline Assembly

The extended inline assembler merges assembly instructions with the assembly code generated by the compiler and creates an object file. There is nothing to assemble with the AARM Assembler.

Extended inline assembler blocks begin with the __asm keyword. For example:

__asm { instruction ; comment }

__asm {               ; open inline-assembly block
       instruction    ; comment
       .
       .
       .
      }               // close inline-assembly block

Where

instructionIs an instruction opcode.
commentIs a program comment.

For example:

int AddUp (
  int n,
  int *pTab)
{
if (n == 0) return(0);

__asm
  {
  mov   r0, #0       ; clear result
  ldav  r2, r0, pTab  ; R2=start of table
  ldav  r3, r0, n     ; R3=table length
  lsl   r3, r3, #2
lM:
  sub   r3, #4
  ldr   r1, [r2,r3]
  add   r0, r1
  cmp   r3, #0        ; end of table ?
  bgt   lM            ; loop if not eot
  }
// Return Value in R0
}

Note

  • __asm blocks may not be nested.
  • __asm blocks may not be used outside a function definition.
  • Labels may be defined in an __asm block and may be referenced by assembler B instructions or the C goto statement. An assembler label defined within an __asm block is equivalent to a C label defined in a C function. C labels may be referenced by B instructions in __asm blocks.

Related Knowledgebase Articles