Create a two-dimensional array at runtime: Difference between revisions
Content added Content deleted
Puppydrum64 (talk | contribs) No edit summary |
Puppydrum64 (talk | contribs) |
||
Line 10: | Line 10: | ||
=={{header|68000 Assembly}}== |
=={{header|68000 Assembly}}== |
||
The routine used to retrieve the input is left unimplemented. |
The routine used to retrieve the input is left unimplemented. |
||
⚫ | |||
<lang 68000devpac> |
|||
⚫ | |||
; Array setup |
; Array setup |
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
Line 70: | Line 69: | ||
;Loading a value is the same as storing it, except the operands in the last instruction are reversed, and MOVE.L #$00112233,D7 |
;Loading a value is the same as storing it, except the operands in the last instruction are reversed, and MOVE.L #$00112233,D7 |
||
;is omitted. |
;is omitted. |
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|||
; Destroying the array |
|||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|||
; The array is destroyed by storing something else in its location. If you really want to reset it to zero, you can |
|||
; do so with the following: |
|||
LEA ARRAY_POINTER_VARIABLE,A1 |
|||
MOVE.L (A1),A1 |
|||
MOVE.L -(A1),D7 |
|||
;get the array size into D7. Remember that the array's size was stored just before its data. |
|||
This value is potentially too large for a single DBRA, but it can be split up. |
|||
SWAP D7 |
|||
MOVE.W D7,D6 ;get the top half of D7 into D6. D6 will be the outer loop's DBRA value. |
|||
SWAP D7 |
|||
SUBQ.L #1,D7 ;D7 needs to be decremented by 1. D6 is fine the way it is. |
|||
MOVE.L (A0)+,D0 ;dummy move to increment the pointer back to the array base. |
|||
MOVEQ #0,D0 ;faster than MOVE.L #0,D0 |
|||
loop_destroyArray: |
|||
MOVE.L D0,(A0)+ |
|||
DBRA D7,loop_destroyArray ;loop using bottom 2 bytes of the array size as a loop counter |
|||
DBRA D6,loop_destroyArray ;decrement this, D7 is $FFFF each time execution gets here so this acts as a "carry" of sorts. |
|||
;if this value was 0 prior to the loop, the loop ends immediately.</lang> |
|||
=={{header|Ada}}== |
=={{header|Ada}}== |