Цитата(aaarrr @ Sep 29 2007, 21:50)

А зачем Вы используете "^", можно поинтересоваться? И если это делается осмысленно, зачем R0?
C:\Program Files\ATMEL Corporation\AT91-ISP v1.4\SAM-BA v2.0\monitors\SAM-BA-NandFlash\bin_ads\cstartup_arm.s
(использую исходный код NAND монитора SAM-BЫ)
;------------------------------------------------------------------------------
;- Area Definition
;-----------------
;- Must be defined as function to put first in the code as it must be mapped
;- at offset 0 of the flash EBI_CSR0, ie. at address 0 before remap.
;------------------------------------------------------------------------------
AREA reset, CODE, READONLY
;------------------------------------------------------------------------------
;- Define the entry point
;------------------------
EXPORT __ENTRY
__ENTRY
;-------------------
;- The reset handler
;-------------------
InitReset
;-------------------------------------
;- Setup the stack for supervisor mode
;-------------------------------------
ldr sp, = TOP_OF_MEMORY ; Init stack SVC
stmfd sp!, {lr}
;------------------------------------------------------------------------------
;- Branch on C code Main function (with interworking)
;----------------------------------------------------
;- Branch must be performed by an interworking call as either an ARM or Thumb
;- main C function must be supported. This makes the code not position-
;- independant. A Branch with link would generate errors
;------------------------------------------------------------------------------
IMPORT main
bl main
;------------------------------------------------------------------------------
;- Jump back
;------------------------------------------------------------------------------
ldmia sp!, {r0}^
bx r0
END
Собственно в асме не силён. Затрудняюсь ответить. По смыслу либо восстанавливается стек, либо адрес возврата на SAM-BУ в ROM.. (ИМХО )) )