-
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
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-06-10 wyobrazcie sobie ze
- 2024-06-10 malowanie samochodu
- 2024-06-10 News from Poland
- 2024-06-10 Czy na pewno będą CŁA na chińskie samochody?
- 2024-06-09 Dlaczego w Polsce sie nic nie udaje, na przykładzie niebieskiego lasera a teraz perskowitów
- 2024-06-09 Dlaczego w Polsce sie nic nie udaje, na przykładzie niebieskiego lasera a teraz perskowitów
- 2024-06-09 Wykrywanie przerwy w długim przewodzie zakopanym w ziemi.
- 2024-06-09 Czemu news.chmurka.nwt jest taki wolny?
- 2024-06-11 Funbox 3.0 zakres adresów DHCP
- 2024-06-11 Re: Funbox 3.0 zakres adresów DHCP
- 2024-06-09 Miernik szybkości netu
- 2024-06-11 Panele PV w pionie (prawie).
- 2024-06-11 czy ta grupa żyje?
- 2024-06-11 Warszawa => Senior React Native Developer <=
- 2024-06-11 Gdańsk => Kierownik Działu Spedycji Międzynarodowej <=