<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="https://pmd85.borik.net/w/skins/common/feed.css?240204"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Blog:Programovanie v assembleri i8080 pre PMD 85 (6) - História úprav</title>
		<link>https://pmd85.borik.net/wiki/Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_%286%29&amp;action=history</link>
		<description>História úprav pre túto stránku na wiki</description>
		<language>sk</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Fri, 01 May 2026 12:45:32 GMT</lastBuildDate>
		<item>
			<title>Rombor: Doplnené info k DAA.</title>
			<link>https://pmd85.borik.net/wiki/Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_%286%29&amp;diff=2060&amp;oldid=prev</link>
			<description>&lt;p&gt;Doplnené info k DAA.&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class=&#039;diff-marker&#039; /&gt;
			&lt;col class=&#039;diff-content&#039; /&gt;
			&lt;col class=&#039;diff-marker&#039; /&gt;
			&lt;col class=&#039;diff-content&#039; /&gt;
			&lt;tr&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black;&quot;&gt;← Staršia verzia&lt;/td&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black;&quot;&gt;Verzia zo dňa a času 13:59, 15. október 2023&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Riadok 321:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Riadok 321:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| V=0&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| V=0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| !&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| !&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| !&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| ! &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;(*)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| !&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| ! &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;(*)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| Desiatková korekcia&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;| Desiatková korekcia&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;(*)&amp;#039;&amp;#039;&amp;#039; Viď aj popis inštrukcie [[Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_%283%29#DAA_.C2.A0.C2.A0.C2.A0.C2.A0_.28Decimal_Adjust_Accumulator.29|DAA]].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_(5)|&amp;amp;lt;&amp;amp;lt; Inštrukčná sada mikroprocesora - Inštrukcie skokov]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_(5)|&amp;amp;lt;&amp;amp;lt; Inštrukčná sada mikroprocesora - Inštrukcie skokov]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_(7)|Príprava projektu a nástrojov na editáciu zdrojového textu a jeho kompilovanie&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;]] &lt;/del&gt;&amp;amp;gt;&amp;amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_(7)|Príprava projektu a nástrojov na editáciu zdrojového textu a jeho kompilovanie &amp;amp;gt;&amp;amp;gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/span&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/span&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 15 Oct 2023 13:59:33 GMT</pubDate>			<dc:creator>Rombor</dc:creator>			<comments>https://pmd85.borik.net/wiki/Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_%286%29</comments>		</item>
		<item>
			<title>Rombor: Nový Blogový článok</title>
			<link>https://pmd85.borik.net/wiki/Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_%286%29&amp;diff=1877&amp;oldid=prev</link>
			<description>&lt;p&gt;Nový Blogový článok&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{VelkyNadpis|Programovanie v assembleri i8080 pre PMD 85 (6)}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== Inštrukčná sada mikroprocesora i8080 &amp;lt;small&amp;gt;(pokračovanie)&amp;lt;/small&amp;gt; ==&lt;br /&gt;
