assembly - SPARC - 无移位的位掩码

标签 assembly bit-manipulation sparc

我正在学习 SPARC 汇编,我必须创建一个从寄存器中提取字段的脚本。该脚本接受 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 编写代码),所以我不会尝试为您提供完整的解决方案 - 这应该足以让您了解去。

关于assembly - SPARC - 无移位的位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540226/

相关文章:

C 语法/AVR header

artificial-intelligence - 获取位板的占用位掩码

为 x86 和 arm 编译 sparc 代码

windows - 如何更改 MASM32 中的链接器设置

assembly - 有谁知道从哪里获得实际的 Cray PVP 代码?

c++ - 在调用 print 之前清空 %al 寄存器

c - 在 BIOS 程序集中获取存储设备信息

java - 一个测试用例的更新位错误

c - 如何引用动态链接库中的全局变量?