【RISC-V】.pushsection .popsection和.section .previous的区别

规则如下:

.pushsection.popsection维护一个私有的段栈

1、.pushsection行为:

  1. 将当前段(current section)压入段栈。

  2. 切换到指定的name段(如果不存在则创建)。

  3. 后续的汇编代码写入新段。

2、.popscetion行为:

  1. 从段栈弹出最顶层的段名。

  2. 直接切换回该段(作为当前段current section)。

复制代码
.text
    nop
.pushsection .data  # 压栈text
    .byte 42
.pushsection .rodata # 压栈data
    .ascii "hello"
.popsection        # 回到 .data
    .byte 43
.popsection        # 回到 .text
    nop

⚠️⚠️⚠️规则如下:

GAS(GNU Assembler)内部维护previous_section 变量和current_section变量,当

复制代码
.text                # current=.text,    previous=?
    nop
.section .data       # previous=.text,   current=.data
    .byte 42
.section .rodata     # previous=.data,   current=.rodata
    .ascii "hello"
.previous            # 交换:previous=.rodata,current=.data。回到.data段
    .byte 43
.previous            # 再次交换: previous=.data,current=.rodata。回到.rodata段

.text              # previous=?,        current=.text    
    nop
.section .data     # previous=.text,    current=.data    
    .byte 42
.section .rodata   # previous=.data,    current=.rodata   
    .ascii "hello"
.previous          # 交换,previous=.rodata,current=.data。回到data段
.section .init     # 此时在data段,所以previous=.data,    current=.init  
    .byte 43
.previous          # 交换,previous=.init,current=.data。回到data段

自测习题:

回答:最终 .byte 99(或 .quad 99 等)位于 .xxx 段。

1、基础

复制代码
.text
    nop
.section .data
    .byte 1
.previous
    .byte 99

2、稍复杂

复制代码
.text
.section .rodata
.section .data
.previous
.previous
    .byte 99

3、陷阱题

复制代码
.text
.section .init
.section .fini
.previous
.section .data
.previous
    .byte 99

4、混合使用

复制代码
.text
.pushsection .data
.section .rodata
.previous
.popsection
    .byte 99

5、嵌套 push/pop

复制代码
.text
.pushsection .init
.pushsection .data
.section .rodata
.popsection
.previous
    .quad 99

答案:

第一题:.text,第二题:.data,第三题:.init,第四题:.text,第五题:.data

相关推荐
开开心心就好4 天前
内存清理软件灵活设置,自动阈值快捷键清
运维·服务器·windows·pdf·harmonyos·risc-v·1024程序员节
国科安芯6 天前
基于RISC-V架构的抗辐照MCU在空间EDFA控制单元中的可靠性分析
单片机·嵌入式硬件·性能优化·架构·risc-v·安全性测试
国科安芯7 天前
空间站机械臂中MCU与CANFD抗辐照芯片的集成研究
单片机·嵌入式硬件·fpga开发·架构·risc-v
信创天地8 天前
国产化分布式服务框架双雄:Dubbo与Spring Cloud Alibaba 服务调用解决方案全解析
人工智能·系统架构·开源·dubbo·运维开发·risc-v
weixin_5531320715 天前
探索Vortex开源GPGPU:RISC-V SIMT架构(4-2),TCU 矩阵计算(1)
矩阵·架构·github·risc-v·wmma·simt·tcu
OpenAnolis小助手18 天前
RISC-V 基金会 Data Center SIG 第六次会议圆满结束,推动数据中心缺口改进及引入
ai·risc-v
码云数智-园园19 天前
“架构之争,生态之合”:.NET 生态系统对 LoongArch 与 RISC-V 的支持深度解析
架构·.net·risc-v
国科安芯19 天前
火箭传感器控制单元的抗辐照MCU选型与环境适应性验证
单片机·嵌入式硬件·架构·risc-v·安全性测试
蒹葭玉树24 天前
【C++上岸】C++常见面试题目--操作系统篇(第三十期)
c++·面试·risc-v
国科安芯1 个月前
面向星载芯片原子钟的RISC-V架构MCU抗辐照特性研究及可靠性分析
单片机·嵌入式硬件·架构·制造·risc-v·pcb工艺·安全性测试