使用keil IDE将子例程放置在arm组件中的单独文件中

时间:2014-08-11 05:22:58

标签: assembly arm cortex-m3 keil

我是使用Keil 4进行ARM程序集编程的新手,我一直在尝试在汇编文件中组装两个子程序。其中一个子程序调用另一个。

调用(分支)放在同一文件中的子程序有效,但是,如果一个子程序放在一个单独的文件中,则会出现以下错误消息

file2.s(8): error: A1163E: Unknown opcode SUBROUTE , expecting opcode or Macro

代码附在

下面

文件1
;;指令          PRESERVE8          拇指          统一的

      AREA    RESET, DATA, READONLY
      EXPORT  __Vectors
      __Vectors 
      DCD  0x20001000     ; stack pointer value when stack is empty
      DCD  Reset_Handler  ; reset vector
      ALIGN

    AREA    MYCODE, CODE, READONLY
    IMPORT SUBROUTE 
    ENTRY
    EXPORT Reset_Handler 
    Reset_Handler

                 MOV R1, #0x0A      ; Set loop counter
                 MOV R0,#00         ;intilaize resultant register

      loop1 CBZ R1,FINISH       ; if loop counter = 0 then exit the loop
      BL     SUBROUTE
      B loop1           ; next loop         
      FINISH    B FINISH            ; keep looping 
      END                   ; end of program

文件2:

  AREA   subroutine, CODE, READONLY
          EXPORT SUBROUTE
 SUBROUTE   ADD R0,R1           ; Addition opertaion
            SUB R1, #1          ; loop counter decrement
            BX lr
            END

1 个答案:

答案 0 :(得分:2)

Armasm标签必须从第一列开始。确保在SUBROUTEFINISH之前没有前导空格/标签位于定义它们的行上。另一方面,指令(如AREAIMPORT)不能从第一列开始,并且必须有一些前导空格。