Download presentation
Presentation is loading. Please wait.
Published byChrystal Johns Modified over 9 years ago
1
Procedures and the Stack Chapter 5 S. Dandamudi
2
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 2 Outline What is stack? Pentium implementation of stack Stack instructions Uses of stack Procedures Pentium instructions Parameter passing Register method Stack method Examples Call-by-value Call-by-reference Bubble sort Procedures with variable number of parameters Local variables Multiple source program modules Performance: Procedure overheads
3
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 3 What is a Stack? Stack is a last-in-first-out (LIFO) data structure If we view the stack as a linear array of elements, both insertion and deletion operations are restricted to one end of the array Only the element at the top-of-stack (TOS) is directly accessible Two basic stack operations: push (insertion) pop (deletion)
4
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 4 What is a Stack? (cont’d) Example Insertion of data items into the stack »Arrow points to the top-of-stack
5
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 5 What is a Stack? (cont’d) Example Deletion of data items from the stack »Arrow points to the top-of-stack
6
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 6 Pentium Implementation of the Stack Stack segment is used to implement the stack Registers SS and ESP (32-bit) or SP (16-bit) are used SS:ESP or SS:SP represents the top-of-stack Pentium stack implementation characteristics are: Only words (i.e., 16-bit data) or doublewords (i.e., 32- bit data) are saved on the stack, never a single byte Stack grows toward lower memory addresses (i.e., stack grows “downward”) Top-of-stack (TOS) always points to the last data item placed on the stack
7
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 7 Pentium Stack Instructions Pentium provides two basic instructions: push source pop destination source and destination can be a 16- or 32-bit general register a segment register a word or doubleword in memory source of push can also be an immediate operand of size 8, 16, or 32 bits
8
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 8 Pentium Stack Example - 1
9
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 9 Pentium Stack Instructions: Examples On an empty stack, the following sequence of push instructions push 21ABH push 7FBD329AH results in the stack state shown in (c) in the last figure On this stack, executing pop EBX results in the stack state shown in (b) in the next figure and the register EBX gets the value 7FBD329AH
10
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 10 Pentium Stack Example - 2
11
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 11
12
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 12 Additional Pentium Stack Instructions Stack Operations on Flags push and pop instructions cannot be used with the Flags register Two special instructions for this purpose are pushfd (push 32-bit flags) popfd (pop 32-bit flags) No operands are required Use pushfw and popfw for 16-bit flags (FLAGS)
13
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 13 Additional Pentium Stack Instructions (cont’d) Stack Operations on All General-Purpose Registers pushad and popad instructions can be used to save and restore the eight general-purpose registers EAX, ECX, EDX, EBX, ESP, EBP, ESI, and EDI Pushad pushes these eight registers in the above order (EAX first and EDI last) popad restores these registers except that ESP value is not loaded into the ESP register Use pushaw and popaw for saving and restoring 16-bit registers
14
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 14 Uses of the Stack Three main uses »Temporary storage of data »Transfer of control »Parameter passing Temporary Storage of Data Example: Exchanging value1 and value2 can be done by using the stack to temporarily hold data push value1 push value2 pop value1 pop value2
15
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 15 Uses of the Stack (cont’d) Often used to free a set of registers ;save AX & BX registers on the stack push AX push BX ; AX and BX registers can now be used mov AX,value1 mov BX,value2 mov value1,BX mov value2,AX ;restore AX & BX registers from the stack pop BX pop AX...
16
Assembly Example1 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 16 ; Assembly language that reads two characters ; and swap them using stack.586 option segment:use16.model small.stack 200h print_msg MACRO msg mov dx,offset msg mov ah,9 int 21h ENDM
17
Assembly Example1 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 17 read_char MACRO mov ah,1 int 21h sub ah,ah ENDM print_char MACRO char mov dl,char mov ah,2 int 21h ENDM
18
Assembly Example1 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 18.data msg1 db 'Enter 1st character:$' msg2 db 0ah,0dh,'Enter 2nd character:$' resmsg1 db 0ah,0dh,'1st character after swapping:$' resmsg2 db 0ah,0dh,'2nd character after swapping:$'.code.startup print_msg msg1 read_char push ax print_msg msg2
19
Assembly Example1 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 19 read_char push ax print_msg resmsg1 pop ax print_char al print_msg resmsg2 pop ax print_char al.exit end
20
Assembly Example2 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 20 ; Assembly language that reads n characters ; and print them in reverse order using stack.586 option segment:use16.model small.stack 200h print_msg MACRO msg mov dx,offset msg mov ah,9 int 21h ENDM
21
Assembly Example2 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 21 read_char MACRO mov ah,1 int 21h sub ah,ah push ax ENDM print_char MACRO pop dx mov ah,2 int 21h ENDM
22
Assembly Example2 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 22.data msg1 db 'How many characters do you want to enter?$' msg2 db 0ah,0dh,'Enter characters:',0ah,0dh,'$' resmsg db 0ah,0dh,'Characters you entered in reverse order:',0ah,0dh,'$' errormsg db 0ah,0dh,'Error,You should enter a number$' counter dw ?.code.startup print_msg msg1 read_char
23
Assembly Example2 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 23 pop counter sub counter,30h cmp counter,1 jl error cmp counter,9 jg error mov cx,counter print_msg msg2 read_loop: read_char loop read_loop print_msg resmsg mov cx,counter
24
Assembly Example2 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 24 print_loop: print_char loop print_loop exit:.exit error:print_msg errormsg jmp exit end
25
Assembly Example3 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 25 ; Assembly language that reads n numbers ; and then prints all even numbers in reverse ; order using stack print_msg MACRO msg mov dx,offset msg mov ah,9 int 21h ENDM
26
Assembly Example3 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 26 read_char MACRO mov ah,1 int 21h mov bl,al sub bl,30h sub bh,bh ENDM newline MACRO mov dl,0ah mov ah,2 int 21h mov dl,0dh int 21h ENDM
27
Assembly Example3 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 27 print_char MACRO pop dx add dl,30h mov ah,2 int 21h newline ENDM.586 option segment:use16.model small.stack 200h
28
Assembly Example3 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 28.data msg1 db 'How many numbers do you want to enter?$' msg2 db 0ah,0dh,'Enter numbers:',0ah,0dh,'$' resmsg db 0ah,0dh,'Even numbers you entered in reverse order:',0ah,0dh,'$' errormsg db 0ah,0dh,'Error,You should enter a number$' ecounter dw 0.code.startup print_msg msg1 read_char cmp bl,1 jl error
29
Assembly Example3 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 29 cmp bl,9 jg error mov cl,bl sub ch,ch print_msg msg2 read_loop: read_char test bl,01h jnz next push bx inc ecounter
30
Assembly Example3 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 30 next: newline loop read_loop print_msg resmsg mov cx,ecounter print_loop: print_char loop print_loop exit:.exit error:print_msg errormsg jmp exit end
31
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 31 Uses of the Stack (cont’d) Transfer of Control In procedure calls and interrupts, the return address is stored on the stack Our discussion on procedure calls clarifies this particular use of the stack Parameter Passing Stack is extensively used for parameter passing Our discussion later on parameter passing describes how the stack is used for this purpose
32
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 32 Procedures Two types Call-by-value »Receives only values »Similar to mathematical functions Call-by-reference »Receives pointers »Directly manipulates parameter storage
33
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 33 Pentium Instructions for Procedures Pentium provides two instructions: call and ret call instruction is used to invoke a procedure The format is call proc-name proc-name is the procedure name Actions taken during a near procedure call: ESP = ESP - 4 ; push return address SS:ESP = EIP ; onto the stack EIP = EIP + relative displacement ; update EIP to point to the procedure
34
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 34 Pentium Instructions for Procedures (cont’d) ret instruction is used to transfer control back to the calling procedure How will the processor know where to return? Uses the return address pushed onto the stack as part of executing the call instruction Important that TOS points to this return address when ret instruction is executed Actions taken during the execution of ret are: EIP = SS:ESP ; pop return address ESP = ESP + 4; from the stack
35
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 35 Pentium Instructions for Procedures (cont’d) We can specify an optional integer in the ret instruction The format is ret optional-integer Example: ret 8 Actions taken on ret with optional-integer are: EIP = SS:ESP ESP = ESP + 4 + optional-integer
36
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 36 How Is Program Control Transferred? Offset(hex) machine code(hex) main:.... 00000002E816000000call sum 0000000789C3mov EBX,EAX.... ; end of main procedure sum: 0000001D55 push EBP.... ; end of sum procedure avg:.... 00000028E8F0FFFFFFcall sum 0000002D89D8mov EAX,EBX.... ; end of avg procedure
37
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 37 Procedure Declaration in MASM The syntax of procedure declaration is the following: name PROC ; here goes the code ; of the procedure... RET name ENDP
38
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 38 Procedure Declaration in MASM Procedure is a part of code that can be called from your program in order to make some specific task. Procedures make program more structural and easier to understand. Generally procedure returns to the same point from where it was called.
39
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 39 Parameter Passing Parameter passing is different and complicated than in a high-level language In assembly language »You should first place all required parameters in a mutually accessible storage area »Then call the procedure Type of storage area used »Registers (general-purpose registers are used) »Memory (stack is used) Two common methods of parameter passing: »Register method »Stack method
40
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 40 Parameter Passing: Register Method Calling procedure places the necessary parameters in the general-purpose registers before invoking the procedure through the call instruction Examples: Example1: »call-by-value using the register method »a simple sum procedure Example2: »call-by-reference using the register method »string length procedure
41
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 41 Example1 : Register Method ; Assembly language that adds two numbers using ;call by value procedure.586 option segment:use16.model small print_msg Macro msg mov dx,offset msg mov ah,9 int 21h ENDM
42
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 42 Example1 : Register Method newline Macro mov dl,0ah mov ah,2 int 21h mov dl,0dh int 21h ENDM
43
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 43 Example1 : Register Method read_num Macro mov ah,1 int 21h sub al,30h ENDM.DATA msg1 db 'Please input the first number:$' msg2 db 'Please input the second number:$' sum_msg db 'The sum is: $'
44
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 44 Example1 : Register Method.code.startup print_msg msg1 read_num mov cl,al newline print_msg msg2 read_num mov ch,al
45
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 45 Example1 : Register Method newline call sum print_msg sum_msg call print_res.exit ; return to operating system. sum PROC add ch,cl RET ; return to caller. sum ENDP
46
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 46 Example1 : Register Method print_res PROC mov dl,ch add dl,30h mov ah,2 int 21h RET ; return to caller. print_res ENDP end
47
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 47 Example2 : Register Method ; Assembly language that prints the length of text ; using call by reference procedure.586 option segment:use16.model small print_msg Macro msg mov dx,offset msg mov ah,9 int 21h ENDM
48
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 48 Example2 : Register Method.DATA text db 'Assembly$' txt db 'The length of text <$' res db '> is $'
49
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 49 Example2 : Register Method.code.startup mov bx,offset text print_msg txt print_msg text print_msg res call txt_len add dl,'0' mov ah,2 int 21h.exit
50
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 50 Example2 : Register Method txt_len PROC sub dl,dl loops: mov dh,[bx] cmp dh,'$' je str_len_done inc bx inc dl jmp loops
51
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 51 Example2 : Register Method str_len_done: RET ; return to caller. txt_len ENDP end
52
2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005. S. Dandamudi Chapter 5: Page 52 Pros and Cons of the Register Method Advantages Convenient and easier Faster Disadvantages Only a few parameters can be passed using the register method –Only a small number of registers are available Often these registers are not free –freeing them by pushing their values onto the stack negates the second advantage
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.