Przesuniecie z przeniesieniem

0

Witam, w asm jest cos takiego jak ROR czy ROL - przesuniecie z przeniesieniem (obrot) w lewo i w prawo. W Delphi jest shl i shr. Jak najprosciej zasymulowac przeniesienie? Wymyslilem cos takiego (Data jest typu Byte):

Data := (Data shl 1) or ((Data and 128) shr 7)

Dodam, ze chodzi mi o przesuiniecie o jedna pozycje w lewo. Ma ktos moze pomysl jak to zrobic optymalniej?

0

A czemu nie chcesz użyć wbudowanego w Delphi assemblera?

0

Bo akurat asm na PC to nie znam. Na x86 swiat sie nie konczy ;) Jak znasz rozwiazanie to podaj. No i jeszcze jakby co to Data moze byc tablica.

// Edit

W tej chwili mam taki kod:

for i := 0 to 7 do
  Data[i] := (Data[i] shl 1) or ((Data[i] and 128) shr 7);
0

Jak tablica Byte to np jakoś tak

 asm
    lea eax, Data
    xor ecx, ecx
    @@:
    rol byte ptr [eax + ecx - 1], 1
    inc ecx
    cmp ecx, 7
    jle @@
  end;

EDIT//
nie wiem czemu skrypt wstawia jakieś smieci do kodu
tam ma być rol byte ptr [eax + ecx - 1], 1

0
function RotateByteLeft(const AByte, Positions: Byte): Byte register;
assembler;
asm
rol al, dl
end;

ror analogicznie

0
Misiekd napisał(a)
function RotateByteLeft(const AByte, Positions: Byte): Byte register;
assembler;
asm
rol al, dl
end;

ror analogicznie

Misiekd w czym to skompilujesz?

0

Delphi 2005 Architect wywala mi cos takiego przy kompilacji
Invalid combination of opcode and operants
Sorry ze truje dupe, w innych przypadkach bym sobie sam poradzil, ale asm x86 nie znam wcale.

0

Mój kod działa tam masz w pętli ROL dla wszystkich 8 (0 do 7) elementów tablicy.
Ale jak chcesz funkcję to:

function ROL1(AByte: Byte): Byte; register; assembler; //można też bez assembler;
asm
  rol al, 1
end;
0
kAzek napisał(a)

Mój kod działa tam masz w pętli ROL dla wszystkich 8 (0 do 7) elementów tablicy.
Ale jak chcesz funkcję to:

function ROL1(AByte: Byte): Byte; register; assembler; //można też bez assembler;
asm
  rol al, 1
end;

Wielkie dzieki, kod sie kompiluje i dziala, o to mi chodzilo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1