我正在实现一个16位移位器,通过 r 向左旋转位。我只能访问AND
,NOT
和ADD
操作。有3个条件代码:负,零和正,它们在您使用任何这些操作时设置。
AND
如果最高有效位为1000 0000 0000 0000
,则1
的数字可将条件代码设置为正数。 ADD
自己的号码。这将位向左移位一位。 1
,ADD
1
。 我还有其他有效的方法吗?
答案 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: