zoukankan      html  css  js  c++  java
  • Embedded之Stack之一

    1  Intro

      When a program starts executing, a certain contiguous section of memory is set aside for the program called the stack.

       

      The stack pointer is usually a register that contains the top of the stack. The stack pointer contains the smallest address x such that any address smaller than x is considered garbage, and any address greater than or equal to x is considered valid.

      stack bottom The largest valid address of a stack. When a stack is initialized, the stack pointer points to the stack bottom. 

      stack limit The smallest valid address of a stack. If the stack pointer gets smaller than this, then there's a stack overflow (this should not be confused with overflow from math operations).

    2  Push

      There are two operations on the stack: push and pop.

      push You can push one or more registers, by setting the stack pointer to a smaller value (usually by subtracting 4 times the number of registers to be pushed on the stack) and copying the registers to the stack.

      

    push:  addi $sp, $sp, -4  # Decrement stack pointer by 4
           sw   $r3, 0($sp)   # Save $r3 to stack

      

      The diagram on the left shows the stack before the push operation.

      The diagram in the center shows the stack pointer being decremented by 4.

      The diagram on the right shows the stack after the 4 bytes from register 3 has been copied to address 0x000f fffc

    3  Pop

      pop You can pop one or more registers, by copying the data from the stack to the registers, then to add a value to the stack pointer (usually adding 4 times the number of registers to be popped on the stack)

    pop:  lw   $r3, 0($sp)   # Copy from stack to $r3
          addi $sp, $sp, 4   # Increment stack pointer by 4

      The diagram on the left is the initial state of the stack.

      The data is copied from the stack to the register 3. Thus, the diagram in the center is the same as the one on the left. If I had drawn a picture of the contents of register 3, it would have been updated with the data from the stack.

      Then, the stack pointer is moved down (shown in the diagram on the right).

  • 相关阅读:
    Java类加载机制
    DAY18
    DAY17
    DAY16
    DAY15
    DAY14
    DAY13
    DAY12
    DAY11
    DAY10
  • 原文地址:https://www.cnblogs.com/mengdie/p/4487810.html
Copyright © 2011-2022 走看看