2011-03-21 28 views
2

遞歸倒車位,我想遞歸扭轉這些位。
例如,1001 1110 0010 0110變成0110 0100 0111 1001.在給定的16位序列彙編語言

我只能訪問ADD,AND和NOT。
子程序接受2個參數,其餘被反轉的比特的數量和所述比特值。它返回結果。

我試圖想辦法做到這一點。離開0000 0000 0000 0001啓動,並與自身增加它的位數要處理的左-1倍,然後在位模式傳遞的安定這些位:這是突然出現在我的腦海中有位序列的一件事。問題是這看起來很不夠用,而且我不確定如何存儲結果來反轉這些位。

對此有何提示?這是作業,所以只是提示請:) :)

+0

我假設你被允許使用某種跳轉嗎?那麼MOV和CMP和測試呢? – user470379 2011-03-21 03:43:55

+0

是的。跳躍,分支,那種事情。我沒有這些。但是,當我使用ADD,AND或NOT時,會設置3個條件代碼,即Negative,Zero和Positive。我可以使用這些來確定我想要分支的位置。我沒有MOV CMP或測試。 – CPlayer 2011-03-21 03:49:23

回答

5

你已經想通了你可以使用ADD左移(向自己添加一個值)。因此,您可以重複移位,然後使用一個常數設置爲1的高位來提取從最高位到最低位的位。你可以通過AND和NOT(通過DeMorgan定律)建立OR,所以你可以通過將常數1開始的單個位組合起來,將這些位從最低位重新組合到最高位,並在你走的時候向左移動,這會給你顛倒位序列。

把這個轉換成一個遞歸過程是相當直接的