四种栈模型,

满栈减,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)、逆向填充
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