开发者

Implementing rotate left using AND, NOT, and ADD operations

开发者 https://www.devze.com 2023-02-13 20:57 出处:网络
I\'m implementing a 16-bit bit shifter to rotate bits to the left by r.I only have access to the AND, NOT and ADD operations.There are 3 condition codes: negative, zero and positive, which are set whe

I'm implementing a 16-bit bit shifter to rotate bits to the left by r. I only have access to the AND, NOT and ADD operations. There are 3 condition codes: negative, zero and positive, which are set when you use any of these operations.

This is my approach:

  1. AND the number with 1000 0000 0000 0000 to set condition codes to positive if the most significant bit is 1.
  2. ADD the number with itself. This shi开发者_运维问答fts bits to the left by one.
  3. If the MSB was 1, ADD 1 to the result.
  4. Loop through steps (1)-(3) r times.

Are there any other efficient ways I can do this?


Since this is homework, I'll help you think about it.

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

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

A left shift is a [some unknown] operation. That [some unknown] operation can be implemented using AND, NOT and ADD by doing...


Here's some x86 code to get you started:

; 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:
0

精彩评论

暂无评论...
验证码 换一张
取 消