使用AND,NOT和ADD操作实现向左旋转

时间:2011-03-01 02:00:55

标签: assembly

我正在实现一个16位移位器,通过 r 向左旋转位。我只能访问ANDNOTADD操作。有3个条件代码:,它们在您使用任何这些操作时设置。

这是我的方法:

  1. AND如果最高有效位为1000 0000 0000 0000,则1的数字可将条件代码设置为正数
  2. ADD自己的号码。这将位向左移位一位。
  3. 如果MSB为结果1ADD 1
  4. 循环执行步骤(1) - (3) r 次。
  5. 我还有其他有效的方法吗?

2 个答案:

答案 0 :(得分:1)

由于这是家庭作业,我会帮你考虑一下。

2 * 2 = 4
4 * 2 = 8
8 * 2 = 16

0010 * 0010 = 00100
0100 * 0010 = 01000
1000 * 0010 = 10000

左移是[某些未知]操作。可以使用AND,NOT和ADD来实现[某些未知]操作......

答案 1 :(得分:0)

这里有一些x86代码可以帮助您入门:

; I'm assuming the number you want to rotate is in ax
; I'm assuming the number of bits to rotate is in cx
loop_start:
  add cx, -1                  ; Can only use add, so add -1
  jo loop_end                 ; If cx is < 0
  mov bx, ax                  ; Copy ax into bx
  add ax, ax                  ; shift ax left 1 bit
  and bx, 1000000000000000b   ; Test the msb of bx
  jz loop_start               ; if the msb is zero, jump
  add ax, 1                   ; if the msb is one, add one to ax
  jmp loop_start              ; Loop
loop_end: