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判断字符串是否为数字
    门萨高智商者的集中营
    Android全局变量是用public&nbsp…
    oracle 关闭查询的进程
    oracle 常用参考
    oracle创建临时表
    透明网关设置
    透明网关diy
    又一个下拉菜单导航按钮
    数据库备份或导出时丢失主键的相关知识
  • 原文地址:https://www.cnblogs.com/mengdie/p/4487810.html
Copyright © 2011-2022 走看看