<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Ujemne_indeksowanie</id>
	<title>Ujemne indeksowanie - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Ujemne_indeksowanie"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Ujemne_indeksowanie&amp;action=history"/>
	<updated>2026-10-03T05:15:38Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=Ujemne_indeksowanie&amp;diff=4059&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Ujemne_indeksowanie&amp;diff=4059&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ujemne indeksowanie używane jest przy wyszukiwaniu rosnącym, można zaoszczędzić w ten sposób porównanie w rejestrze indeksowym.&lt;br /&gt;
&lt;br /&gt;
Przykład: w łańcuchu &amp;#039;&amp;#039;tab&amp;#039;&amp;#039; o długości &amp;#039;&amp;#039;n&amp;#039;&amp;#039; szukamy wartości przekazanej w akumulatorze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      LDY #-n&lt;br /&gt;
_DO   CMP tab-$0100+n,Y&lt;br /&gt;
      BEQ znaleziono&lt;br /&gt;
      INY&lt;br /&gt;
      BNE _DO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje na wielu kolejnych bajtach, jak kopiowanie danych z miejsca na miejsce, dodawanie, odejmowanie lub porównywanie liczb wielobajtowych itd. dobrze jest w celu skrócenia programu zapętlić w podobny sposób.&lt;br /&gt;
&lt;br /&gt;
Zwłaszcza arytmetyka jest często zapisywana w postaci &amp;quot;rozpętlonej&amp;quot;, gdyż sterujący pętlą rozkaz CPX lub CPY zmienia znacznik C rejestru znaczników procesora kasując tym samym informację o przeniesieniu arytmetycznym. Łatwo się jednak tego problemu pozbyć. Zamiast:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    clc&lt;br /&gt;
    lda aaa&lt;br /&gt;
    adc bbb&lt;br /&gt;
    sta ccc&lt;br /&gt;
    lda aaa+1&lt;br /&gt;
    adc bbb+1&lt;br /&gt;
    sta ccc+1&lt;br /&gt;
    lda aaa+2&lt;br /&gt;
    adc bbb+2&lt;br /&gt;
    sta ccc+2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
piszemy (zakładając, że &amp;#039;&amp;#039;aaa&amp;#039;&amp;#039;, &amp;#039;&amp;#039;bbb&amp;#039;&amp;#039;, &amp;#039;&amp;#039;ccc&amp;#039;&amp;#039; to zmienne w głównej pamięci, a &amp;#039;n&amp;#039; - rozmiar takowej w bajtach):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    clc&lt;br /&gt;
    ldx #-n&lt;br /&gt;
add lda aaa-$0100+n,x&lt;br /&gt;
    adc bbb-$0100+n,x&lt;br /&gt;
    sta ccc-$0100+n,x&lt;br /&gt;
    inx&lt;br /&gt;
    bne add&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oszczędzając 13 bajtów pamięci. Gdy zmienne są na stronie zerowej, adresy należy zwiększyć:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    clc&lt;br /&gt;
    ldx #-n&lt;br /&gt;
add lda zaaa+n,x&lt;br /&gt;
    adc zbbb+n,x&lt;br /&gt;
    sta zccc+n,x&lt;br /&gt;
    inx&lt;br /&gt;
    bne add&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ten ostatni przykład NIE będzie działał w trybie natywnym [[65C816]]&amp;#039;&amp;#039;&amp;#039; (bo wygenerowany adres, zamiast &amp;quot;zawinąć&amp;quot; się przez koniec strony zerowej do jej początku, zyska wartość powyżej $00FF).&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Niezbędnik kodera]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>