eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingasm - przesuwanie wektora bajtow › Re: asm - przesuwanie wektora bajtow
  • Data: 2015-10-06 12:06:11
    Temat: Re: asm - przesuwanie wektora bajtow
    Od: "M.M." <m...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On Tuesday, October 6, 2015 at 1:09:23 AM UTC+2, Waldek Hebisch wrote:
    > szemrany wrote:
    > > 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?
    > >
    >
    > Napisz w C (niekompletne i nieprzetestowane):
    >
    > carry = 0
    > for(i = 0; i < n; i++) {
    > val = *src++;
    > *dst++ = val<<k | carry;
    > carry = val>>(M-k);
    > }
    >
    > gdzie val i carry sa odpowidniego typu bez znaku, M to ilosc bitow
    > [...]
    > jak to wyglada, zreszta recznie tez latwo przetlumaczyc.

    Na moje tak (też nie kompilowałem):

    if( x < 0 || x > 64 ) abort();
    if( sizeof(tab[0]) != 8 ) abort();
    for( i=n-1 ; i>=0 ; i-- ) {
    tab[i] <<= x;
    if( i > 0 )
    tab[i] |= przesun_na_najmlodsze( najstarsze_bity( tab[i-1] , x ) );
    }

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

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: