You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Arm汇编:如何写入RAM并打印验证数据?

关于汇编中用户输入存储与保留的问题解答

1. 你的代码已经实现了「写入RAM+打印验证」

你当前的代码其实已经完成了把用户输入写入RAM并验证的操作:

  • .data段里的storage: .space 80是在进程虚拟内存中开辟的80字节缓冲区,这块虚拟内存最终会被操作系统映射到物理RAM上。
  • 调用scanf时,把storage的地址传给r1,scanf会直接把用户输入的字符串写入这块RAM区域。
  • 后续调用printf读取storage地址的内容并打印,这就是验证数据存在的过程——能正常打印就说明数据已经成功存入RAM了。

2. 关于RAM物理地址

现代操作系统都采用虚拟内存机制,用户程序中使用的地址是虚拟地址,并非直接的物理RAM地址。操作系统的MMU(内存管理单元)会自动把虚拟地址映射到物理RAM的实际地址上:

  • 普通用户程序没有权限直接访问物理地址,也完全没必要这么做——你的storage缓冲区对应的虚拟地址已经间接指向物理RAM了。
  • 如果一定要操作物理地址,需要编写内核态程序(比如驱动),但这对你的需求来说完全多余。

3. 程序重启后保留RAM数据的可能性

RAM是易失性存储器,只要断电(包括程序关闭后进程内存被释放、系统重启),RAM里的数据就会彻底丢失,没有办法直接让RAM数据在重启后保留。

  • 要实现数据持久化,必须把数据写入非易失性存储设备(比如硬盘、闪存)。你可以在程序里添加文件写入逻辑:
    1. 调用fopen打开一个文件(比如"input_save.txt")。
    2. 调用fprintf把storage里的用户输入写入文件。
    3. 下次程序启动时,调用fscanf从文件中读取之前保存的数据。

补充:现有代码的小优化建议

你的代码逻辑没问题,不过可以注意两点:

  • scanf的%s格式会自动在输入末尾加\0,确保字符串正确终止,storage开辟的80字节足够存储大部分短输入。
  • 如果要读取带空格的输入,需要把format改成.asciz "%[^\n]s",这样scanf会读取到换行符为止。

内容的提问来源于stack exchange,提问作者powerpuff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:35:26