Hey guys, I'm writing three small programs to get started out, one to shift a bit value in R0 right by the value in R1 also the same principle but rotating the Bits left and right, and I was wondering if anyone could give any code snippets or plain english pointers on how to do it.

Thanks

Thanks

Okay i have the shift right sorted after alot of pain and fiddling :) could someone hint to what the rotate right and left like... operators are? Maybe its not the right word but, shift right is a divide, what are the rotates equivalent to?

Read the description here.

Thanks for your reply but we dont have the RCL or any rotate commands using the LC3 - I have some code which is buggy, if you could help with that, that would be awesome.

The question mark bits are where im stuck, the mask is used to find the most significant bit... Basically R0 needs to be rotated by the amount specified in R1

I get an error saying Invalid instruction at PC=X3000; RTI executed with user mode privilege

.ORIG x3000;

MASK .FILL x8000;

ADD R0, R0, #0; check R0 is positive

BRp IS_POSITIVE ; if the value is negative or zero, this code will be skipped

LOOP LD R3, MASK; store mask in register

AND R2, R3, R2; stores the leftmost bit in R2

ADD R0,R0,R0; ADD R0 to iteslf

ADD R2, R2, R2; restores the check for leftmost bit

IS_POSITIVE; will execute if positive value in R0

ADD R0, R0, #1;

LDR R4, R1, #0; R4 used for counter

ADD R4,R4, #-1; decrement counter

; If counter < R1 , go back to start of loop ???

BRp LOOP

HALT

.END

The question mark bits are where im stuck, the mask is used to find the most significant bit... Basically R0 needs to be rotated by the amount specified in R1

I get an error saying Invalid instruction at PC=X3000; RTI executed with user mode privilege