Assembly Stack and Procedures Guide
Assembly Stack and Procedures Guide
Chapter 4
      S. Dandamudi
                                                Outline
                                                                        1002               1002
                                                     1001               1001               1001
  Insertion of data items into the stack (arrow points to the top-of-stack)
                 1003
1002 1002
  Deletion of data items from the stack (arrow points to the top-of-stack)
1998                                             S. Dandamudi                                Procedures: Page 4
       To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Springer-Verlag, 1998.
           Pentium Implementation of the Stack
• Stack segment is used to implement the stack
       ∗ Registers SS and (E)SP are used
       ∗ SS:(E)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
TOS
                              ??                              21                              21
                              ??           TOS               AB                              AB
                              ??
                                                              ??                              7F
                              ??
              SP                                              ??                             BD
             (256)            ??
                                                              ??                              32
                                              SP
                              ??                              ??           TOS
                                             (254)                                            9A
                               .                               .                               .
                               .                               .                               .
                               .                               .                               .
                                                                              SP
                                                                             (250)
                              ??                              ??                              ??
             SS               ??
                                             SS               ??             SS               ??
21 21 21
AB TOS AB AB
                             7F                               7F                              56
                             BD                              BD            TOS                89
                             32                               32                              32
                                             SP
          TOS                9A             (254)             9A                              9A
                                                                              SP
                               .                               .             (252)              .
             SP                .                               .                                .
                               .                               .                                .
            (250)
                             ??                               ??                              ??
SS ?? SS ?? SS ??
                Parameter Passing
• Stack is extensively used for parameter passing
• Our discussion later on parameter passing
  describes how the stack is used for this purpose
1998                                             S. Dandamudi                              Procedures: Page 14
       To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Springer-Verlag, 1998.
            Assembler Directives for Procedures
• Assembler provides two directives to define
  procedures: PROC and ENDP
• To define a NEAR procedure, use
             proc-name                           PROC                NEAR
       ∗ In a NEAR procedure, both calling and called
         procedures are in the same code segment
• A FAR procedure can be defined by
             proc-name                           PROC                FAR
       ∗ Called and calling procedures are in two different
         segments in a FAR procedure
       ∗ PROCEX2.ASM
             » call-by-reference using the register method
             » string length procedure
1998                                             S. Dandamudi                              Procedures: Page 22
       To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Springer-Verlag, 1998.
          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
   Problem: cumbersome
             » We have to remember to update SP to point to the return
               address on the stack before the end of the procedure
                         ??
                      number1         BP + 6                           ??
                      number2         BP + 4                        number1                                 ??
IP BP + 2 number2 number1
BP, SP BP SP IP SP number2
             proc-name                           PROC
                                                 push    BP
                                                 mov     BP,SP
                                                   . . . . . .
                                                 <procedure body>
                                                   . . . . . .
                                                 pop     BP
                                                 ret     integer-value
             proc-name                           ENDP
• PROCSWAP.ASM
       ∗ call-by-reference using the stack method
       ∗ first two characters of the input string are swapped
• BBLSORT.ASM
       ∗ implements bubble sort algorithm
       ∗ uses pusha and popa to save and restore registers
1998                                             S. Dandamudi                              Procedures: Page 34
       To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Springer-Verlag, 1998.
                  Variable Number of Parameters
• For most procedures, the number of parameters is
  fixed (i.e., every time the procedure is called, the
  same number of parameter values are passed)
• In procedures that can have variable number of
  parameters, with each procedure call, the number
  of parameter values passed can be different
• C supports procedures with variable number of
  parameters
• Easy to support variable number of parameters
  using the stack method
1998                                             S. Dandamudi                              Procedures: Page 35
       To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Springer-Verlag, 1998.
       Variable Number of Parameters (cont’d)
• To implement variable
  number of parameter
                                                                                parameter N
  passing:
                                                                               parameter N-1
       ∗ Parameter count should be                                     .            .
         one of the parameters                                         .            .                N parameters
         passed onto the called                                        .            .
         procedure                                                  BP + 8      parameter 2
       ∗ This count should be the                                   BP + 6      parameter 1
         last parameter pushed onto
                                                                    BP + 4           N             Number of parameters
         the stack so that it is just
         below IP independent of the                                BP + 2           IP
         number of parameters                              BP, SP                   BP
         passed
                   BP + 6                         a
                                                                          Parameters
                   BP + 4                         b
BP + 2 IP Return address
BP old BP
                   BP - 2                      temp
                                                                          Local variables
                    BP - 4                       N                                  SP
• PROCFIB2.ASM
       ∗ Uses the stack for local variable storage
       ∗ Performance implications of using registers versus
         stack are discussed later
1998                                             S. Dandamudi                              Procedures: Page 40
       To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Springer-Verlag, 1998.
                       Multiple Module Programs
• In multi-module programs, a single program is
  split into multiple source files
• Advantages
             » If a module is modified, only that module needs to be
               reassembled (not the whole program)
             » Several programmers can share the work
             » Making modifications is easier with several short files
             » Unintended modifications can be avoided
• To facilitate separate assembly, two assembler
  directives are provided:
             » PUBLIC and EXTRN
                         50                                                                                                 k
                                                                                                                      s t ac
                                                                                                                    -
                                                                                                              AL
  Sort time (seconds)
                         40                                                                                                t   er
                                                                                                                 re    gis
                                                                                                                -
                                                                                                             AL
                         30
                                                                                                                 ified
                                                                                                              mod
                                                                                                             -
                         20                                                                                AL
                         10                                                                                 -original
                                                                                                          AL
                           0
                           1000          2000         3000         4000         5000         6000         7000                  8000
                                                               Number of elements
                                                                                                                C
                          30                                                                                                   k
                                                                                                                            ac
  Sort time (seconds)
                                                                                                                      - s t
                                                                                                                  AL
                          20                                                                                               r
                                                                                                                    g i ste
                                                                                                                -re
                                                                                                            A L
10
                            0
                            1000         2000          3000         4000         5000         6000         7000            8000
                                                                 Number of elements
                                                                                                                                 tack
                                                                                                                           i n s
   Execution time (seconds)
                              3                                                                                     bles
                                                                                                        lv     aria
                                                                                                      a
                                                                                                  Loc
                              2
                                                                                                                          egis   ters
                                                                                                                  s i n r
                                                                                                        ariable
                                                                                              o c a l v
                                                                                            L
                              1
                              0
                                  0         100           200          300          400           500              600                 700