|
本帖最后由 BasaraTama 于 2018-11-6 23:59 编辑
设r*代表GPR,GPR位宽32bit,SP是专门用于保存地址的寄存器;0x55555555和0x2都从内存中获取,而不是由立即数构造。
汇编伪代码:
.macro GPR_NUMBER 32 //定义GPR个数
for(i=0;i
store 0x55555555,[SP] ##将0x55555555写入地址为SP的内存空间。由于指令编码长度有限,所以有可能无法在store指令
##中使用大数0x55555555,此时可以采用其他指令分步完成0x55555555的构造。
##比如:
##mov ri,0x5555 ##将立即数0x5555写入ri
##lift_shift ri,0xf ##左移16bit ##addi ri,0x5555 ##ri加0x5555,结果回写入ri,这样就得到了值为0x55555555的ri
load ri,[SP] ##从地址SP指向的内存空间取32bit数到ri,即ri=0x55555555
load r"i+1" ,[SP+4] ##从地址SP+4指向的内存空间取32bit数到r"i+1",即r"i+1"=0x2
mul ri,r"i+1" ##ri乘以r"i+1"
}
以上夹杂c/asm的伪代码,实现了图中的1到4步。
|
|