Let's look at an example where two parameters are passed to a subroutine via registers, and a value is returned in a register. Load the file clab62s.s:
* clab62s.s
* parameter passing via registers
ORG $0
DC.L $8000 Stack pointer value after a reset
DC.L START Program counter value after a reset
ORG $2000 Start at location 2000 Hex
START CLR.L D0 clear D0
MOVE.L #$1234,D2 non-zero value for illustration
MOVE.L #4,D1
LEA NUMBER,A0 put address of number in A0
BSR ADD_IT execute subroutine ADD_IT
BREAK done
* subroutine ADD_IT
* D0 is return value (16-bit number)
* D1 is an integer parameter
* A0 contains the address of a number (16 bit) in memory
* D2 is used locally
ADD_IT MOVE.L D2,-(A7) save working register on stack
CLR.L D2
MOVE.W (A0),D2 get number from memory
ADD.W D1,D2 add numbers
MOVE.W D2,D0 save return value
MOVE.L (A7)+,D2 restore working registers
RTS return to caller
NUMBER DC.W 13 number 13 stored in memory
Exercise.
ANU Engineering - ENGN3213