我正在編寫一個編譯器 - 只是爲了好玩並提高我的技能。我想實現一個C語言的子集。問題是:我正在編譯名爲Sextium II的理論16位RISC處理器(我們曾經在我們的大學教過它的彙編器)的彙編器。僅通過ADD,SUB,MUL和DIV指令來實現位操作
該處理器只使用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類似。我相信這可以通過更智能的方式完成,但這可以作爲後備工作。 – user786653