eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingasm - przesuwanie wektora bajtow › Re: asm - przesuwanie wektora bajtow
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!newsfeed.fsmpi.
    rwth-aachen.de!newsfeed.straub-nv.de!weretis.net!feeder1.news.weretis.net!news.
    roellig-ltd.de!open-news-network.org!border2.nntp.ams1.giganews.com!border1.nnt
    p.ams1.giganews.com!nntp.giganews.com!newsfeed.neostrada.pl!unt-exc-02.news.neo
    strada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    Subject: Re: asm - przesuwanie wektora bajtow
    Newsgroups: pl.comp.programming
    References: <a6cvewd1yimk$.1h0av09ee1pjl$.dlg@40tude.net>
    From: "Bogdan (bogdro)" <b...@p...gazeta.pl>
    X-Enigmail-Draft-Status: N1110
    Date: Mon, 5 Oct 2015 21:15:44 +0200
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Thunderbird/38.3.0
    MIME-Version: 1.0
    In-Reply-To: <a6cvewd1yimk$.1h0av09ee1pjl$.dlg@40tude.net>
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: 8bit
    Lines: 51
    Message-ID: <5612cc62$0$27511$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 89-69-232-64.dynamic.chello.pl
    X-Trace: 1444072546 unt-rea-a-02.news.neostrada.pl 27511 89.69.232.64:3644
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:208432
    [ ukryj 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: