以汇编语言递归反转位

时间:2011-03-21 03:38:58

标签: assembly

给定16位序列,我想以递归方式反转这些位 例如,1001 1110 0010 0110变为0110 0100 0111 1001。

我只能访问ADD,AND和NOT 子程序接受2个参数,剩余要反转的位数和位值。它返回结果。

我正试图想办法做到这一点。突然出现的一件事就是有一系列的比特:0000 0000 0000 0001开始,然后将自己的剩余比特数加上-1次,然后用传入的比特模式对这些比特进行加权。问题是这看起来非常缺乏,而且我也不确定如何存储结果以反转位。

有关此的任何提示吗?这是家庭作业,所以请提示:)

1 个答案:

答案 0 :(得分:5)

您已经发现可以使用ADD向左移动(向自身添加值)。所以你可以重复移位然后用一个高位设置的常数AND来从最高位到最低位提取位。你可以在AND和NOT之外构建OR(通过DeMorgan定律),这样你就可以将这些位从最低到高重新组合在一起,或者用一个常数1开始向前移动单个位,然后向左移动,这样就可以得到反转位序列。

将其转变为递归过程非常简单