我只是想找人帮我把一些值加载到某些寄存器中。
该任务是“指示编译器将值0x2222333344445555和0x1111222233334444分别存储在地址0x1000100010001000和0x1000100010001100。在运行时将值加载到寄存器x6和x7......"。
从阅读PDF文件提供的信息以及问题,到目前为止我的代码看起来像这样:
ORG 0x1000100010001000
a: DD 0x2222333344445555
ORG 0x1000100010001100
b: DD 0x1111222233334444
2条答案
按热度按时间4ktjp1zp1#
我假设这是rv 64 i,当问risc-v这样的问题时,你需要指定指令集。
您可以让编译器引导您开始
例如:
它显示了两种解决方案,在多个指令中构建值。或者将值加载到寄存器中。
好的,是的,编译器使用了rv 64 ic,它抱怨我的命令行,所以我使用了:
我建立了一个交叉编译器,如果你喜欢的话,你可以使用godbolt。
lui给你20位的立即数。使用指令,任何64位的值都需要3个lui,一些移位和或运算。还有一个addi或orri。然后使用sd来进行双字(64位)存储。
r6vfmomb2#
是的,它有一个伪指令,用于直接加载寄存器,称为“li”(立即加载)。格式为:li x5,5 #加载十进制数为5的x2寄存器。“li”伪指令使用“addi”指令与x0寄存器组合,该寄存器始终为0(硬连接为0)。示例如下:addi x5,x0,5 #这和上面的例子做的完全一样。你可以在这里测试你的代码,而不是使用gcc:https://riscvasm.lucasteske.dev/#