Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 9 (The Stack and Procedures). 1 Lecture Outline Introduction The Stack The PUSH Instruction The POP Instruction Terminology of Procedures INDEC.

Similar presentations


Presentation on theme: "Lecture 9 (The Stack and Procedures). 1 Lecture Outline Introduction The Stack The PUSH Instruction The POP Instruction Terminology of Procedures INDEC."— Presentation transcript:

1 Lecture 9 (The Stack and Procedures)

2 1 Lecture Outline Introduction The Stack The PUSH Instruction The POP Instruction Terminology of Procedures INDEC / OUTDEC procedures

3 Introduction 2 The stack segment of a program is used for temporary storage of data and addresses. PUSH and POP instructions are used to add and remove words from the stack.

4 3 The Stack A stack is a one-dimensional data structure. Items are added and removed from one end of the structure; that is, it processes in a “last-in-first-out” manner. A program must set aside a block of memory to hold the stack. Ex:.STACK 100H When the program is assembled and loaded in memory: SS will contain the segment number of the stack segment. SP is initialized to 100H, which represents the empty stack position. When the stack is not empty, SP contains the offset address of the top of the stack.

5 4 The PUSH Instruction To add a new word to the stack we PUSH it on. Syntax: PUSH source Execution of PUSH causes the following to happen: SP is decreased/decremented by 2. A copy of the source content is moved to the address specified by SS:SP. The source is unchanged. 16-bit register or memory location

6 5 The PUSH Instruction Offset 00F8 00FA 00FC 00FE 0100 Empty Stack SP 12345678 AXBX 1234 Offset 00F8 00FA 00FC 00FE 0100 After PUSH AX SP 1234 Offset 00F8 00FA 00FC 00FE 0100 AFTER PUSH BX SP5678

7 6 The POP Instruction To remove the top item from the stack, we POP it. Syntax: POP destination Execution of POP causes the following to happen: The content of SS:SP (the top of the stack) is moved to the destination. SP is increased by 2. 16-bit register (except IP) or memory location

8 7 The POP Instruction FFFF 0001 CX DX 1234 Offset 00F8 00FA 00FC 00FE 0100 Stack SP5678 1234 Offset 00F8 00FA 00FC 00FE 0100 After POP CX SP 5678 0001 CX DX 5678 1234 Offset 00F8 00FA 00FC 00FE 0100 After POP DX SP 5678 1234 CX DX

9 8 Exercise 1 Write assembly code that uses the stack operations to swap the content of AX and DX. PUSH AX PUSH DX POP AX POP DX

10 9 Terminology of Procedures An assembly program can be structured as a collection of procedures. The MAIN procedure, contains the entry point to the program. To carry out a task, the main procedure calls one of the other procedures. It is also possible for these procedures to call each other, or for a procedure to call itself. When one procedure calls another, control transfers to the called procedure and its instructions are executed; the called procedure usually returns control to the caller at the next instruction after the call statement.

11 15 Procedure Declaration Syntax (except the main procedure): name PROC type ; body of the procedure RET name ENDP The optional operand type is: NEAR: the statement that calls the procedure is in the same segment as the procedure itself, or FAR: the statement that calls the procedure is in a different segment. If type is omitted, NEAR is assumed. Name is the user-defined name of the procedure. The RET (return) instruction causes control to transfer back to the calling procedure

12 10 Communication Between Procedures Assembly language procedures do not have parameter lists. It’s up to the programmer to devise a way for procedures to communicate. E.g. If there are only few input and output values, they can be placed in registers.

13 11 The CALL Instruction To invoke a procedure, the CALL instruction is used.

14 12 The CALL Instruction Offset address 0010 0012 0200 Code segment MAIN PROC CALL PROC1 next instruction PROC1 PROC first instruction RET Offset address 00FE 0100 Stack segment IP SP Before CALL Offset address 0010 0012 0200 Code segment MAIN PROC CALL PROC1 next instruction PROC1 PROC first instruction RET Offset address 00FE 0100 Stack segment IP SP After CALL 0012

15 13 The RET Instruction Offset address 0010 0012 0200 0300 Code segment MAIN PROC CALL PROC1 next instruction PROC1 PROC first instruction RET Offset address 00FE 0100 Stack segment IP SP Before RET Offset address 0010 0012 0200 0300 Code segment MAIN PROC CALL PROC1 next instruction PROC1 PROC first instruction RET Offset address 00FE 0100 Stack segment IP SP After RET 0012

16 14 INDEC / OUTDEC Procedures procedures used to read and print decimal data To invoke the two procedures, use CALL instruction inside the MAIN PROC. Example CALL INDEC. CALL OUTDEC

17 15 INDEC / OUTDEC Procedures INDEC Read character input from user and convert it to decimal stored in AX register Code of INDEC exist in file PGM9_3.ASM OUTDEC Display the decimal number in register AX to output screen Code of OUTDEC exist in file PGM9_1.ASM Include the two files using INCLUDE directive Syntax: INCLUDE C:\ASM\ PGM9_3.ASM INCLUDE C:\ASM\ PGM9_1.ASM

18 16 INDEC / OUTDEC Procedures OUTDECPROC PUSHAX PUSHBX PUSHCX PUSHDX ORAX,AX JGE@END_IF1 PUSHAX MOVDL,'-' MOVAH,2 INT21H POPAX NEGAX @END_IF1: XORCX,CX MOVBX,10D @REPEAT1: XORDX,DX DIVBX PUSHDX INCCX ORAX,AX JNE@REPEAT1 MOVAH,2 @PRINT_LOOP: POPDX ORDL,30H INT21H LOOP@PRINT_LOOP POPDX POPCX POPBX POPAX RET OUTDECENDP

19 17 INDEC / OUTDEC Procedures INDECPROC ;;;;;;;;;;;;;;;;;;; READ DECIMAL NUMBER;;;;;;;;;;;; PUSHBX PUSHCX PUSHDX @BEGIN: MOVAH,2 MOVDL,'?' INT21H XORBX,BX XORCX,CX MOVAH,1 INT21H CMPAL,'-' JE@MINUS CMPAL,'+' JE@PLUS JMP@REPEAT2 @MINUS: MOVCX,1 @PLUS: INT21H @REPEAT2: CMPAL,'0' JNGE@NOT_DIGIT CMPAL,'9' JNLE@NOT_DIGIT ANDAX,000FH PUSHAX MOVAX,10 MULBX POPBX

20 ADDBX,AX MOVAH,1 INT21H CMPAL,0DH JNE@REPEAT2 MOVAX,BX ORCX,CX JE@EXIT NEGAX @EXIT: POPDX POPCX POPBX RET @NOT_DIGIT: MOVAH,2 MOVDL,0DH INT21H MOVDL,0AH INT21H JMP@BEGIN INDECENDP ;;;;;;;;;;;;;;;;;;;;;;;;;END READ;;;;;;;;; INDEC / OUTDEC Procedures Cont… 18

21 MODELSMALL.STACK100H.CODE MAINPROC ----------------------------------------- CALL INDEC CALL OUTDEC ----------------------------------------- MOVAH, 4CH; exit to DOS INT 21H MAINENDP INCLUDE C:ASM\PGM9_1.ASM INCLUDE C:ASM\PGM9_3.ASM ENDMAIN INDEC / OUTDEC Procedures MAIN PROGRAM 19


Download ppt "Lecture 9 (The Stack and Procedures). 1 Lecture Outline Introduction The Stack The PUSH Instruction The POP Instruction Terminology of Procedures INDEC."

Similar presentations


Ads by Google