mirror of
https://github.com/irmen/prog8.git
synced 2024-09-10 09:54:32 +00:00
doc
This commit is contained in:
parent
be76d3321b
commit
07d6856485
17
reference.md
17
reference.md
@ -277,7 +277,21 @@ but instead assign a memory address to it:
|
|||||||
You call a subroutine like this:
|
You call a subroutine like this:
|
||||||
subroutinename_or_address [!] ( [arguments...] )
|
subroutinename_or_address [!] ( [arguments...] )
|
||||||
|
|
||||||
Normally, the registers are preserved when calling the subroutine and restored on return.
|
If the subroutine returns one or more values as results, you must use an assignment statement
|
||||||
|
to store those values somewhere:
|
||||||
|
outputvar1, outputvar2 = subroutine ( arg1, arg2, arg3 )
|
||||||
|
|
||||||
|
The output variables must occur in the correct sequence of return registers as specified
|
||||||
|
in the subroutine's definiton. It is possible to not specify any of them but the compiler
|
||||||
|
will issue a warning then if the result values of a subroutine call are discarded.
|
||||||
|
Even if the subroutine returns something in a register that already is the correct one
|
||||||
|
you want to keep, you'll have to explicitly assign the return value to that register.
|
||||||
|
If you omit it, no return value is stored at all (well, unless you call the subroutine without
|
||||||
|
register preserving, see the next paragraph.)
|
||||||
|
|
||||||
|
|
||||||
|
Normally, the registers are preserved when calling the subroutine and restored on return (except
|
||||||
|
the ones that explictly take result values from the call).
|
||||||
If you add a '!' after the name, no register preserving is done and the call essentially
|
If you add a '!' after the name, no register preserving is done and the call essentially
|
||||||
is just a single JSR instruction.
|
is just a single JSR instruction.
|
||||||
Arguments should match the subroutine definition. You are allowed to omit the parameter names.
|
Arguments should match the subroutine definition. You are allowed to omit the parameter names.
|
||||||
@ -290,7 +304,6 @@ essentially is the same as calling a subroutine and only doing something differe
|
|||||||
|
|
||||||
|
|
||||||
@todo support call non-register args (variable parameter passing)
|
@todo support call non-register args (variable parameter passing)
|
||||||
@todo support assigning call return values (so that you can assign these to other variables, and allows the subroutine call be an actual expression)
|
|
||||||
|
|
||||||
|
|
||||||
TODOS
|
TODOS
|
||||||
|
Loading…
Reference in New Issue
Block a user