计算机体系结构L7 & L8

L7 过程调用

caller和callee各有各的责任

 

每个register的作用展示

 

jal 是 jump and link 两步:第一个把下一个指令的地址给ra,第二个是跳的target address

jr copy the ra to the pc

 因为可能重复使用相同的register,这样就污染了调用者的状态,于是我们把要保留的register的压栈,一般来说S的寄存器要压栈,而temp的寄存器don't care

然而对于递归调用来说,我们要考虑的更多:

 

因为这个参数和ra可能会被重写,所以要压栈

 

 

Callee权利:1.可以谁便使用v, a, t类型的寄存器,2.假设参数被正确传递

Caller为此做的保证:save ra, a, v, t

Caller可以不保留s,因为s如果会被callee使用,会存在栈上先

 

 load byte,因为不够寄存器的大小,所以要扩展:1.符号扩展和2.无符号扩展,取决于load的类型lb, lbu。

关于立即数太大的问题

可以把16bit为前移动,然后,再来or上一个16bit的数,这样就成了一个32bit的数辣(:

 

beq和bne的,rs, rt是两个要比较的寄存器,同时因为我们的instruction都是4个byte,也都是从4的倍数地址开始的。so使用不是4倍数的byte 是非法的,所以这个immediate是word immediate (offset = immediate * 4)因为我们默认pc已经加了4了,所以这个offset是作用在pc + 4上面的

 L8

 

 

 

因为这个opcode要保留6bit,所以我们最多给这个26bit给这个地址。同时利用上面提到的优化,我们从后面补两个0,就是4的倍数。但是我们还是少了4个bit,怎么解决?毕竟内存是2的32次方的

我们从pc头部借用4个bit, 然后我们将内存分为16个分区,这样我们在与pc同一个分区内的地址就可以任意到达。

 

关于这个256MB = 2 8 10 10  bits?可能是ppt写错了。。。

 

 

 compiler是把higher level变成汇编语言,然后变成机器码,然后一些不知道怎么跳转的地方,通过linker来后面决定,然后就从内存读取程序运行辣

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值