🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #1688

Re: przesunięcie cykliczne

#1688
From: rwt
Date: Tue, 22 Jan 2008 11:33
63 lines
3310 bytes
piotrg stuknął:
> Mam mały problem i może mi pomożecie . Mam jakiś obszar pamięci n*8 bitowy
> gdzie n jest podane muszę napisać program w asm który o robi obrót cykliczny
> tego obszaru o zadaną liczbę bitów p. Proszę o jakieś wskazówki.
>
>
> Myślałem żeby to rozkazem ROL zrobić ale to chyba mija się z celem.
>
> Może to jakość cześciowo ale nie mam pomysłu proszę o pomoc.

Rezerwacja bloku pamięci (optymalnie o rozmiarze bądź wielokrotności rozmiaru strony pamięci wirtualnej),

umieszczenie w tym bloku na końcu początkowego fragmentu bloku (o tym samym rozmiarze), w którym będzie początek tablicy bitów po obrocie bitów,
[przesuwamy o 16 bitów przy rozmiarze tymczasowego bloku pamięci do kopiowania 10 bitów]
|         |     0   |          |
0        10   / ^  20         30
	    /   tu będzie początek tablicy po obrocie bitów
	  |   |     |
	  0^^^
    skopiowana pamięć z pierwszego kopiowanego bloku

przekopiowanie pamięci od nowego początku tablicy (optymalną metodą dla danego sprzętu),

przepisanie mapowania stron pamięci wirtualnej tak, by były liniowo od starego adresu.


Albo (jeśli nie możliwe jest przepisanie mapowania stron pamięci):

Skopiowanie krótszego fragmentu tablicy od nowego początku do początku lub końca tablicy do bufora,

przekopiowanie pamięci od nowego początku tablicy,

skopiowanie fragmentu tablicy z bufora na koniec lub początek.


Albo (jeśli również brak pamięci wirtualnej):

Rezerwacja maksimum dostępnej wielokrotności bloków jako tymczasowej pamięci,

przekopiowywanie kolejnych fragmentów tablicy od nowego początku tablicy na początek tablicy,
zachowując je w tymczasowej pamięci, podczas gdy przekopiowuje się na ich miejsce fragment tablicy, przygotowując miejsce na ich zapisanie.


Albo (jeśli ma być wolne, bo tak żąda zleceniodawca ;> ):

Przenoszenie danych w pętli przy pomocy pojedynczego słowa maszynowego za każdym razem.


Albo (jeśli ma być szczególnie wolne, bo to poprzednie było zbyt szybkie ;>> ):

Użycie w tym celu instrukcji maszynowych służących do przesuwania o podaną liczbę bitów,

utworzenie zależności w pętli w taki sposób, by nie mogła być rozwinięta,

wymuszenie zliczania kopiowanych słów, by powstała konieczność obliczania licznika.


Jeśli potrzebne coś wolniejszego, to „zrób to sam”, na pewno coś wymyślisz lepiej.
-- 
 qo   |)      CPL: cs[0..1] (ss[0..1]) p lvl of curr code!
    _x/ ,     RPL: seg_sel[0..1] privilege lvl of seg_sel!
    |    ng  __ -- __ -- __ -- __ -- __ -- __ -- __ -x86-,
,__ -- __ -- DPL: 2._word_of_seg_desc[13..14]:`f seg_desc ,
Technical Details
Message-ID: <fn4k9g$51k$1@news.mixmin.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!feeder.erje.net!news.mixmin.net!not-for-mail
References: <fn0epa$mif$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!feeder.erje.net!news.mixmin.net!not-for-mail
From: rwt <rwt@big-orange.com>
Newsgroups: pl.comp.lang.asm
Subject: Re: przesunięcie cykliczne
Date: Tue, 22 Jan 2008 12:33:05 +0100
Organization: opRWTng
Lines: 63
Message-ID: <fn4k9g$51k$1@news.mixmin.net>
References: <fn0epa$mif$1@inews.gazeta.pl>
Mime-Version: 1.0
X-Complaints-To: abuse@mixmin.net
NNTP-Posting-Date: Tue, 22 Jan 2008 11:33:16 +0000 (UTC)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit