Linux操作系统_Lab1

歇尔 2023-03-14 15:15:08

实验要求

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

1.编写C语言代码

int square(int num){
   return num*num;
}
int main(){
   return square(3)+4;
}

2.生成的汇编代码及其注释如下:

	.file	"lab1.c"
	.option pic
	.text
	.align	1
	.globl	square
	.type	square, @function
square:                              //square函数入口
	addi	sp,sp,-32                //修改栈指针sp=sp-32,push
	sd	s0,24(sp)                    //将s0寄存器的值存储到sp+24的位置上
	addi	s0,sp,32                 //将sp+32的值存入s0
	mv	a5,a0                        //将a0存放的参数存入a5
	sw	a5,-20(s0)                   //将a5中的值保存到s0-20的位置上
	lw	a5,-20(s0)                   //将s0-20的值写入a5
	mulw	a5,a5,a5                 //将a5的值与a5的值相乘,结果写入a5
	sext.w	a5,a5                    //将寄存器a5中的3位有符号整数进行符号扩展,扩展为64位有符号整数,结果存放在寄存器a5中
	mv	a0,a5                        //将a5存放的参数存入a0
	ld	s0,24(sp)                    //将地址为sp+24的数据从内存中加载到寄存器s0中
	addi	sp,sp,32                 //将sp+32的数据存入sp
	jr	ra                           //程序跳转指令
	.size	square, .-square 
	.align	1
	.globl	main
	.type	main, @function
main:
	addi	sp,sp,-16                //修改栈指针sp=sp-16,push
	sd	ra,8(sp)                     //ra是返回地址寄存器,将ra寄存器的值存储到sp+8的位置上
	sd	s0,0(sp)                     //s0是保存寄存器,用来保存函数调用前后不变的值,可以保存                                栈底将s0寄存器的值存储到sp的位置上
	addi	s0,sp,16                 //将sp+16的值存入s0
	li	a0,3                         //将立即数3加载到寄存器a0中
	call	square                   //调用square函数
	mv	a5,a0                        //将a0存放的参数存入a5
	addiw	a5,a5,4                  //将a5中的值加上4存入a5中
	sext.w	a5,a5                    //将寄存器a5中的3位有符号整数进行符号扩展,扩展为64位有符号整数,结果存放在寄存器a5中
	mv	a0,a5                        //将a5存放的参数存入a0
	ld	ra,8(sp)                     //将sp+8位置的数据取出并存入ra中
	ld	s0,0(sp)                     //将sp指向的值存入s0中
	addi	sp,sp,16                 //将sp+16指向的值存入sp
	jr	ra                           //程序跳转指令
	.size	main, .-main
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0"
	.section	.note.GNU-stack,"",@progbits

 

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

571

社区成员

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

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