=== Inštrukcie pre prácu so zásobníkom ===&lt;br /&gt;
Zásobník (stack) je údajová štruktúra typu LIFO (Last In First Out), čo znamená, že položka, ktorá bola vložená do zásobníka naposledy sa bude vyberať ako prvá. Pri zásobníku sa hovorí o vrchole zásobníka, alebo položke na vrchole zásobníka. Na túto položku ukazuje ukazateľ zásobníka, v našom prípade je to register {{Kbd|SP}} - Stack Pointer.&lt;br /&gt;
&lt;br /&gt;
Nasledujúca skupina inštrukcií umožňuje ukladať a vyberať {{Kbd|16}} bitové položky do/z zásobníka, meniť hodnotu na vrchole zásobníka a nastavovať adresu zásobníka. Ako už bolo spomenuté skôr, register {{Kbd|SP}} obsahuje adresu vrcholu zásobníka. Pri vložení údaja do zásobníka sa jeho adresa zníži o {{Kbd|2}} a pri vyberaní údaja zo zásobníka sa jeho adresa naopak zvýši o {{Kbd|2}}. Pri nastavovaní adresy zásobníka sa teda táto adresa nastavuje &amp;#039;&amp;#039;&amp;#039;za koniec&amp;#039;&amp;#039;&amp;#039; oblasti určenej pre zásobník.&lt;br /&gt;
&lt;br /&gt;
Pri ukladaní údajov na zásobník je potrebné byť veľmi obozretný, hlavne v prípade podprogramov. Keďže návrat z podprogramu je vlastne výber jednej položky z vrcholu zásobníka, stav (adresa) zásobníka pred návratom z podprogramu musí byť rovnaký, ako pri vstupe do podprogramu. Najčastejším zdrojom nepochopiteľného správania programu je prípad, kedy sa v podprograme uložia na zásobník nejaké údaje, ale po rôznom vetvení sa na niektorom mieste robí návrat z podprogramu bez výberu alebo s neúplným výberom hodnôt na zásobníku (ošetrenie/vyrovnanie zásobníka) a tak sa návrat urobí &amp;quot;niekam inam&amp;quot;. Program potom nepochopiteľne niekedy funguje a niekedy nie. Údaje na zásobníku sú proste 16 bitové čísla, nie je nijako rozlíšené, či sa jedná o vloženú hodnotu pomocou inštrukcie {{Kbd|push rp}}, alebo je to návratová adresa, ktorá sa tam vložila po vykonaní inštrukcie volania podprogramu {{Kbd|call NN}}, či {{Kbd|rst N}}.&lt;br /&gt;
&lt;br /&gt;
Okrem ďalej popísaných inštrukcií už boli v predošlých kapitolách uvedené inštrukcie, ktoré so zásobníkom majú súvis.&lt;br /&gt;
* {{Kbd|LXI sp,NN}} - nastavenie adresy zásobníka priamou hodnotou&lt;br /&gt;
* {{Kbd|INX sp}} - inkrementácia adresy zásobníka&lt;br /&gt;
* {{Kbd|DCX sp}} - dekrementácia adresy zásobníka&lt;br /&gt;
* {{Kbd|DAD sp}} - pripočítanie adresy zásobníka k registru {{Kbd|HL}}&lt;br /&gt;
* {{Kbd|CALL NN}}, {{Kbd|Cc NN}}, {{Kbd|rst N}} - volanie podprogramu&lt;br /&gt;
* {{Kbd|RET}}, {{Kbd|Rc}} - návrat z podprogramu&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== PUSH rp &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Push into Stack)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;SP &amp;lt;-- SP - 2 : (SP) &amp;lt;-- rp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; žiadne&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|PUSH}} zníži adresu zásobníka {{Kbd|SP}} o {{Kbd|2}} a na túto adresu (nový vrchol zásobníka) uloží jednu položku (2 byty) a teda hodnotu registrového páru {{Kbd|rp}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; | &amp;#039;&amp;#039;Uloženie údaja na zásobník&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 11T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|push b}}&lt;br /&gt;
| {{CodeBig|push d}}&lt;br /&gt;
| {{CodeBig|push h}}&lt;br /&gt;
| {{CodeBig|push psw}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== POP rp &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Pop from Stack)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;rp &amp;lt;-- (SP) : SP &amp;lt;-- SP + 2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; žiadne; v prípade {{Kbd|PSW}} všetky&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|POP}} vyberie zo zásobníka jednu položku (2 byty), ktorú vloží do registrového páru {{Kbd|rp}} a zvýši adresu zásobníka {{Kbd|SP}} o {{Kbd|2}}. V prípade registrového páru {{Kbd|PSW}} (registre {{Kbd|A}} a {{Kbd|F}}) sa samozrejme môžu ovplyvniť/ovplyvnia všetky príznaky. Zároveň, bez ohľadu na hodnotu daného bytu v pamäti, zostanú bity &amp;#039;&amp;#039;&amp;#039;F&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;=1&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;F&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=0&amp;#039;&amp;#039;&amp;#039; a &amp;#039;&amp;#039;&amp;#039;F&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;=0&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &amp;#039;&amp;#039;Výber zo zásobníka&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byty / 10T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|pop b}}&lt;br /&gt;
| {{CodeBig|pop d}}&lt;br /&gt;
| {{CodeBig|pop h}}&lt;br /&gt;
| {{CodeBig|pop psw}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== XTHL &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Exchange stack top with HL)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;(SP) &amp;lt;--&amp;gt; HL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; žiadne&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|XTHL}} zamení hodnotu na vrchole zásobníka s hodnotou registra {{Kbd|HL}}. To znamená, že hodnota, ktorá bola na vrchole zásobníka bude v {{Kbd|HL}} a hodnota, ktorá bola v {{Kbd|HL}} bude na vrchole zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | &amp;#039;&amp;#039;Zámena hodnoty na vrchole zásobníka s HL&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 18T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|xthl}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== SPHL &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Move HL to SP)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;SP &amp;lt;-- HL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; žiadne&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|SPHL}} nastaví adresu zásobníka {{Kbd|SP}} na hodnotu registra {{Kbd|HL}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &amp;#039;&amp;#039;Nastavenie adresy zásobníka&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 5T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|sphl}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Inštrukcie vstupu a výstupu ===&lt;br /&gt;
Mikroprocesor i8080 môže komunikovať s okolitými perifériami prostredníctvom vstupno/výstupných portov, ktorých môže byť 256 vstupných a 256 výstupných. Na PMD 85 je obsadenie vstupno/výstupných portov uvedené [[Obsadenie_vstupno_výstupných_adries_PMD_85|v tejto tabuľke]].&lt;br /&gt;
&lt;br /&gt;
==== IN p &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Input from port)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;A &amp;lt;-- (p)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; žiadne&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|IN}} prečíta hodnotu z portu s adresou {{Kbd|p}} do akumulátora {{Kbd|A}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &amp;#039;&amp;#039;Vstup z portu&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 10T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|in p}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== OUT p &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Output to port)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;(p) &amp;lt;-- A&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; žiadne&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|OUT}} zapíše na port {{Kbd|p}} hodnotu z akumulátora {{Kbd|A}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &amp;#039;&amp;#039;Výstup na port&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 10T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|out p}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Inštrukcie riadenia prerušenia ===&lt;br /&gt;
Prerušenie je proces, kedy je vykonávanie hlavného programu prerušené nejakou vonkajšou udalosťou a riadenie je predané na obsluhu prerušenia. K i8080 sa požíval radič prerušenia i3214, ktorý po akceptovaní prerušenia od jedného z ôsmych zdrojov prerušení vnútil na dátovú zbernicu operačný kód príslušnej jednobytovej inštrukcie [[Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_(5)#RST_N_.C2.A0.C2.A0.C2.A0.C2.A0_.28Restart.29|RST N]], čím sa vyvolal príslušný podprogram pre obsluhu prerušenia. V PMD 85 nie je radič prioritného prerušenia použitý a budič zbernice i8228 napevno poskytuje iba jednu úroveň prerušenia {{Kbd|RST 7}} - obslužná rutina musí byť na adrese {{Kbd|0038h}}.&lt;br /&gt;
&lt;br /&gt;
Niekedy nie je vhodné, aby bol hlavný program &amp;quot;vyrušovaný&amp;quot; pri svojom vykonávaní a preto je možné prerušenie zakázať alebo povoliť. Ak je prichádzajúce prerušenie akceptované, pred skokom na adresu obsluhy prerušenia sa prerušenie automaticky zakáže. V rutine obsluhy prerušenia je potrebné odpamätať všetky registre, ktoré bude rutina používať a pred ukončením obsluhy prerušenia je potrebné obnoviť všetky používané registre a prerušenie opäť povoliť.&lt;br /&gt;
&lt;br /&gt;
==== EI &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Enable interrupts)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;IFF &amp;lt;-- 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; IFF&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|EI}} nastaví interný príznak {{Kbd|IFF}} (Interrupt Flip/Flop flag) na {{Kbd|1}}, čím sa prerušenie povolí. Ku skutočnému povoleniu dôjde až po vykonaní inštrukcie nasledujúcej za inštrukciou {{Kbd|EI}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &amp;#039;&amp;#039;Povolenie prerušenia&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 4T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|ei}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== DI &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Disable interrupts)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;IFF &amp;lt;-- 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; IFF&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|DI}} vynuluje interný príznak {{Kbd|IFF}}, čím sa prerušenie zakáže. Prerušenie sa zakáže ihneď po vykonaní inštrukcie {{Kbd|DI}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &amp;#039;&amp;#039;Zakázanie prerušenia&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 4T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|di}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== HLT &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(Halt)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;-&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; žiadne&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|HLT}} spôsobí zastavenie procesora a ten zostáva v stave {{Kbd|Halt}}, kým nepríde prerušenie alebo sa neprevedie Reset mikroprocesora. Ak je prerušenie zakázané, stav {{Kbd|Halt}} ukončí iba Reset.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &amp;#039;&amp;#039;Čakanie na prerušenie&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 7T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|hlt}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Prázdna inštrukcia ===&lt;br /&gt;
Je to neuveriteľné, ale mikroprocesor má aj inštrukciu, ktorá nič nerobí... A vlastne nie je jediná. Ak si spomeniete na inštrukcie {{Kbd|MOV}}, kde je zdrojový aj cieľový register rovnaký, tak sa jedná tiež o inštrukcie, ktoré prakticky nič neurobia, ale trvajú 5T a môžu sa využiť na časové zdržania.&lt;br /&gt;
==== NOP &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;small&amp;gt;&amp;#039;&amp;#039;(No operation)&amp;#039;&amp;#039;&amp;lt;/small&amp;gt; ====&lt;br /&gt;
&amp;#039;&amp;#039;Operácia:&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;-&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Príznaky:&amp;#039;&amp;#039; žiadne&lt;br /&gt;
&lt;br /&gt;
Inštrukcia {{Kbd|NOP}} nerobí nič a je vhodná na vkladanie malých časových zdržaní do kódu - jej vykonanie trvá 4T.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &amp;#039;&amp;#039;Bez operácie&amp;#039;&amp;#039; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; (1 byte / 4T)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|nop}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Tabuľka vplyvu inštrukcií na príznaky ===&lt;br /&gt;
V nasledujúcej tabuľke je zosumarizovaný zoznam inštrukcií, ktoré ovplyvňujú príznaky (podmienky, za akých sú príznaky nastavené).&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky:&lt;br /&gt;
* {{CodeBig|A}} - akumulátor (pred vykonaním operácie)&lt;br /&gt;
* {{CodeBig|OP}} - operand (pred vykonaním operácie)&lt;br /&gt;
* {{CodeBig|V}} - výsledok (po vykonaní operácie)&lt;br /&gt;
* {{CodeBig|-}} - príznak sa nezmení&lt;br /&gt;
* {{CodeBig|!}} - príznak je nastavený podľa výsledku&lt;br /&gt;
* {{CodeBig|0}} - príznak je vynulovaný&lt;br /&gt;
* {{CodeBig|1}} - príznak je nastavený&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Inštrukcia&lt;br /&gt;
! Sign&lt;br /&gt;
! Zero&lt;br /&gt;
! Parity&lt;br /&gt;
! Carry&lt;br /&gt;
! Auxilliary Carry&lt;br /&gt;
! Poznámka&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|add r}}, {{CodeBig|add m}}, {{CodeBig|adi N}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| V&amp;gt;255&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | (A&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=1 a OP&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=1)&amp;lt;br&amp;gt;alebo (A&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=1 a V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=0)&amp;lt;br&amp;gt;alebo (OP&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=1 a V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=0)&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; valign=&amp;quot;top&amp;quot; | Aritmetické inštrukcie&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|adc r}}, {{CodeBig|adc m}}, {{CodeBig|aci N}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| V&amp;gt;255&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|sub r}}, {{CodeBig|sub m}}, {{CodeBig|sui N}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| A&amp;lt;OP&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | (A&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=1 a OP&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=0)&amp;lt;br&amp;gt;alebo (A&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=1 a V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=0)&amp;lt;br&amp;gt;alebo (OP&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=0 a V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=0)&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|sbb r}}, {{CodeBig|sbb m}}, {{CodeBig|sbi N}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| A&amp;lt;OP+CY&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|cmp r}}, {{CodeBig|cmp m}}, {{CodeBig|cpi N}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| A=OP&lt;br /&gt;
| !&lt;br /&gt;
| A&amp;lt;OP&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|ana r}}, {{CodeBig|ana m}}, {{CodeBig|ani N}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| 0&lt;br /&gt;
| A&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=1 alebo OP&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot; | Logické inštrukcie&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|ora r}}, {{CodeBig|ora m}}, {{CodeBig|ori N}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|xra r}}, {{CodeBig|xra m}}, {{CodeBig|xri N}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|inr r}}, {{CodeBig|inr m}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| -&lt;br /&gt;
| V&amp;lt;sub&amp;gt;3-0&amp;lt;/sub&amp;gt;=0&lt;br /&gt;
| Inkrement&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|dcr r}}, {{CodeBig|dcr m}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| -&lt;br /&gt;
| A&amp;lt;sub&amp;gt;3-0&amp;lt;/sub&amp;gt;&amp;gt;0&lt;br /&gt;
| Dekrement&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|dad rp}}&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| V&amp;gt;65535&lt;br /&gt;
| -&lt;br /&gt;
| 16 bitové sčítanie&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|rlc}}, {{CodeBig|ral}}&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| A&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| -&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; | Rotácie&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|rrc}}, {{CodeBig|rar}}&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| A&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|stc}}&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1&lt;br /&gt;
| -&lt;br /&gt;
| Nastavenie CY&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|cmc}}&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| not CY&lt;br /&gt;
| -&lt;br /&gt;
| Prevrátenie CY&lt;br /&gt;
|-&lt;br /&gt;
| {{CodeBig|daa}}&lt;br /&gt;
| V&amp;lt;sub&amp;gt;7&amp;lt;/sub&amp;gt;=1&lt;br /&gt;
| V=0&lt;br /&gt;
| !&lt;br /&gt;
| !&lt;br /&gt;
| !&lt;br /&gt;
| Desiatková korekcia&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_(5)|&amp;amp;lt;&amp;amp;lt; Inštrukčná sada mikroprocesora - Inštrukcie skokov]]&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;&lt;br /&gt;
[[Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_(7)|Príprava projektu a nástrojov na editáciu zdrojového textu a jeho kompilovanie]] &amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sat, 14 Aug 2021 15:23:29 GMT</pubDate>			<dc:creator>Rombor</dc:creator>			<comments>https://pmd85.borik.net/wiki/Blog:Programovanie_v_assembleri_i8080_pre_PMD_85_%286%29</comments>		</item>
	</channel>
</rss>