MIPS SW和LW负偏移

问题描述 投票:-1回答:2

我正在做旧考试,以学习即将开始的考试。但是,我不明白这个问题。一些帮助将不胜感激。谢谢!

enter image description here

我了解A,C和D是什么。但是我一生无法理解如何获得B和E的答案。我不知道SW和LW使用负“偏移”值时会发生什么情况?

答案是:

assembly mips
2个回答
1
投票

A是符号扩展立即值-在此处符号扩展到32位后为-20(从I型立即数起16位为0xFFEC)。符号扩展意味着将32的高16位填充为与16位立即数的符号位相同的值,即取决于16位立即数的符号,这些高16位要么全为0要么全为1。如果16位立即数为负,则用1填充32的前16位将保持相同的值(-20)。

B看起来像是在标记数据存储器旁路,在这种情况下,它保存了负载的32位有效地址-当此值被馈送到数据存储器(位于DataMemory.A)时,该特定数据路径lw不会消耗到下一个多路复用器。

[C是加载的目标寄存器,$s2

[DPC + 4设置为执行lw之后的下一条指令

E是从内存中读取的值。


0
投票

请先理解代码

   40210:   20083ff0    addi    $8,$0,16368
   40214:   21080010    addi    $8,$8,16
   40218:   ad08fff8    sw  $8,-8($8)
   4021c:   2108000c    addi    $8,$8,12
   40220:   8d12ffec    lw  $18,-20($8)

然后检查图片,并获得答案,然后看到可以连接点的代码,在获得答案之前会得到更多的工作,但是无论哪种方式都必须完全理解代码。

40210:  20083ff0    addi    $8,$0,16368
$8 = 0 + 0x3FF0 = 0x00003FF0

40214:  21080010    addi    $8,$8,16
$8 = $8 + 16 = 0x3FF0 + 0x10 = 0x4000

40218:  ad08fff8    sw  $8,-8($8)
memory_address $8 - 8 = contents of $8
[0x4000 - 8] = 0x4000
[0x4000 + (-8)] = 0x4000
[0x4000 + (0xFFFFFFF7 + 1)] = 0x4000
[0x00004000 + 0xFFFFFFF8] = 0x4000
[0x00003FF8] = 0x4000

4021c:  2108000c    addi    $8,$8,12
$8 = $8 + 12 = 0x4000 + 0xC = 0x400C

40220:  8d12ffec    lw  $18,-20($8)
$18 = [$8 - 20]
$18 = [0x0000400C - 0x14]
$18 = [0x0000400C + (-0x14)]
$18 = [0x0000400C + 0xFFFFFFEC]
$18 = [0x00003FF8]
$18 = 0x4000

您可以在最后一条指令中看到0xFFEC,然后在A符号前面的符号扩展将位15扩展为0xFFFFFFEC。

B是alu 0x0000400C + 0xFFFFFFEC = 0x00003FF8的输出

C是指令的位20:16,0x12、0x12 = 18,如$ 18所示

D是下一条指令地址0x40224

E 0x4000读取0x3FF8的结果。

了解此图不是真正的设计,这是一项学术练习,但是我认为您已经使用该图了数周/数月/章...因此,在阅读/理解代码之后,您应该熟悉它。例如,C应该是下一条指令中的位,或者是后两条指令中的位,而不是当前位。但是,不要试图纠正教授这一点,您会迷失方向。教授就学校而言是正确的,在那之后现实就是正确的,或者是您的老板/导师。 D也是错的,实际上大多数人都是错的,但是没关系,按照教学的方式使用它,这是一种视觉练习。

[好东西,您有答案,否则我们会根据显示的图形而不是您所教的内容为您提供答案。这会让您更加困惑。

© www.soinside.com 2019 - 2024. All rights reserved.