【发布时间】:2020-12-13 18:31:57
【问题描述】:
学习 RiscV 我的讲师定义了一个名为 Load Upper Immediate (lui) 的新命令,如下所示:
lui rt, imm
将立即 imm 的下半字加载到上半字中 寄存器 rt。寄存器的低位设置为0。
以下图片:
但有几件事我无法理解:
-
“加载立即数的下半字”是什么意思?我认为如果我们在 imm 中有 32 位,那么它会加载前 16 位,对吗?
-
图像是否正确?前半部分不应该全为零并且定义提到了吗?为什么我们有那些 0xf, 0, rt 以及 rt 是从哪里来的?
-
给定以下命令:
lui S0, 0x1234
它会做什么?不知道内存中1234位置的值...
【问题讨论】:
-
immediate= 作为编码指令一部分的数字常量。也称为数字 0x1234。不代表地址,它只是一个数字。 -
而且图像只是显示了指令编码(如果你用汇编程序编写这条指令,这些字节将按此顺序出现在生成的二进制文件中......),没有什么是对或错的那里。除非你在其中发现了一些错误。
-
@dratenik 所以 3 会在 S0 中节省 1234/2?另外 0x1234 不是十六进制的数字吗?我完全糊涂了
-
引用 Erik 的回答“s0 变为 0x12340000”。是的,这是一个十六进制数字。
-
您得到的答案是正确的,并且尽可能简单。现在轮到你看笔记,复习基础知识并尝试理解你被告知的内容。我仍然觉得您不理解带有指令编码的图像的含义,因此请特别确保您理解您在其中看到的内容。
标签: assembly mips riscv machine-code immediate-operand