四种栈模型
·
四种栈模型,
满栈减,Full Descending
满栈增,Full Ascending
空栈减,Empty Descending
空栈增,Empth Ascending
增/减:ascending/descending,是针对压栈的时候,入栈的时候地址是变大还是变小定义的。
满栈/空栈:满栈是先移动sp指针在存储数据,空栈是先存储数据在移动sp指针.
-
满栈:SP 指着最后一个被放进去的有效数据(“脚”踩在货物上)。
-
空栈:SP 指着下一个将要放数据的空位置(“手”指着空货架)。
-
FD(满递减):压栈用 STMDB,出栈用 LDMIA。(匹配)
-
FA(满递增):压栈用 STMIB,出栈用 LDMDA。
-
ED(空递减):压栈用 STMDA,出栈用 LDMIB。
-
EA(空递增):压栈用 STMIA,出栈用 LDMDB。
| 栈模型 | 英文全称 | 压栈指令 (存储) | 出栈指令 (加载) | 指针变化逻辑 |
|---|---|---|---|---|
| 满递减 (FD) | Full Descending | STMDB |
LDMIA |
先减后存 / 先取后加 |
| 满递增 (FA) | Full Ascending | STMIB |
LDMDA |
先加后存 / 先取后减 |
| 空递减 (ED) | Empty Descending | STMDA |
LDMIB |
先减后存 / 先加后取 |
| 空递增 (EA) | Empty Ascending | STMIA |
LDMDB |
先存后加 / 先减后取 |
满栈:sp指针指向栈顶
空栈:sp指针指向栈底
这四个后缀决定了基址寄存器(如 SP)如何变化以及变化发生在传输前还是传输后:
| 后缀 | 全称 | 指针变化 | 先操作还是先变化 | 适用场景 |
|---|---|---|---|---|
| IA | Increment After | 地址递增 | 先传输数据,指针再 +4 | 出栈(Pop)、正向遍历数组 |
| IB | Increment Before | 地址递增 | 指针先 +4,再传输数据 | 正向遍历(较少用) |
| DA | Decrement After | 地址递减 | 先传输数据,指针再 -4 | 逆向遍历(较少用) |
| DB | Decrement Before | 地址递减 | 指针先 -4,再传输数据 | 压栈(Push)、逆向填充 |
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐

所有评论(0)