Linux操作系统分析 Lab1

lqxh777 2023-03-14 18:41:13

 

学号:SA22225224

实验要求

将一个简单的C程序汇编成LoongArchRISC-V汇编代码,并逐步分析程序的执行过程,深入理解存储程序计算机和函数调用堆栈框架在执行过程中所起的作用

实验内容

c程序代码:hello.c

int f(int a, int b){
return a + b;
}

int main(){
int x = 1;
int y = 2;
int k = f(x, y);
return 0;
}

使用如下指令将hello.c汇编成RISC-V汇编代码

riscv64-linux-gnu-gcc -S -o hello.s hello.c

f:                                          
	add	sp,sp,-32      //sp = sp -32 sp为栈顶指针,分配32字节的栈空间
	sd	s0,24(sp)      //将栈底指针s0存储到sp + 24 地址中
	add	s0,sp,32       //更新栈底指针为之前sp所指向的栈顶
	mv	a5,a0          //将a0,a1内容移动到a5,a4中,main函数调用f前将参数保存在了a0和a1
	mv	a4,a1          //寄存器中
	sw	a5,-20(s0)     //将a5的内容保存到s0-20地址中
	mv	a5,a4          //将a4的内容移动到a5中
	sw	a5,-24(s0)     //将a5内容保存到s0-24地址中
	lw	a4,-20(s0)     //将s0-20中的内容加载给a4
	lw	a5,-24(s0)     //将s0-24中的内容加载给a5
	addw	a5,a4,a5   //将a4与a5相加,并保存到a5中
	sext.w	a5,a5      //a5的值进行符号扩展
	mv	a0,a5          //将a5的值移动到a0中
	ld	s0,24(sp)      //将sp+24的值加载给s0,即恢复栈底指针
	add	sp,sp,32       //恢复栈顶指针sp
	jr	ra             //pc寄存器设置为ra中的值

main:
	add	sp,sp,-32        //给栈开辟32字节的空间
	sd	ra,24(sp)        //将返回地址ra保存到栈中
	sd	s0,16(sp)        //将s0栈底指针保存到栈中
	add	s0,sp,32         //s0指向新的基地址
	li	a5,1             //a5 = 1
	sw	a5,-28(s0)       //将a5 存储到s0 - 28 的位置
	li	a5,2             //将立即数2存储到a5中
	sw	a5,-24(s0)       //将a5存储到内存中s0-24的位置
	lw	a4,-24(s0)       //将s0-24的内容存储到a4中  
	lw	a5,-28(s0)       //将s0-25的内容存储到a5中
	mv	a1,a4            //移动a4内容到a1
	mv	a0,a5            //移动a5内容到a0
	call	f            //调用f函数
	mv	a5,a0            //将a5内容移动到a0
	sw	a5,-20(s0)       //将a5的内容存储到s0-29的韦志中
	li	a5,0             //将0加载到a5中
	mv	a0,a5            //将a0的内容移动到a5中
	ld	ra,24(sp)        //恢复ra中的地址
	ld	s0,16(sp)        //恢复栈底指针s0
	add	sp,sp,32         //恢复栈顶指针sp
	jr	ra               //pc寄存器设置为ra的值
	.size	main, .-main
	.ident	"GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"

 

...全文
68 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

571

社区成员

发帖
与我相关
我的任务
社区描述
软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