计算机组成原理 3.riscv学习

riscv指令的格式:

也就是说我们的内存(主存)最大可以有2^31GB大小,离谱。

这些都要记得。

算术运算指令:

立即数:

带一个i。

注意:没有立即数减法,因为可以用加法代替:

乘法和除法:

逻辑运算:

注意:这些操作都是按位的,每一位都要对比。

移位操作:

数据传输指令(就是访问主存的):

格式:

这里讲一下内存是怎么寻址的。

 

load word ,store word。

实例:

前面的数字是字节数,要乘以4.

 

字节排布:

就是说A[0]会是最低位。

比较指令:

 

没有写u,当然是有符号数。

 

条件分支指令:

B就是跳转,eq就是相等,ne就是不相等,lt就是less than,ge就是greater或eq。

例子:

无条件跳转:

这些寄存器要记住:

 伪指令:

举个例子:

 开头那个是函数名字,代表跳转到这里来了。弹出其实就是把指针往上移了一下。X1是返回地址。

刚刚这个例子牵涉到了函数,这里详细讲讲:

函数的调用:

jal记得是什么吗?会跳转到pa,同时在x1记下当前这个jal指令的pc+4,也就是紧接着下面的指令。等到函数用完了返回的时候,就可以直接用x1回来。

函数返回的时候都是以ra为标准返回的。为什么不可以像之前调用函数一样用j简单快捷的返回呢?因为调用函数的地方有很多,每个地方调用的都是同一个函数,j跳转的是固定位置,那岂不每次返回都要变成固定位置?所以只能是用ra记录一下这次是谁在调用函数,就像做了一个标记一样。

那个/是或的意思,不是除的意思,ppt有点歧义。

大家的寄存器就这么多,很容易不够用。比如说我要函数嵌套,ra里面存好了一开始的地址,结果函数里面又调用了一个函数,ra岂不就被覆盖了?所有我们要想办法,就是栈:

 我更愿意把它想象成弹簧。

 

内存分配:

函数嵌套的例子:

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值