eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingasm - przesuwanie wektora bajtow › Re: asm - przesuwanie wektora bajtow
  • Data: 2015-10-05 21:15:44
    Temat: Re: asm - przesuwanie wektora bajtow
    Od: "Bogdan (bogdro)" <b...@p...gazeta.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 04.10.2015 o 15:10, szemrany pisze:
    > Witam
    >
    > Potrzebuję przesunąć tablicę/wektor bajtów w lewo o zadaną liczbę bitów. Po
    > jakimś tam czasie czytania i prób zrobiłem prockę opartą o instrukcję RCL
    > przesuwająca o jeden bit:
    >
    >
    > mov ebx, x // liczba bajtów w wektorze
    > mov eax, end_byte // adres ostatniego elementu
    > clc
    > @@loop:
    > mov cl, byte ptr [eax]
    > rcl cl, 1
    > mov byte ptr [eax], CL
    > dec eax
    > dec ebx
    > jne @@loop
    >
    > Teraz, gdy chcę przesunąć o 3 bity to wykonuję ten kod w pętli trzy razy.
    >
    > Czy ten kod można zoptymalizować bardziej?
    > Czy można to zrobić inaczej, bez RCL?
    >

    Witam.

    Sądząc po kolejnych postach, ten kod NIE robi tego, co chcesz, bo nie
    przenosisz wypchniętych bitów do kolejnych bajtów.
    Potrzebujesz takiego "SHL o wielokrotnej precyzji". Robi się to
    kombinacją instrukcji SHL i RCL. Poczytaj
    http://bogdro.ciki.me/dos/a_kurs14.htm#a_kurs1405_1. Można też
    przesuwać bity w więcej niż 1 bajcie na raz. Skoro masz dostępne
    rejestry 32-bitowe, możesz załadować i przesuwać 32 bity na raz, po
    czym te 8 bitów z ostatniego bajtu.
    Niestety, jeśli nie masz rejestru dość długiego, aby pomieścić te
    dane, to trzeba przesuwać bit po bicie, inaczej bity się pogubią.
    Wartość 40-bitową można zmieścić w rejestrze 64-bitowym (jeśli masz
    takowe dostępne), wtedy wykonujesz po prostu SHL od razu o tyle bitów,
    ile trzeba.
    Zwróć też uwagę, że prawdopodobnie powinieneś zaczynać od pierwszego
    (najmłodszego) bajtu, choć to zależy dokładnie od tego, jak traktujesz
    swoje dane (tamten post z zerami i jedynkami nie pokazywał, który bajt
    jest najmłodszy, a który - najstarszy).


    --
    Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
    Kurs asemblera x86 (DOS, GNU/Linux): http://bogdro.ciki.me
    Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
    www.Xiph.org www.TorProject.org Soft(EN): http://bogdro.ciki.me/soft

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: