我是使用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
答案 0 :(得分:2)
Armasm标签必须从第一列开始。确保在SUBROUTE
和FINISH
之前没有前导空格/标签位于定义它们的行上。另一方面,指令(如AREA
和IMPORT
)不能从第一列开始,并且必须有一些前导空格。