-
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
Następne wpisy z tego wątku
- 05.10.15 21:23 szemrany
- 05.10.15 21:24 szemrany
- 05.10.15 21:47 M.M.
- 06.10.15 01:09 Waldek Hebisch
- 06.10.15 06:55 slawek
- 06.10.15 10:26 Radoslaw Szwed
- 06.10.15 12:06 M.M.
Najnowsze wątki z tej grupy
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-05-20 Fiat wymyślił i zaprojektował Citroena Ami? ;)
- 2024-05-20 Nowe obowiązkowe wyposażenie samochodów
- 2024-05-20 Telewizor przestał widzieć sygnał z anteny
- 2024-05-20 Opole => Consultant/Implementer Comarch ERP XL <=
- 2024-05-20 Białystok => Starszy inżynier oprogramowania (Rust) <=
- 2024-05-20 Warszawa => Java Engineer <=
- 2024-05-20 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-05-20 Zielona Góra => Engineer R&D Mechanic <=
- 2024-05-20 Zabrze => Junior HelpDesk <=
- 2024-05-20 Warszawa => Key Account Manager <=
- 2024-05-20 Warszawa => Programista Full Stack .Net <=
- 2024-05-20 Kraków => Senior .Net Programmer <=
- 2024-05-20 Kraków => Programista .Net - Senior <=
- 2024-05-20 Fiat 125p wer. pikup - w PRL moszna było, w III Reczy [pospolitej] nie moszna
- 2024-05-19 Pożar salonu z chińskimi elektrykami