news 2026/4/3 1:19:28

ARM 汇编指令:PUSH 和 POP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ARM 汇编指令:PUSH 和 POP

ARM 汇编指令:PUSH 和 POP

本文来自于我关于 ARM 汇编指令系列文章。欢迎阅读、点评与交流~
1、汇编指令在不同架构中的联系与区别
2、ARM 汇编指令:MOV
3、ARM 汇编指令:LDR
4、ARM 汇编指令:STR
5、ARM 汇编指令:MRS 和 MSR
6、ARM 汇编指令:ORRS
7、ARM 汇编指令:BEQ
8、ARM 汇编指令:TST
9、ARM 汇编指令:B
10、ARM 汇编指令:BX
11、ARM 汇编指令:ERET

在 ARM 汇编中,PUSHPOP是用于栈操作(堆栈操作)的指令,主要用于保存和恢复寄存器的值。它们是STMDBLDMIA的别名,与栈指针(通常是SP)一起使用。


1.栈的概念

  • ARM 中栈通常是满递减栈(Full Descending, FD),即栈向低地址方向生长,栈指针指向最后一个入栈的元素。
  • PUSH用于将寄存器值存入栈(压栈)。
  • POP用于从栈中取出值到寄存器(出栈)。

2.PUSH 指令

语法

PUSH {reg_list}

功能

  • reg_list中的寄存器依次存入栈(从高寄存器到低寄存器顺序存入内存,但内存地址递减)。

  • SP会先递减(因为是满栈),然后再存数据。

  • 等价于:

    STMDB SP!, {reg_list}

    STMDB表示先递减(Decrease Before)存储。

示例

PUSH {R0, R1, R4-R7} ; 将 R0, R1, R4, R5, R6, R7 压栈

假设入栈前SP = 0x1000,入栈 6 个寄存器(每个 4 字节)后SP = 0x1000 - 0x18 = 0xFE8


3.POP 指令

语法

POP {reg_list}

功能

  • 从栈中取出数据到reg_list中的寄存器(从低地址到高地址加载到寄存器,寄存器的编号顺序不影响加载的内存顺序,但通常按编号升序弹出到寄存器列表中的寄存器)。

  • SP会在加载后递增(因为是满栈)。

  • 等价于:

    LDMIA SP!, {reg_list}

    LDMIA表示先递增(Increase After)加载。

示例

POP {R0, R1, R4-R7} ; 恢复 R0, R1, R4, R5, R6, R7 的值

4.使用场景

子程序调用时保存现场:

subroutine: PUSH {R0-R3, LR} ; 保存工作寄存器和返回地址 ... ; 子程序代码 POP {R0-R3, PC} ; 恢复寄存器并返回(将 LR 弹出到 PC)

注意:这里POP {..., PC}相当于同时恢复了寄存器并跳转回调用处。


5.注意事项

  • 寄存器顺序:在PUSHPOP的寄存器列表中,可以按任意顺序书写,但汇编器会按寄存器编号升序排序后再压栈(编号高的寄存器对应高内存地址)。出栈时,低内存地址的数据弹出到列表中编号最小的寄存器。
  • 栈对齐:在 ARMv7/AArch32 中,通常要求SP对齐到 8 字节(特别是在调用公共接口时)。在 AArch64 中,PUSH/POP指令形式不同,并且要求 16 字节对齐。
  • Thumb 模式:在 Thumb 指令集中,PUSH/POP的寄存器列表有限制(通常只能用于通用寄存器和LR/PC)。

6.示例:完整的函数调用与返回

main: ... BL foo ... foo: PUSH {R4-R7, LR} ; 保存调用者保存的寄存器和返回地址 ... ; 使用这些寄存器 POP {R4-R7, PC} ; 恢复寄存器并直接返回

7.与 x86 的区别

  • x86 的PUSH/POP一次只能操作一个寄存器或内存地址,而 ARM 可以一次操作多个寄存器。
  • ARM 的栈操作更加灵活,可以通过STM/LDM实现多种栈模式(但PUSH/POP固定为满递减)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 6:43:08

Chromium OS 深度解析:云原生操作系统的架构、应用与未来

1 概述:重新定义计算体验的云原生操作系统Chromium OS 是 Google 主导开发的一款开源、云原生操作系统,其设计哲学极富革命性:将网络置于核心地位。它并非传统意义上功能包罗万象的通用操作系统,而是一个为网络应用量身打造的极致…

作者头像 李华
网站建设 2026/4/3 4:49:10

基于SpringBoot技术的新能源汽车展销平台系统(毕设源码+文档)

课题说明本课题聚焦新能源汽车展销过程中信息不对称、供需匹配低效及营销渠道单一等痛点,设计并开发基于SpringBoot技术的新能源汽车展销平台系统。系统依托SpringBoot框架的高效稳定优势,整合车辆展示、需求对接、营销推广等核心场景,涵盖新…

作者头像 李华
网站建设 2026/3/31 9:40:03

基于SpringBoot家教中介管理系统(毕设源码+文档)

课题说明本课题聚焦家教中介服务供需匹配低效、师资审核不规范及交易管理混乱等痛点,设计并开发基于SpringBoot技术的家教中介管理系统。系统依托SpringBoot框架的高效稳定优势,整合家教需求对接、师资管理、交易流程管控等核心场景,涵盖家长…

作者头像 李华
网站建设 2026/3/24 6:39:58

基于微信小程序的精致护肤购物系统毕设源码+文档+讲解视频

前言 本课题聚焦精致护肤消费场景下线上购物便捷性与个性化需求痛点,设计开发基于微信小程序的精致护肤购物系统。系统依托微信生态高普及率与社交属性优势,整合护肤产品展示、个性化推荐、在线交易、订单追踪、售后咨询等核心场景,涵盖肤质测…

作者头像 李华
网站建设 2026/3/31 7:21:40

基于Matlab的裂缝检测系统

- 标题: 基于matlab的裂缝检测系统 - 关键词:matlab GUI界面 数字图像处理 去除阴影 滤波 图像增强 大津算法 otsu zhang_suen算法 形态学操作 骨架特征提取 中轴变化 - 步骤:打开图像 去除阴影 滤波操作 图像增强 阈值处理 形态学操作 骨架提…

作者头像 李华
网站建设 2026/3/27 7:13:54

AI进入心理咨询:效率跃升背后,隐私、偏见与“幻觉”如何兜底?

【摘要】AI正加速融入心理咨询,显著提升服务效率。但其应用必须审慎处理数据隐私、算法偏见及输出不可靠性等核心风险,通过建立严谨的治理框架与分级应用策略,确保技术在人类专家监督下,安全、负责任地发挥辅助作用。引言人工智能…

作者头像 李华