RISCV Reader笔记_3 RISCV汇编

news2024/9/30 15:21:00

RISC-V 汇编语言

image-20230626080943809

函数调用的步骤在计算机组成与设计中也有过涉及:

  • 指定寄存器存入参数;
  • 跳转到函数开始位置(jal);
  • 在callee中按需保存寄存器;
  • 执行函数;
  • 恢复保存的寄存器;把返回值存入指定位置;
  • 返回调用函数的位置(ret命令,mips是jr)。

变量尽量存在寄存器里因为速度快嘛。调用函数过程中不用保存值的寄存器(被函数直接覆盖掉值)叫做临时寄存器;需要保存值的寄存器叫做保存寄存器。不再调用其他函数的函数叫做叶函数。叶函数如果参数和局部变量较少,可以直接用寄存器解决;如果过多需要存储到内存中(spilling 溢出),不过溢出情况并不多见。

image-20230626082237242

主要是保存寄存器还有一些涉及底层操作的寄存器比如sp栈指针等值不可改,需要保留。

函数调用示例:

entry_label:
	addi sp,sp,-framesize	# framesize存储的是要保存的ra,保存寄存器等个数*4,因为都是32位的寄存器
	sw ra,framesize-4(sp)	# 栈顶存ra
	# 按需保存其他寄存器

	# 函数体
	
	# 按需返回其他寄存器
	lw ra,framesize-4(sp)	# 栈顶取ra 
	addi sp,sp,framesize
	ret

汇编器

unix系统中是.s后缀的文件,而ms-dos系统中是.asm文件。

文件中.开头的是指示符。比如下面分析一下 hello world 编译产生的汇编文件:

image-20230626150328359

1687745922013

.text 标识代码段开始。

.align 2 是按32位对齐代码,因为指令都是32位。

.globl main 是全局 main 函数。

字符串是不可修改数据,因此用 .section .rodata 只读数据标识。也要对齐数据。

然后用 .string 标识 \0 结尾的字符串。

汇编器最终产生的文件格式如下,是可链接的ELF文件。

1687763280786

里面8到1c行的所有寄存器传入地址都是0,等到后续链接的时候再设置具体值。

链接器

允许各个文件进行独立的编译和汇编,这样改动部分文件不用全部重新编译,把新代码和已经存在的机器语言模块拼接起来即可。

unix 文件是 .o -> .out 文件,msdos 文件是 .obj .lib -> .exe 文件。

链接器需要分配图中相符的地址空间给程序、数据。如果程序和位置无关(PIC代码)这一步可省略。RV32I的相对转移特性(程序跳转是加相对值)使得更容易实现PIC。

然后需要把编译器中直接跳转到标签的指令翻译为跳转到立即数地址,jalr 的值也修正为跳转到立即数地址 jal,auipc jalr lui addi 这些具体地址值修改。

image-20230626153655941

RV的浮点数传递要看选择哪一种ABI接口规范。ilp32 是浮点数在整型寄存器中传递,ilp32f 是单精度在浮点寄存器中,ilp32d 是双精度也在浮点寄存器中。

RV32I不支持FD扩展,因此只能用ilp32.编译指令:GCC 选项-march=rv32i -mabi=lib32

不过没说支持浮点扩展就一定要用,因此RV32IFD也可以用ilp32或ilp32f。

链接器也会检查是否兼容扩展。编译器可能支持多种ABI ISA,但是电脑上面本身没装那些库的情况下就会不兼容。

静态链接和动态链接

链接库函数时,如果这个库函数当前版本已经链接过就不再链接。多次调用也不重复链接。

而且动态链接跳转地址是存在内存中一张表里的,每次第一次链接时更新函数地址表,调用时只需要三条指令(存根指令)去查表找到对应跳转位置后跳转。

结语

0寄存器使得部分伪代码更容易实现;

lui auipc 不同于以往组合两条16位地址的复杂指令形式,20位左移+12位更快获得地址,减少指令数量,且 auipc 便于处理 PIC;

PIC 降低链接复杂度(位置无关);

大量寄存器使得运算速度加快。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用传统图像处理算法+机器学习进行shadow detection

前言 阴影是图像中常见的现象,它们对于场景理解和分析非常重要。由于阴影区域通常比较暗淡,而且与周围物体区别较大,因此在图像处理和计算机视觉领域中,阴影检测是一个重要的研究方向。传统的阴影检测算法通常基于阈值或边缘检测…

深入理解 kernel panic 的流程

我们在项目开发过程中,很多时候会出现由于某种原因经常会导致手机系统死机重启的情况(重启分Android重启跟kernel重启,而我们这里只讨论kernel重启也就是 kernel panic 的情况),死机重启基本算是影响最严重的系统问题了…

180_Power BI 新卡片图计算组与同环比应用

180_Power BI 新卡片图计算组与同环比应用 一、背景 在 2023 年 6 月,Power BI 更新了新的视觉对象:Card(new) 。 当前还需要在预览功能中将其打开。 我们在实际的应用中将新卡片图做了一些应用,先来看看具体效果。 Power BI 公共 web 效果…

安全区域内活动UWB标签,高精度UWB定位监测,室内厘米级测距应用

随着人们对于室内安全和定位需求的增加,相应的技术应运而生,超宽带(UWB)标签定位技术应用于室内定位领域,并获得了快速的发展和应用。 UWB技术是一种基于极窄脉冲的无线技术,它的主要特点是无载波&#xf…

软件测试技能,JMeter压力测试教程,setUp线程组批量登录(九)

