1 / 17

68000 Stack-Related Instructions

68000 Stack-Related Instructions. PEA <EA> Push Effective Address Calculates an effective address <ea> and pushes it onto the stack pointed at by address register A7 (the stack pointer, SP). The difference between PEA and LEA LEA loads an effective address in any address register.

devorit
Download Presentation

68000 Stack-Related Instructions

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 68000 Stack-Related Instructions PEA <EA> Push Effective Address • Calculates an effective address <ea> and pushes it onto the stack pointed at by address register A7 (the stack pointer, SP). • The difference between PEA and LEA • LEA loads an effective address in any address register. • PEA pushes an effective address onto the stack. • PEA <EA> is equivalent to: LEA <EA>,Ai MOVEA.L Ai,-(A7) Where Ai is an address register other than A7 (A0-A6)

  2. The MOVE Multiple: MOVEM Instruction • This instruction saves or restores multiple registers. • Useful in subroutines to save the values of registers not used to pass parameters. MOVEM has two forms: MOVEM register_list,<ea> MOVEM <ea>,register_list • No effect on CCR. Example: Saving/restoring registers to from memory SUBR1 MOVEM D0-D7/A0-A6,SAVEBLOCK SAVE D0-D7/A0-A6 . . . MOVEM SAVEBLOCK,D0-D7/A0-A6 Restore D0-D7/A0-A6 RTS Example: Saving/restoring registers using the stack (preferred method). SUBR1 MOVEM D0-D7/A0-A6,-(SP) Push D0-D7/A0-A6 onto the stack . . . MOVEM (SP)+,D0-D7/A0-A6 Restore D0-D7/A0-A6 from the stack RTS

  3. Example: Power Calculation Subroutine • A subroutine is needed which accepts two integers as input parameters: • a base, B (a signed integer), Size = one byte (range: -128 £ B £ 127) • an exponent E (a positive integer) Size = one byte, • and, compute the function BE size of answer = long word Functional specification (pseudo code) of subroutine POWER: POWER (B, E) D1 = B ;input arguments, base D2 = E ;exponent, a positive integer initialize D3 to 1 ;answer initialized to 1 while D2 > 0 D3 = D1*D3 ;compute function using D2 = D2 - 1; ;continued product of base end POWER Return to calling program

  4. Subroutine Start Point POWER Effect on The Stack D1 = base D2 = exponent D3 = 1 SP during subroutine D3 = D3 * D1 D2 = D2 - 1 Return address Word Initial SP (and after return from subroutine) No Yes Return to calling program D2 = 0 ? Basic Flow Chart of Power

  5. POWER: Four Parameter Passing Cases • We’ll examine four assembly versions of the subroutine POWER and sample Main programs that calls it. • Each version uses a different parameter passing method: • Case 1: Parameter passing by value, using data registers. • Case 2: Parameter passing by reference, using address registers. • Case 3: Parameter passing by value, using the stack. • Case 4: Parameter Passing by reference, using the stack

  6. POWER Subroutine Example (Case 1) Parameter Passing by Value: Using Data Registers - Main Program - MAIN ORG $400 Main Program origin MOVEA.L #$07FFE,SP Initialize Stack Pointer MOVE.B B,D1 Put base number into D1 EXT.W D1 Sign extend base to word length CLR.W D2 Clear D2 before loading exponent MOVE.B E,D2 Put exponent number into D2 BSR POWER Call subroutine POWER LEA A,A5 put address of answer into A5 MOVE.L D3,(A5) save answer STOP #$2700 Done ORG $600 B DC.B 4 Base number stored here E DC.B 2 Exponent number stored here A DS.L 1 answer to be stored here

  7. POWER Subroutine Example (Case 1) Parameter Passing by Value: Using Data RegistersContinued - Subroutine ORG $800 Subroutine POWER origin POWER MOVE.L #1,D3 initialize result to 1 LOOP MULS D1,D3 multiply result with base SUB #1,D2 decrement power by one BNE LOOP and repeat as long as power > 0 RTS Done, return to calling program

  8. POWER Subroutine Example (Case 2)Parameter Passing by Reference: Using Address Registers- Main Program - MAIN ORG $400 Main Program origin MOVEA.L #$07FFE,SP Initialize Stack Pointer LEA B,A1 A1 points to base number LEA E,A2 A2 points to exponent BSR POWER Call subroutine POWER LEA A,A5 put address of answer into A5 MOVE.L D3,(A5) save answer in memory STOP #$2700 Done ORG $600 B DC.B 4 Base number stored here E DC.B 2 Exponent number stored here A DS.L 1 answer to be stored here

  9. POWER Subroutine Example (Case 2) Parameter Passing by Reference: Using Address Registers Continued - Subroutine ORG $800 Subroutine POWER origin POWER MOVE.B (A1),D1 copy base number to D1 EXT.W D1 Sign extend base to word length CLR.W D2 Clear D2 before loading exponent MOVE.B (A2),D2 copy exponent to D2 MOVE.L #1,D3 initialize result in D3 to 1 LOOP MULS D1,D3 multiply result D3 with base D1 SUB #1,D2 decrement power in D2 by one BNE LOOP and repeat as long as power > 0 RTS Done, return to calling program

  10. 68000 Addressing Modes Revisited:Address Register Indirect Addressing with Displacement • The addressing notation: d16(A0) or (d16,A0) • Refers to the address contained in register A0 plus a signed 16 bit displacement d16 • Some assembles accept only one of the above syntax forms. • Examples: MOVE.L (12,A4),D3 or MOVE.L 12(A4),D3 MOVE.W (-$4,A1),D0 or MOVE.W -$4(A1),D0

  11. POWER Subroutine Example (Case 3)Parameter Passing by Value: Using The Stack - Main Program - MAIN ORG $400 Main Program origin MOVEA.L #$07FFE,SP Initialize Stack Pointer MOVE.B B,D1 Put base number into D1 EXT.W D1 Sign extend base to word length MOVE.W D1,-(SP) push base B onto the stack CLR.W D2 Clear D2 before loading exponent MOVE.B E,D2 Put exponent number into D2 MOVE.W D2,-(SP) push exponent E onto the stack BSR POWER Call subroutine POWER MOVE.L (SP)+,D3 pop answer from stack resetting SP LEA A,A5 put address of answer into A5 MOVE.L D3,(A5) save answer STOP #$2700 Done ORG $600 B DC.B 4 Base number stored here E DC.B 2 Exponent number stored here A DS.L 1 answer to be stored here

  12. POWER Subroutine Example (Case 3) Parameter Passing by Value: Using The StackContinued - Subroutine - ORG $800 Subroutine POWER origin POWER MOVE.W 6(SP),D1 copy base from stack to D1 CLR.W D2 Clear D2 before loading exponent MOVE.B 4(SP),D2 copy exponent from to D2 MOVE.L #1,D3 initialize result in D3 to 1 LOOP MULS D1,D3 multiply result D3 with base D1 SUB #1,D2 decrement power in D2 by one BNE LOOP and repeat as long as power > 0 MOVE.L D3,4(SP) Push result onto the stack RTS Done, return to calling program

  13. Just before calling Subroutine Just after calling Subroutine Current SP Return address Current SP Exponent E 8 8 Exponent E Base B Base B Initial SP Initial SP Just before return to main Word Word Word Word Just before end of main Current SP Initial SP Return address Answer Current SP = Initial SP Effect on The Stack 4 (Case 3)

  14. POWER Subroutine Example (Case 4)Parameter Passing by Reference: Using The Stack - Main Program - MAIN ORG $400 Main Program origin MOVEA.L #$07FFE,SP Initialize Stack Pointer PEA B Push address of Base onto the stack PEA E Push address of Exponent onto the stack PEA A Push address of Answer onto the stack BSR POWER Call subroutine POWER LEA 12(SP),SP Stack clean-up: stack pointer reset STOP #$2700 Done ORG $600 B DC.B 4 Base number stored here E DC.B 2 Exponent number stored here A DS.L 1 answer to be stored here

  15. POWER Subroutine Example (Case 4) Parameter Passing by Reference: Using The StackContinued - Subroutine - ORG $800 Subroutine POWER origin POWER MOVEA.L 12(SP),A1 load Base address in A1 MOVEA.L 8(SP),A2 load Exponent address in A2 MOVEA.L 4(SP),A3 load Answer address address in A3 MOVE.B (A1),D1 Put base number into D1 EXT.W D1 Sign extend base to word length CLR.W D2 Clear D2 before loading exponent MOVE.B (A2),D2 copy exponent from to D2 MOVE.L #1,D3 initialize result in D3 to 1 LOOP MULS D1,D3 multiply result D3 with base D1 SUB #1,D2 decrement power in D2 by one BNE LOOP and repeat as long as power > 0 MOVE.L D3,(A3) Save result in memory RTS Done, return to calling program

  16. Just before calling Subroutine Just after calling Subroutine Current SP Return Address 0 Current SP +4 Answer Address Answer Address Initial SP Initial SP BSR POWER Exponent Address +8 Exponent Address PEA B PEA E PEA A Word Word Base Address +12 Base Address Effect on The Stack (Case 4)

  17. Just after stack clean-up in Main Current SP Answer Address 0 Initial SP Initial SP LEA 12(SP),SP +4 RTS Exponent Address Word Word +8 Base Address Current SP = +12 Effect on The Stack Just after return to main (Case 4)

More Related