COURS 7.TXT
******************************************************************
* *
* 68000 ASSEMBLER COURSE ON ATARI ST *
* *
* by The Fierce Rabbit (from 44E) *
* *
* Lesson number 7 *
* *
******************************************************************
We now approach the seventh lesson in the series. The entire
course is in 2 series (well, at the time I'm typing these lines,
that's what is planned!), this one is the last of the first!
At the end of this one and if you have very carefully and very
scrupulously followed the previous 6 lessons, you should be
able to display images, save files etc...
But first let's go back to our stack and the question from the
previous lesson. Did you find the error?
Well look at the value of A7 before stacking $12345678 and
$23456, and compare it to the value at the end of the program. Alas!
it is not the same! Normal, if we count the stackings and
the unstackings, we realize that we have stacked 8
bytes more than we have unstacked. Indeed, since we have
retrieved our 2 numbers by first saving A7 in A0,
we did not touch A7 at the time of recovery.
Fortunately, though, because the routine return would have been modified!
Based on the principle of unstacking in reverse order, we must
therefore correct the stack once back from the subroutine. As we
have stacked by doing -(SP) we must add so that the stack becomes
as before. Having stacked 2 numbers of 4 bytes each,
we must add 8 bytes to the stack address to correct it
as it should be. We have already seen how to increase an
address, with ADDA.
It is therefore appropriate to add right after the line BSR AJOUTE an
addition on SP, by doing ADDA.L #8,SP (which reads ADD ADDRESS
LONG 8 STACK POINTER)
A call to a subroutine by passing parameters on the
stack will therefore typically be of the kind:
MOVE.W #$1452,-(SP)
MOVE.L #$54854,-(SP)
MOVE.L #THING,-(SP)
BSR TINKERING
ADDA.L #10,SP
We pass the word of value $1452 in the stack (modified thus
of 2 bytes), the long word of value $54854 in the stack (modified
of 4 bytes), the address spotted by the label THING in the stack
(modified of 4 bytes) then we go towards our subroutine. Upon
return correction of 2+4+4=10 bytes of the stack pointer to return
to the original state.
...
Back to ASM_Tutorial
Note: The translation provided here is a partial snippet of the larger technical text. Should you need further translation or any additional assistance regarding this content, please let me know!