我正在学习 SPARC 汇编,我必须创建一个从寄存器中提取字段的脚本。该脚本接受 3 个值,初始编号、字段起始位置、字段长度。
它不能使用任何移位函数,但可以使用乘法和除法。
我目前患有呼吸道病毒,随后服用了大量药物。我很难弄清楚从哪里开始。一些方向将不胜感激。
问问题
2185 次
1 回答
3
乘以 2 是左移,除以 2 是右移(至少对于无符号数)。
如果你想左移 2 位,那就是乘以 4。
因此,例如,如果您有二进制值:
b15 b0
v V
0000 1111 0101 1000
如果你想提取 b3 和 b2,你会用 0xc0 和整个地段除以 4。
0000 1111 0101 1000
0000 0000 0000 1100 <- AND with 0xc0
-------------------
0000 0000 0000 1000
-------------------
0000 0000 0000 0010 <- divide by 4
由于这听起来有点像家庭作业(而且我已经很长时间没有为 SPARC 编写代码了),所以我不会尝试给你一个完整的解决方案——这应该足以让你继续前进。
于 2009-02-12T06:01:53.897 回答