ARM Program counter error

Status
Not open for further replies.

kmegamind

Junior Member level 1
Joined
Oct 2, 2012
Messages
18
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,283
Location
Alexandria , Egypt.
Activity points
1,406
I have this line in my code :

Code:
MOV  PC, r14

It gives an error :
warning: A1608W: MOV pc,<rn> instruction used, but BX <rn> is preferred
So i change it to :


Code:
MOV  BX, r14

It gave this :

error: A1647E: Bad register name symbol, expected Integer register

help please
 

Code:
MOV  PC, r14

It gives an error :
warning: A1608W: MOV pc,<rn> instruction used, but BX <rn> is preferred

First of all, it was a warning, not an error message, there is a significant difference.

During compilation or assembly, an error will usually prevent completion, while a warning will not.

The warning alerts the programmer as to a possible issue or in this case, the use of a deprecated/improper syntax and may suggest a more acceptable method.

The following line of assembly:

Code:
MOV  PC, r14

Indicates moving the contents of r14, the next address, into the Program Counter (PC), which the Assembler views as equivalent to the Branch and Exchange (BX) instruction:

Code:
BX r14


So i change it to :

Code:
MOV  BX, r14

It gave this :

error: A1647E: Bad register name symbol, expected Integer register

In this case, incorrect syntax caused the issuance of an error.

As the following line:

Code:
MOV  BX, r14

Incorrectly combines two operations/instructions, which is why the Assembler complained about expecting an integer register and instead you gave it another instruction (BX).

The correct syntax would have been:

Code:
BX  r14

What exactly are you attempting to accomplish with the following line?

Code:
MOV  PC, r14

I'm not sure it would yield the expected results.

Until you are quite familiar with ARM assembly, I suggest you refrain from referencing r13, r14 and r15 as these registers can and do have special purpose.



BigDog
 
Thank you for this explanation.
i am just starting to learn ARM so i am running the example programs i find in the book i am learning from
So when i run this code:
Code:
 AREA  Hex_Out,CODE,READONLY
SWI_WriteC EQU &0 
SWI_Exit  EQU &11  
ENTRY 
 LDR r1,  VALUE  
 BL HexOut 
 SWI SWI_Exit 
VALUE DCD  &12345678  
HexOut MOV  r2, #8  
LOOP MOV  r0, r1, LSR #28  
 CMP r0, #9   
 ADDGT r0, r0, #"A"-10
 ADDLE r0, r0, #"0" 
 SWI SWI_WriteC 
 MOV r1, r1, LSL #4 
 SUBS r2, r2, #1  
 BNE LOOP 
 MOV  pc, r14 
 END

i get the warning i mentioned and the following two errors :

testing.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
testing.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.


I couldn't find any help regarding those two errors so i thought the PC warning thing caused the assembler to stop building or something.
May you help me with these errors ?
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…