RISC-V汇编新手入门

有空就更。

一、基础核心概念:什么是汇编语言?

汇编语言是直接对应 CPU 指令的低级编程语言,每一行汇编代码基本对应一条 CPU 能直接执行的指令。相比 C 语言等高级语言,汇编更贴近硬件,能直接操作 CPU 的寄存器、内存和硬件设备。

RISC-V 是一种开源的精简指令集架构(类似 ARM、x86),NA900 是基于 RISC-V 架构的处理器,我们的教学将围绕 RISC-V 的基础指令展开。

二、核心中的核心:RISC-V 寄存器

CPU 处理数据时,不会直接从内存中反复读写(太慢),而是先把数据放到寄存器(CPU 内部的高速存储单元)中操作。RISC-V 有 32 个通用寄存器(32 位),我们先掌握最常用的几个:

常用寄存器及用途

x0 别名 zero 恒为 0,用于清零或占位

x1 别名 ra 存放函数返回地址(暂不用)

x5-x7 别名 t0-t2 临时寄存器,用于临时数据存储

x19-x27 别名 s1-s9 保存寄存器,用于长期保存数据(需手动保护)

x28 别名 sp 栈指针寄存器,指向当前栈顶

x10-x17 别名 a0-a7 函数参数 / 返回值寄存器,a6-a7常用作系统调用参数

为什么需要区分寄存器?

不同寄存器有约定的用途(类似 “分工”),比如sp专门管栈,a0-a7专门传参数,遵循这个约定能让代码更规范,避免混乱。

练习题 1:寄存器识别

以下哪个寄存器是 “栈指针寄存器”?( )

A. t0 B. sp C. a7 D. s1

若需要临时存储一个中间结果,优先使用哪个寄存器?( )

A. zero B. s1 C. t0 D. a6

答案详解

选 B。sp(x28)是栈指针寄存器,专门指向栈顶位置。

选 C。t0-t2是临时寄存器,适合存储中间结果;s1是保存寄存器,通常用于长期数据,zero恒为 0,a6用于传参,都不适合临时存储。

三、最基础的指令:数据传送

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/2794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[每周一更]-(第155期):Go 1.25 发布:新特性、技术思考与 Go vs Rust 竞争格局分析

作为一名 Go 研发工程师,我一直关注 Go 语言的演进。2025 年 8 月 12 日,Go 团队发布了 Go 1.25 版本,这是继 Go 1.24 之后的又一重要更新。 这个版本聚焦于工具链优化、运行时改进和实验性功能引入,没有引入破坏性语言变化&#…

【网络安全】Webshell的绕过——绕过动态检测引擎WAF-缓存绕过(Hash碰撞)

目录 一、前言 二、环境 三、了解动态检测引擎 3.1 shuffle — 打乱数组 3.2 mt_srand — 播下一个更好的随机数发生器种子 四、缓存导致的绕过【hash碰撞】 五、总结 一、前言 在渗透测试过程中,成功获取 WebShell 时难免遇到 Web 应用防火墙(WA…

【Linux | 网络】高级IO

一、IO是什么二、五种IO模型2.1 理解五种IO模型2.2 五种IO模型的定义三、 非阻塞IO3.1 fcntl函数3.2 实现函数SetNoBlock(将文件描述符设置为非阻塞)四、多路转接IO4.1 多路转接IO之select4.1.1 select函数4.1.2 select的优缺点4.2 多路转接IO之poll4.2.…

图解简单选择排序C语言实现

1 简单选择排序 简单选择排序(Simple Selection Sort)是一种基础且直观的排序算法,其核心思想是通过重复选择未排序部分中的最小(或最大)元素,并将其放到已排序部分的末尾,逐步完成整个序列的排…

[go] 桥接模式

桥接模式 是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。 模型说明抽象部分(Abstraction)提供高层控制逻辑,依赖于完成底层实际工作的实现对象…

【自用】JavaSE--特殊文件Properties与XML、日志技术

特殊文件概述使用特殊文件可以存储多个有关系的数据,作为系统的配置信息属性文件类似于键值对,一一对应存储数据(比如用户名与密码)XML文件存储多个用户的多个属性更适合,适合存储更复杂的数据Properties注:这个属性文件的后缀即使…

【轨物方案】预防性运维:轨物科技用AI+机器人重塑光伏电站价值链

传统光伏电站的运维模式,常常被视为一个“成本中心”,其“故障-抢修”的逻辑模式,不仅响应滞后、效率低下,更难以从根本上提升资产的长期价值。然而,随着新能源行业的深刻发展,运维的价值被重新定义&#x…

【自动化运维神器Ansible】Ansible比较操作符详解:从基础到实战应用

目录 引言 1 Ansible比较操作符概述 1.1 什么是比较操作符&#xff1f; 1.2 比较操作符的分类与核心符号 2 核心比较操作符详解 2.1 相等与不等&#xff1a;与! 语法与基础用法 示例&#xff1a;字符串与数值比较 注意事项 2.2 大小比较&#xff1a;>、>、<…

配置 Docker 镜像加速,解决 docker pull 拉取镜像失败、docker search 查询镜像失败等问题

一、概述 记录时间 [2025-08-16] 在 Docker 学习中&#xff0c;可能会遇到诸如 docker 远程仓库无法访问、docker pull 拉取镜像失败、docker search 查询镜像失败等问题。 这是由于国内网络对 docker 远程仓库的访问受到限制。 那么在国内如何获取 docker 镜像呢&#xff1f…

智能工厂生产监控大屏-vue纯前端静态页面练习

学习前端还是非常有意思的&#xff0c;因为前端真的是可见即所得&#xff0c;可以做出来非常好看漂亮的页面&#xff0c;最近我就在使用前端技术 做一些大屏报表&#xff0c;在制作这些大屏报表过程中&#xff0c;又熟练的练习了自己的学到的相关的前端技术&#xff0c;接下来把…

Android 欧盟网络安全EN18031 要求对应的基本表格填写

Android 欧盟网络安全EN18031 要求对应的基本表格填写 文章目录Android 欧盟网络安全EN18031 要求对应的基本表格填写一、背景二、18031认证预填表格三、其他1、Android EN 18031 要求对应的基本表格小结2、EN 18031的要求表格内容填写3、一定要做三方认证&#xff1f;4、欧盟网…

Java Lambda表达式是什么,怎么用

这种代码是什么&#xff0c;怎么阅读/*** 批量插入** param entityList ignore* param batchSize ignore* return ignore*/Transactional(rollbackFor Exception.class)Overridepublic boolean saveBatch(Collection<T> entityList, int batchSize) {String sqlStateme…