1 / 18

16.317 Microprocessor Systems Design I

16.317 Microprocessor Systems Design I. Instructor: Dr. Michael Geiger Fall 2013 Lecture 16 Subroutines and stack details. Lecture outline. Announcements/reminders HW 4 due 10/16 Exam 1 regrade requests due today No lecture Monday, 10/14 (Columbus Day) Review Jump instructions

sheba
Download Presentation

16.317 Microprocessor Systems Design I

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. 16.317Microprocessor Systems Design I Instructor: Dr. Michael Geiger Fall 2013 Lecture 16 Subroutines and stack details

  2. Lecture outline • Announcements/reminders • HW 4 due 10/16 • Exam 1 regrade requests due today • No lecture Monday, 10/14 (Columbus Day) • Review • Jump instructions • Loop instructions • Today’s lecture • Subroutines • Basics of stack usage Microprocessors I: Lecture 16

  3. Review: jump, loop • Two general types of jump • Unconditional: JMP <target> • Always go to target address • Conditional: Jcc <target> • Go to target address if condition true • Loop instructions • Combines CX decrement with JNZ test • May add additional required condition • LOOPE/LOOPZ: loop if ((CX != 0) && (ZF == 1)) • LOOPNE/LOOPNZ: loop if (CX != 0) && (ZF == 0)) Microprocessors I: Lecture 16

  4. Loop example • Describe the operation of the following program (Example 6.15-6.16). • What is the final value of SI if the 15 bytes between 0A001 and 0A00F have the following values? • 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E MOV DL, 05 MOV AX, 0A00 MOV DS, AX MOV SI, 0000 MOV CX, 000F AGAIN: INC SI CMP [SI], DL LOOPNE AGAIN Microprocessors I: Lecture 16

  5. Subroutine: special program segment that can be “called” from any point in program Implements HLL functions/procedures Written to perform operation that must be repeated in program Actual subroutine code only written once Subroutines Microprocessors I: Lecture 16

  6. Subroutine operation • When called, address of next instruction saved • State may need to be saved before call • Parameters can be passed • Control of program transferred to subroutine • After subroutine finished, return instruction goes back to saved address Microprocessors I: Lecture 16

  7. 80386 subroutines • Specify starting point with pseudo-op • <name> PROC NEAR  same segment • <name> PROC FAR  different segment • May save state/allocate variables at start • If so, will restore at end of subroutine • Last instruction returns to saved address • Always RET • Pseudo-op after RET indicates routine end • <name> ENDP Microprocessors I: Lecture 16

  8. Subroutine example SQUARE PROC NEAR PUSH AX ; Save AX to stack MOV AL, BL ; Copy BL to AL IMUL BL ; AX = BL * AL ; = original BL squared MOV BX, AX ; Copy result to BX POP AX ; Restore AX RET SQUARE ENDP Microprocessors I: Lecture 16

  9. Call/return • Calling subroutine: CALL <proc> • Address of next instruction saved on stack • Either IP (near) or CS, IP (far) • <proc> can be 16- or 32-bit label/immediate, register, memory operand • 16-bit immediate added to IP • 16-bit register/memory replaces IP • 32-bit values replace CS/IP • Ending subroutine: RET • Saved address restored to IP (& CS if needed) Microprocessors I: Lecture 16

  10. Example • Assuming AX = 2 and BX = 4, show the results of the following sequence (Ex. 6.11): • Assume the addresses of the first three instructions are CS:0005, CS:0008, and CS:0009, respectively CALL SUM RET ; End main function SUM PROC NEAR MOV DX, AX ADD DX, BX RET SUM ENDP Microprocessors I: Lecture 16

  11. Example results CALL SUM RET ; End main function SUM PROC NEAR MOV DX, AX DX = AX = 4 ADD DX, BX DX = DX + BX = 4 + 2 = 6 RET SUM ENDP Microprocessors I: Lecture 16

  12. Saving state • May need to save state before routine starts • Overwritten registers (that aren’t return values) • Flags • Placing data on stack: PUSH • Store data “above” current TOS; decrement SP • Stack grows toward lower addresses • New SP points to start of data just stored • Basic PUSH stores word or double word • Directly storing flags: PUSHF • Storing all 16-/32-bit general purpose registers: PUSHA/PUSHAD Microprocessors I: Lecture 16

  13. Restoring state • Removing data from TOS: POP • Data removed from TOS; SP incremented • Basic POP removes word/double word • Directly removing flags: POPF • Removing all 16-/32-bit general purpose registers: POPA/POPAD • POP instructions generally executed in reverse order of corresponding PUSH instructions Microprocessors I: Lecture 16

  14. Revisiting subroutine example SQUARE PROC NEAR PUSH AX ; Save AX to stack MOV AL, BL ; Copy BL to AL IMUL BL ; AL = BL * AL ; = original BL squared MOV BX, AX ; Copy result to BX POP AX ; Restore AX RET SQUARE ENDP Microprocessors I: Lecture 16

  15. Push All and Pop All Operations Microprocessors I: Lecture 16

  16. Stack examples • Assume initial state shown in handout • What is the resulting stack state of each of the following sequences? • PUSH BX PUSH AX • PUSH EBX PUSH EAX • PUSHA Microprocessors I: Lecture 16

  17. Solution • What is the resulting stack state of each of the following sequences? • PUSH BX PUSH AX • 4 bytes pushed to stack, so SP decremented by 4  ESP = 00001FFCH • AX is at top of stack; BX is below that • PUSH EBX PUSH EAX • 8 bytes pushed to stack, so SP decremented by 8  ESP = 00001FF8H • EAX is at top of stack; EBX is below that • PUSHA • 8 words = 16 bytes pushed to stack, so SP decremented by 16  ESP = 00001FF0H • As shown in slide 13, DI is at top of stack, followed by SI, BP, old SP, BX, DX, CX, and AX Microprocessors I: Lecture 16

  18. Final notes • Next time: • HLL  assembly translation • Reminders: • HW 4 due 10/16 • Exam 1 regrade requests due today • No lecture Monday, 10/14 (Columbus Day) Microprocessors I: Lecture 16

More Related