Text formatted with Texy:
Asembler HC08
Registry
- A (8b)
- HX (16b)
- SP (16b)
- PC (16b)
- CCR (8b) – stavový registr:
- V
- H
- I
- N
- Z
- C
Instrukce
- Rozdělení
- přesuny dat
- aritmetické
- logické
- řídící
Operační kód každé instrukce je 1 bajt.
Přesuny dat
Akumulátor
- LDA: vložení do A
- STA: vložení z A do paměti
Zásobník
* PSHA, PSHX, PSHH : push
* PULA, PULX, PULH : pop Zásobník roste od vyšších adres k nižším. SP
vždy ukazuje na první volné místo.
Aritmetické
- ADD, SUB: A s operandem
- MUL: X * A → X:A
- DIV: H:A / X → A, zbytek → H
- NEGA: dvojkový doplněk A
- CLR: nulování paměti
- CLR[A/H/X]: nulování registrů
- [INC/DEC][X/A]: změny o 1
Logické
- Bxxx: podmínky – rozhodují podle obsahu A
ostatní
- RSP: reset HX a SP:
- HX, SP ← 00FF
Zápis hodnot
- %xxx: dvojkově
- $xxx: šestnáctkově
- jinak: desítkově
HC08 je big-endian, tj. bajty ve slově i bity v bajtu jsou s rostoucí adresou od MSB do LSB – stejně jako číslo normálně napsané na papír. x86 je little-endian, tj. bajty ve slově jsou opačně.
Adresování
- vlastní (inherent): (bez operandu)
- přímý operand (immediate): #operand
S neoznačeným operandem
* přímé (direct): adresa 0–255 (přístup do tzv. nulté stránky)
* rozšířené (extended): 2-bajtová adresa (přístup kamkoliv)
* indexované (indexed): bázová adresa a offset
* relativní (relative): posun od aktuální instrukce (používají
to skoky)
Paměť
- IO & Control ($0000)
- RAM ($0040):
- Relocatible Stack ($0040)
- User RAM ($00FF)
- (nic)
- User Flash/ROM ($8000)
- Monitor ROM ($FE20)
- (něco dalšího)
- Interrupt Vectors ($FF52)
Generated HTML code:
<h1 id="toc-asembler-hc08">Asembler HC08</h1>
<h2 id="toc-registry">Registry</h2>
<ul>
<li>A (8b)</li>
<li>HX (16b)</li>
<li>SP (16b)</li>
<li>PC (16b)</li>
<li>CCR (8b) – stavový registr:
<ul>
<li>V</li>
<li>H</li>
<li>I</li>
<li>N</li>
<li>Z</li>
<li>C</li>
</ul>
</li>
</ul>
<h2 id="toc-instrukce">Instrukce</h2>
<dl>
<dt>Rozdělení</dt>
<dd>přesuny dat</dd>
<dd>aritmetické</dd>
<dd>logické</dd>
<dd>řídící</dd>
</dl>
<p>Operační kód každé instrukce je 1 bajt.</p>
<h3 id="toc-presuny-dat">Přesuny dat</h3>
<h4 id="toc-akumulator">Akumulátor</h4>
<ul>
<li>LDA: vložení do A</li>
<li>STA: vložení z A do paměti</li>
</ul>
<h4 id="toc-zasobnik">Zásobník</h4>
<p>* PSHA, PSHX, PSHH : push<br>
* PULA, PULX, PULH : pop Zásobník roste od vyšších adres k nižším. SP
vždy ukazuje na první volné místo.</p>
<h3 id="toc-aritmeticke">Aritmetické</h3>
<ul>
<li>ADD, SUB: A s operandem</li>
<li>MUL: X * A → X:A</li>
<li>DIV: H:A / X → A, zbytek → H</li>
<li>NEGA: dvojkový doplněk A</li>
<li>CLR: nulování paměti</li>
<li>CLR[A/H/X]: nulování registrů</li>
<li>[INC/DEC][X/A]: změny o 1</li>
</ul>
<h3 id="toc-logicke">Logické</h3>
<ul>
<li>Bxxx: podmínky – rozhodují podle obsahu A</li>
</ul>
<h3 id="toc-ostatni">ostatní</h3>
<ul>
<li>RSP: reset HX a SP:
<ul>
<li>HX, SP ← 00FF</li>
</ul>
</li>
</ul>
<h2 id="toc-zapis-hodnot">Zápis hodnot</h2>
<ul>
<li>%xxx: dvojkově</li>
<li>$xxx: šestnáctkově</li>
<li>jinak: desítkově</li>
</ul>
<p>HC08 je big-endian, tj. bajty ve slově i bity v bajtu jsou s rostoucí
adresou od MSB do LSB – stejně jako číslo normálně napsané na papír.
x86 je little-endian, tj. bajty ve slově jsou opačně.</p>
<h2 id="toc-adresovani">Adresování</h2>
<ul>
<li>vlastní (inherent): (bez operandu)</li>
<li>přímý operand (immediate): #operand</li>
</ul>
<h4 id="toc-s-neoznacenym-operandem">S neoznačeným operandem</h4>
<p>* přímé (direct): adresa 0–255 (přístup do tzv. nulté stránky)<br>
* rozšířené (extended): 2-bajtová adresa (přístup kamkoliv)<br>
* indexované (indexed): bázová adresa a offset<br>
* relativní (relative): posun od aktuální instrukce (používají
to skoky)</p>
<h2 id="toc-pamet">Paměť</h2>
<ol>
<li>IO & Control ($0000)</li>
<li>RAM ($0040):
<ul>
<li>Relocatible Stack ($0040)</li>
<li>User RAM ($00FF)</li>
</ul>
</li>
<li>(nic)</li>
<li>User Flash/ROM ($8000)</li>
<li>Monitor ROM ($FE20)</li>
<li>(něco dalšího)</li>
<li>Interrupt Vectors ($FF52)</li>
</ol>
Verze Texy: 3.2.3 (konfigurace)