【发布时间】:2011-08-08 17:04:27
【问题描述】:
我正在编写一个编译器——只是为了好玩和提高我的技能。我想实现 C 语言的一个子集。问题是:我正在编译到名为 Sextium II 的理论上的 16 位 RISC 处理器的汇编器(我们曾经在大学教授汇编器)。
处理器只使用了 16 个命令,而且没有一个是位操作。我想实现 C 位运算符——然后是半精度浮点数——但我不知道如何仅使用 ADD、SUB、MUL 和 DIV 指令来实现位运算。位移很容易,它只是乘以或除以2^n,其中n 是位移长度。但是AND、OR、NOT 或 XOR 呢?
编辑 需要明确的是:处理器仅使用 16 位有符号 U2 算法进行计算。
【问题讨论】:
-
它会很慢,但是 x AND 1 是 x MOD 2,使用循环和移位,每次可以构造一个 16 位 AND。 1 位 x OR y 是 (x AND 1) || (y AND 1)(我假设您已经实现了这个),再次循环将为您提供 16 位版本。 XOR 和 NOT 类似。我确信这可以以更智能的方式完成,但这可以作为后备。
标签: assembly bitwise-operators