前言 前面一篇已经实现了在 setUp 线程组实现单个用户先登录后提取token给其它线程组使用,在压测的时候,单个用户登录很显然不能满足我们的压测需求 我们在压测接口的时候,需批量获取多个用户登录后返回的token值,那么在setUp 线…

RabbitMQ消息队列高级特性

文章目录 1.消息的可靠投递2.ConSumer ACK消费者确认接收消息3.消费者限流4.TTL过期时间5.死信队列6.延迟队列7.日志与监控8.消息追踪 1.消息的可靠投递 在线上生产环境中,RabbitMQ可能会产生消息丢失或者是投递失败的一个场景,RabbitMQ为了避免这种场景…

Redis慢查询分析

慢查询分析 谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来。 执行一条命令分为如下4个部分…

【每日算法 数据结构(C++)】—— 05 | 判断单链表是否有环(解题思路、流程图、代码片段)

文章目录 01 | 👑 题目描述02 | 🔋 解题思路03 | 🧢 代码片段 The future belongs to those who believe in the beauty of their dreams. 未来属于那些相信梦想之美的人 01 | 👑 题目描述 给你一个单链表,请判断其中是…

Mac(M1)上安装Ubuntu虚拟机

Mac(M1)上安装Ubuntu虚拟机 0.下载资料汇总 VMware Fusionhttps://www.vmware.com/products/fusion/fusion-evaluation.htmlubuntu-desktop-arm64.isohttps://cdimage.ubuntu.com/jammy/daily-live/current/ 1.安装VMware Mac版本的VMware叫 VMware …

黑马程序员前端 Vue3 小兔鲜电商项目——(十一)支付页

文章目录 基础数据渲染封装接口数据渲染 支付功能实现支付携带参数支付宝沙箱账号信息 支付结果页展示模版代码绑定路由渲染数据 倒计时逻辑函数封装 支付页有俩个关键数据,一个是要支付的钱数,一个是倒计时数据(超时不支付商品释放)。 基础…

Tomcat项目更新Tomcat版本,重新配置conf,并在Idea运行项目,服务器替换SSL证书

Tomcat项目更新Tomcat版本,重新配置conf,并在Idea运行项目 1.下载Tomcat包2.Tomcat配置-ssi配置3.Idea运行 Tomcat 项目4.服务器Tomcat替换SSL证书4. Tomcat 项目重启 1.下载Tomcat包 Tomcat 官网 - https://tomcat.apache.org/ jdk1.8.0_191 我选择的…

如何在电脑、手机《酷游链接》录制屏幕?一看就会!也有剪辑录制视频的方法哦!

最近,我的生活中出现了许多需要录制电脑屏幕的场景! 『酷游链kw9㍠N͜E͜T提供』娜娜友善提醒,要自己输入才会显示出来!比如会议,教学等场景。这些场景我们可以通过Windows10的内建软体来解决。另外,也出现…

Python小白应该怎么学习字典

1.Python 字典 字典 字典是一个无序、可变和有索引的集合。在 Python 中,字典用花括号编写,拥有键和值。 例子:创建并打印字典 thisdict {"brand": "Porsche","model": "911","year": 1963 } pr…

MUR20100DC-ASEMI快恢复二极管MUR20100DC

编辑-Z MUR20100DC在TO-263封装里采用的2个芯片,其尺寸都是102MIL,是一款共阴极快恢复对管。MUR20100DC的浪涌电流Ifsm为200A,漏电流(Ir)为10uA,其工作时耐温度范围为-55~150摄氏度。MUR20100DC采用抗冲击硅芯片材质,…

技术管理第二板斧建团队-沟通

一、沟通的核心原则 我认为,沟通是内心想法和思考逻辑的外延,如果你有良好的沟通能力,可以在整个团队中营造公开透明的信任氛围,让信息透明的同时,也让团队成员愿意发出自己的声音。 但实际情况中,很多人…

TypeScript 中对【函数类型】的约束使用解读

概述 函数是JavaScript 中的 一等公民 概念:函数类型的概念是指给函数添加类型注解,本质上就是给函数的参数和返回值添加类型约束 声明式函数: 在 TypeScript 中,一个函数有输入和输出,需要对其进行约束,需要把输入和…

电力载波远程控制系统

随着电力技术的不断发展,电力载波远程控制系统成为了现代电力系统中的重要组成部分。电力载波远程控制系统是一种利用电力载波技术实现远程控制的系统,可以对电力系统中的各种设备进行实时监测、控制和管理,提高电力系统的安全性、可靠性和效…

Efficient Video Transformers with Spatial-Temporal Token Selection阅读笔记

摘要 Video Transformers在主要视频识别基准测试中取得了令人印象深刻的结果,但其计算成本很高。 在本文中,我们提出了 STTS,这是一种令牌选择框架,它根据输入视频样本在时间和空间维度上动态选择一些信息丰富的令牌。 具体来说&…

Qt/C++编写视频监控系统78-视频推流到流媒体服务器

一、前言 视频推流作为独立的模块,目前并没有集成到视频监控系统中,目前是可以搭配监控系统一起使用,一般是将添加好的摄像头通道视频流地址打开后,读取视频流重新推到流媒体服务器,然后第三方可以从流媒体服务器拉取…

博世中国×牛客:精准人才简历增长100%!智能制造大揭秘

当一家智能制造巨头,在面向人工物联网企业的全面转型中,人才需求发生变化,年轻的校园顶尖科技人才成为刚需。 此时,内部需求激增,人才要求高还翻倍增长,但外部供需失衡,人才供给极少。尽管已然…