<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://jardin.cscsp.ch/index.php?action=history&amp;feed=atom&amp;title=Linguaggio_assembly</id>
	<title>Linguaggio assembly - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://jardin.cscsp.ch/index.php?action=history&amp;feed=atom&amp;title=Linguaggio_assembly"/>
	<link rel="alternate" type="text/html" href="https://jardin.cscsp.ch/index.php?title=Linguaggio_assembly&amp;action=history"/>
	<updated>2026-04-11T22:17:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://jardin.cscsp.ch/index.php?title=Linguaggio_assembly&amp;diff=267&amp;oldid=prev</id>
		<title>imported&gt;BashonUbuntuonWindows: /* Il costrutto di selezione */ Refuso</title>
		<link rel="alternate" type="text/html" href="https://jardin.cscsp.ch/index.php?title=Linguaggio_assembly&amp;diff=267&amp;oldid=prev"/>
		<updated>2025-08-10T20:50:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Il costrutto di selezione: &lt;/span&gt; Refuso&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Nota disambigua||Assembly (disambigua)|Assembly}}&lt;br /&gt;
{{NN|informatica|febbraio 2024}}&lt;br /&gt;
{{Linguaggio di programmazione&lt;br /&gt;
|nome = Assembly&lt;br /&gt;
|immagine = Motorola 6800 Assembly Language.png&lt;br /&gt;
|didascalia = Codice in Assembly per processore Motorola 68000&lt;br /&gt;
|autore = &lt;br /&gt;
|data = risale ai primi [[computer a programma memorizzato]]&lt;br /&gt;
|versione = &lt;br /&gt;
|utilizzo = linguaggio general-purpose&lt;br /&gt;
|paradigmi = programmazione imperativa&lt;br /&gt;
|tipizzazione = nessuna&lt;br /&gt;
|specifiche = &lt;br /&gt;
|estensione = .asm .s&lt;br /&gt;
|influenzato_da = &lt;br /&gt;
|ha_influenzato = &lt;br /&gt;
|lingua = &lt;br /&gt;
|licenza = &lt;br /&gt;
|sito_web = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Un &amp;#039;&amp;#039;&amp;#039;linguaggio assembly&amp;#039;&amp;#039;&amp;#039; (detto anche &amp;#039;&amp;#039;&amp;#039;linguaggio assemblativo&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;{{cita|Tanenbaum 2006||adc}}.&amp;lt;/ref&amp;gt; o &amp;#039;&amp;#039;&amp;#039;linguaggio assemblatore&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;{{treccani|linguaggio-assemblatore|linguaggio assemblatore}}&amp;lt;/ref&amp;gt; o semplicemente &amp;#039;&amp;#039;&amp;#039;assembly&amp;#039;&amp;#039;&amp;#039;) è un [[linguaggio di programmazione]] molto simile ai [[linguaggio macchina|linguaggi macchina]]. Si differenzia da questi ultimi principalmente per l&amp;#039;utilizzo di identificatori mnemonici, valori simbolici e altre caratteristiche che lo rendono più agevole da scrivere e leggere per gli esseri umani.&lt;br /&gt;
&lt;br /&gt;
Erroneamente viene spesso chiamato &amp;#039;&amp;#039;[[assembler]]&amp;#039;&amp;#039;, ma quest&amp;#039;ultimo termine identifica solo l&amp;#039;[[applicazione (informatica)|applicativo]] che converte i [[programma (informatica)|programmi]] scritti in assembly nell&amp;#039;equivalente in linguaggio macchina.&lt;br /&gt;
&lt;br /&gt;
In generale ogni istruzione in linguaggio assembly corrisponde univocamente a un&amp;#039;istruzione in linguaggio macchina. Difatti quest&amp;#039;ultime sono semplicemente stringhe di bit, lunghe uno o più [[byte]], che in assembly vengono rappresentate sotto forma di [[testo|testo strutturato]] facilmente comprensibile agli umani. Per questo motivo è possibile vedere il linguaggio assembly come un&amp;#039;implementazione &amp;#039;&amp;#039;human-friendly&amp;#039;&amp;#039; dell{{&amp;#039;}}&amp;#039;&amp;#039;[[instruction set]]&amp;#039;&amp;#039; di un dato processore, a cui sarà necessariamente legato.&lt;br /&gt;
&lt;br /&gt;
== Descrizione ==&lt;br /&gt;
=== Scopo ===&lt;br /&gt;
L&amp;#039;assembly ha lo scopo generale di consentire al programmatore di ignorare il formato [[bit (informatica)|binario]] del linguaggio macchina. Ogni [[codice operativo]] del linguaggio macchina viene sostituito, nell&amp;#039;assembly, da una sequenza di caratteri che lo rappresenta in forma &amp;#039;&amp;#039;mnemonica&amp;#039;&amp;#039;; per esempio, il codice operativo per la [[addizione|somma]] potrebbe essere trascritto come &amp;lt;code&amp;gt;ADD&amp;lt;/code&amp;gt; e quello per il [[GOTO|salto]] come &amp;lt;code&amp;gt;JMP&amp;lt;/code&amp;gt;. In secondo luogo, i dati e gli [[indirizzi di memoria]] manipolati dal programma possono essere scritti, in assembly, nella [[sistema di numerazione|base numerica]] più consona al momento: [[Sistema numerico esadecimale|esadecimale]], [[Sistema numerico binario|binaria]], [[Sistema numerico decimale|decimale]], [[Sistema numerico ottale|ottale]] ma anche in forma simbolica, utilizzando stringhe di testo (identificatori). Il programma assembly risulta in questo modo relativamente più [[leggibilità|leggibile]] di quello in linguaggio macchina, con il quale mantiene però un totale (o quasi totale) [[isomorfismo]]. Il programma scritto in assembly non può essere eseguito direttamente dal processore; esso deve essere tradotto nel linguaggio macchina (binario) corrispondente, usando un programma [[compilatore]] detto [[assembler]].&lt;br /&gt;
&lt;br /&gt;
=== Portabilità ===&lt;br /&gt;
A causa di questa &amp;quot;vicinanza&amp;quot; all&amp;#039;hardware, non esiste un unico linguaggio assembly. Al contrario, ogni [[CPU]] o famiglia di CPU ha un suo proprio assembly, diverso dagli altri. Ad esempio, sono linguaggi assembly ben diversi quelli per i processori [[Intel]] [[Architettura X86|x86]], per i [[Motorola 68000]] e per i [[Dec Alpha]]. Questo significa che conoscere un certo linguaggio assembly significa saper scrivere programmi solo su una determinata CPU o famiglia di CPU. Passare ad altre CPU però è relativamente facile, perché molti meccanismi sono analoghi o del tutto identici, quindi spesso il passaggio si limita all&amp;#039;apprendimento di nuovi codici mnemonici, nuove modalità di indirizzamento ed altre varie peculiarità del nuovo processore.&lt;br /&gt;
&lt;br /&gt;
Molto meno facile è invece [[Portabilità|portare]] un programma scritto in assembly su macchine con processori diversi o con architetture diverse: quasi sempre significa dover riscrivere il programma da cima a fondo, perché i linguaggi assembly dipendono completamente dalla piattaforma per cui sono stati scritti. Molti compilatori assembly supportano sistemi di [[Macro (informatica)|macro]] che potrebbero essere impiegati per ovviare in parte a questo problema, ma si tratta di una soluzione poco efficace.&lt;br /&gt;
&lt;br /&gt;
=== Usabilità ===&lt;br /&gt;
Inoltre l&amp;#039;assembly non offre alcun &amp;quot;[[Type checking|controllo sui tipi]]&amp;quot; (non esiste alcunché di vagamente simile al concetto di &amp;quot;[[Tipo di dato|tipo]]&amp;quot; nella programmazione &amp;#039;&amp;#039;low-level&amp;#039;&amp;#039;), ma lascia al programmatore la responsabilità di occuparsi di ogni singolo dettaglio della gestione della macchina e richiede molta disciplina e un esteso lavoro di commento per non scrivere codice che risulti assolutamente illeggibile (ad altri programmatori come anche a se stessi dopo qualche tempo).&lt;br /&gt;
&lt;br /&gt;
Scrivere (buon) codice in assembly è dispendioso in termini di tempo, difficile e quindi molto costoso, soprattutto in prospettiva (future modifiche): per questo, raramente l&amp;#039;assembly è il solo linguaggio usato in un progetto mainstream, a meno che questo non sia di dimensioni e portata limitate. In genere si usa in combinazione con altri linguaggi: la maggior parte del codice viene scritta in un [[linguaggio ad alto livello]], mentre le parti più critiche (per motivi di performance, precisione del timing o affidabilità) si scrivono in assembly.&lt;br /&gt;
&lt;br /&gt;
Tali problematiche sono riscontrabili principalmente su piattaforme come i &amp;#039;&amp;#039;personal computer&amp;#039;&amp;#039; attuali, dove la vastità quantitativa e l&amp;#039;enorme gamma qualitativa dell&amp;#039;hardware disponibile crea alle applicazioni low-level un oggettivo problema mai risolto (e presumibilmente non risolvibile) a livello di unificazione e standard. A ciò si aggiunga l&amp;#039;evoluzione costante verso una sempre maggiore stratificazione dei comuni sistemi operativi, caratterizzata da numerosi vincoli e virtualizzazioni delle periferiche fisiche e dei canali di comunicazione, che non rendono agevole lo sviluppo di un software che interagisca direttamente con l&amp;#039;hardware sottostante e ne gestisca direttamente le caratteristiche.&lt;br /&gt;
&lt;br /&gt;
=== Utilizzi ===&lt;br /&gt;
Si possono però citare due esempi, peraltro correlati, di totale inversione di questo paradigma generale:&lt;br /&gt;
* Ha ampiamente senso creare programmi interamente in assembly destinati ad [[hardware]] caratterizzato architetturalmente da documentazione esaustiva, grande predicibilità, stabilità e scarsa variabilità temporale del design: per esempio, si possono citare gli &amp;#039;&amp;#039;home computer&amp;#039;&amp;#039; degli [[anni 1980|anni ottanta]], come i [[Commodore]] [[Vic-20]] e [[Commodore 64|C64]] o il [[Sinclair ZX Spectrum]].&lt;br /&gt;
* Ha parimenti senso, ed un forte riscontro nella pratica invalsa negli ultimi trenta anni, operare prevalentemente o esclusivamente in assembly nel vastissimo mercato dei [[sistemi embedded]], per la programmazione di [[microcontrollore|microcontroller]] e [[Digital Signal Processor|DSP]], eventualmente anche sotto forma di &amp;#039;&amp;#039;core&amp;#039;&amp;#039; implementati tramite [[Application specific integrated circuit|ASIC]], [[CPLD]] ed [[Field programmable gate array|FPGA]], al fine di massimizzare performance e rispetto dei vincoli temporali, minimizzando nel contempo il &amp;#039;&amp;#039;footprint&amp;#039;&amp;#039;. Ciò trova riscontro a tutti i livelli della filiera produttiva, a partire dalla progettazione dei chip e del relativo linguaggio utilizzando [[instruction set|ISA]] di tipo [[Reduced instruction set computer|RISC]] e fortemente ortogonali, la cui ottimizzazione (in spazio o in performance) è altamente semplificata. Questo approccio è fondamentale in quanto consente grandi economie di scala nei progetti tipici del mondo &amp;#039;&amp;#039;embedded&amp;#039;&amp;#039;, caratterizzati dalla capacità di assorbire costi iniziali (&amp;#039;&amp;#039;NRE, non-recurrent engineering costs&amp;#039;&amp;#039;) anche elevati, purché finalizzati ad una forte compressione del costo unitario del prodotto finale, anche per volumi medio-bassi.&lt;br /&gt;
&lt;br /&gt;
Ecco allora che la possibilità di utilizzare un microcontroller con limitatissime risorse di memoria [[Read only memory|ROM]] e [[RAM]] scrivendo il [[firmware]] integralmente in assembly diventa essenziale al fine di minimizzare i costi, l&amp;#039;ingombro in piastra, la suscettibilità elettromagnetica, aumentando anche l&amp;#039;affidabilità (processori più &amp;quot;datati&amp;quot; hanno un incolmabile vantaggio in termini di milioni di ore di test e funzionamento sul campo, ossia la &amp;quot;merce&amp;quot; di gran lunga più preziosa per i sistemi embedded variamente critici) ed ottimizzando numerosi altri fattori.&lt;br /&gt;
&lt;br /&gt;
== Struttura dei programmi ==&lt;br /&gt;
{{Organizzare|La sezione ha un&amp;#039;impostazione da manuale didattico più che da enciclopedia|informatica|febbraio 2024}}&lt;br /&gt;
&lt;br /&gt;
La struttura di un tipico listato [[Assembly x86]] per PC si articola, a grandi linee, nei seguenti termini:&lt;br /&gt;
* intestazione, in cui possiamo inserire, tramite dei commenti, il nome e la funzione del programma.&lt;br /&gt;
* segmento dati, in cui andiamo a dichiarare formalmente le variabili usate dal programma (in pratica allochiamo delle zone di memoria nel segmento puntando dal DS data segment)&lt;br /&gt;
* segmento di stack, in cui definiamo la struttura dello stack associato al programma (parleremo dello stack in seguito)&lt;br /&gt;
* segmento di codice, in cui è presente il codice del programma&lt;br /&gt;
* chiusura&lt;br /&gt;
Vale la pena di ribadire che tale struttura, nella sua generalità, dipende quasi per intero dalla piattaforma e anche dall&amp;#039;assembler utilizzato e quindi non è in alcun modo universalizzabile. Architetture diverse, dai mainframe ai microcontroller, con relativi assemblatori e cross-assembler, impongono strutture di sorgente a volte nettamente diverse dal semplice esempio illustrato, relativo ai comuni PC. Per un controesempio banale, nelle architetture Harvard usate dalla quasi totalità dei microcontroller e da molte architetture di supercalcolo:&lt;br /&gt;
* il segmento di codice non risulta scrivibile durante la normale elaborazione: ne consegue, tra l&amp;#039;altro, l&amp;#039;assoluta impossibilità di creare codice self-morphing ([[Codice automodificante|automodificante]]), ma anche un modo generalmente diverso di referenziare variabili (a rigore, label corrispondenti ad una o più locazioni in memoria dati) e codice nel sorgente;&lt;br /&gt;
* i dati a loro volta risiedono in memorie fisicamente separate, talora dotate anche di persistenza tra le sessioni ([[EPROM]], Flash EEPROM, RAM &amp;quot;tamponate&amp;quot; ossia dotate di batteria di backup...), e tutto ciò si riflette in modo esplicito e pervasivo nella sintassi supportata dall&amp;#039;assembler, nelle direttive specifiche e nella struttura effettiva di un sorgente Assembly;&lt;br /&gt;
* ultimo, ma non meno importante: registri come DS e SS (stack segment) sono altre peculiarità della piattaforma x86, sovente lo stack di chiamata non è neppure direttamente accessibile nei core MCU più diffusi.&lt;br /&gt;
&lt;br /&gt;
=== Esempio di codice ===&lt;br /&gt;
Esempio di programma &amp;quot;[[Hello world]]&amp;quot; in assembly Intel x86 con sintassi [[Intel]] (sfrutta le chiamate al sistema operativo DOS). Non è compatibile con le versioni Assembly [[UNIX]] [[GNU]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MODEL SMALL&lt;br /&gt;
STACK 100H&lt;br /&gt;
.DATA&lt;br /&gt;
    HW      DB      &amp;quot;hello, world&amp;quot;, 13, 10, &amp;#039;$&amp;#039;&lt;br /&gt;
.CODE&lt;br /&gt;
.STARTUP&lt;br /&gt;
    MOV AX, @data&lt;br /&gt;
    MOV DS, AX&lt;br /&gt;
    MOV DX, OFFSET HW&lt;br /&gt;
    MOV AH, 09H&lt;br /&gt;
    INT 21H&lt;br /&gt;
    MOV AX, 4C00H&lt;br /&gt;
    INT 21H&lt;br /&gt;
END &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo invece è l&amp;#039;esempio del programma scritto per sintassi AT&amp;amp;T (per le architetture [[UNIX]] [[GNU]])&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.section .data&lt;br /&gt;
&lt;br /&gt;
	hello:&lt;br /&gt;
		.ascii &amp;quot;ciao ciao mondo!\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	hello_len:&lt;br /&gt;
		.long . -hello	# lunghezza della stringa in byte&lt;br /&gt;
&lt;br /&gt;
.section .text&lt;br /&gt;
&lt;br /&gt;
	.global _start&lt;br /&gt;
&lt;br /&gt;
_start:&lt;br /&gt;
	movl $4, %eax		# 4 corrisponde alla system call &amp;quot;write&amp;quot;&lt;br /&gt;
	movl $1, %ebx		# stampa nello standard output (schermo)&lt;br /&gt;
	leal hello, %ecx	# puntatore char a ciò che si vuole stampare&lt;br /&gt;
	&lt;br /&gt;
	movl hello_len, %edx	# copia del contenuto della variabile. carica la lunghezza della variabile&lt;br /&gt;
&lt;br /&gt;
	int $0x80		# system call (int sarebbe &amp;quot;interrupt&amp;quot;); con 0x80 si lancia una interaction generale &lt;br /&gt;
                                # dichiarata (in base ai valori caricati precedentemente nei registri)&lt;br /&gt;
				&lt;br /&gt;
	movl $1, %eax		# 1 corrisponde alla system call &amp;quot;exit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	xorl %ebx, %ebx		#azzera EBX; si può anche scrivere movl $0, %ebx ma risulta meno efficiente&lt;br /&gt;
&lt;br /&gt;
	int $0x80&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Caratteristiche generali ==&lt;br /&gt;
&lt;br /&gt;
=== Sezioni ===&lt;br /&gt;
{{...|informatica}}&lt;br /&gt;
&lt;br /&gt;
=== Costanti di programma ===&lt;br /&gt;
{{...|informatica}}&lt;br /&gt;
&lt;br /&gt;
=== Istruzioni ===&lt;br /&gt;
{{...|informatica}}&lt;br /&gt;
&lt;br /&gt;
=== Il costrutto di sequenza ===&lt;br /&gt;
In assembly è possibile definire sequenze di istruzioni attraverso l&amp;#039;uso delle &amp;quot;[[etichetta (informatica)|etichette]]&amp;quot; (&amp;#039;&amp;#039;label&amp;#039;&amp;#039;). Si tratta di semplici stringhe di [[testo ASCII]] seguite dai due punti di specificazione, che marcano in modo univoco un determinato punto del listato di istruzioni.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot; line=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
label1:&lt;br /&gt;
	nop&lt;br /&gt;
    nop&lt;br /&gt;
label2:&lt;br /&gt;
    nop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Il costrutto di selezione ===&lt;br /&gt;
Il costrutto di selezione, detto anche scelta, è uno degli elementi fondamentali del [[paradigma di programmazione|paradigma]] di [[programmazione strutturata]]. È il metodo più semplice per la gestione del [[flusso di controllo]], e permette di scegliere tra due sequenze alternative di istruzioni.&lt;br /&gt;
In assembly questo viene generalmente implementato utilizzando un&amp;#039;istruzione di salto condizionato in capo a due sequenze specificate in successione.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot; line=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
    beq $t1,$0,else # Se t1 = 0 salta all&amp;#039;etichetta &amp;quot;else&amp;quot;&lt;br /&gt;
    nop             # Attendi la prossima istruzione (sequenza interna n°1)&lt;br /&gt;
    j cont          # Salta all&amp;#039;etichetta &amp;quot;cont&amp;quot;&lt;br /&gt;
else:&lt;br /&gt;
    move $t2,$0     # Imposta t2 = 0 (sequenza interna n°2)&lt;br /&gt;
cont:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Il costrutto di iterazione ===&lt;br /&gt;
Il costrutto di [[iterazione]], detto anche ciclo (&amp;#039;&amp;#039;loop&amp;#039;&amp;#039;), è uno degli elementi fondamentali del [[paradigma di programmazione|paradigma]] di [[programmazione strutturata]], e consente di definire la ripetizione ciclica di sequenze di istruzioni. In assembly questo viene generalmente implementato come variante notevole del costrutto di selezione.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot; line=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
# Iterazione con controllo in testa&lt;br /&gt;
loop:&lt;br /&gt;
    beq $t1,$0,end  # Se t1 = 0 salta all&amp;#039;etichetta &amp;quot;end&amp;quot;&lt;br /&gt;
    addi $t1,$t1,-1 # Decrementa t1 di 1 unità (sequenza interna)&lt;br /&gt;
    j loop          # Salta all&amp;#039;etichetta &amp;quot;loop&amp;quot;&lt;br /&gt;
end:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le caratteristiche peculiari del ciclo sono diverse:&lt;br /&gt;
* le due etichette sono poste rispettivamente all&amp;#039;inizio e alla fine del blocco, permettendo di scegliere di volta in volta se ripetere la sequenza o meno. &lt;br /&gt;
* l&amp;#039;istruzione di salto condizionato verifica ciclicamente l&amp;#039;esistenza di una condizione, in base alla quale viene deciso se interrompere il ciclo o meno;&lt;br /&gt;
* L&amp;#039;istruzione finale di salto incondizionato punta alla prima etichetta, realizzando così il comportamento ciclico.&lt;br /&gt;
&lt;br /&gt;
È possibile realizzare una variante del costrutto di iterazione in cui l&amp;#039;istruzione di salto condizionato viene posta per ultima. Notare come in questo caso non sia necessaria un&amp;#039;istruzione di salto incondizionato per realizzare il comportamento ciclico, come pure l&amp;#039;etichetta &amp;quot;end&amp;quot; che viene mantenuta puramente per fini illustrativi. La particolarità di questa variante è che la sequenza interna viene eseguita sempre almeno una volta, a causa del deferimento della verifica della condizione di iterazione.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot; line=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
# Iterazione con controllo in coda&lt;br /&gt;
loop:&lt;br /&gt;
    addi $t1,$t1,-1 # Decrementa t1 di 1 unità (sequenza interna)&lt;br /&gt;
    bne $t1,$0,loop # Se t1 non è 0 salta all&amp;#039;etichetta &amp;quot;loop&amp;quot;&lt;br /&gt;
end:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Note ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bibliografia ==&lt;br /&gt;
* {{cita libro&lt;br /&gt;
|titolo   = Struttura e progetto dei calcolatori&lt;br /&gt;
|autore   = [[David Andrew Patterson]]&lt;br /&gt;
|autore2  = [[John LeRoy Hennessy]]&lt;br /&gt;
|curatore = Alberto Borghese&lt;br /&gt;
|edizione = 5&lt;br /&gt;
|editore  = Zanichelli&lt;br /&gt;
|città    = Bologna&lt;br /&gt;
|anno     = 2015&lt;br /&gt;
|ISBN     = 978-88-08-35202-6&lt;br /&gt;
|cid      = Patterson, Hennessy 2015&lt;br /&gt;
}}&lt;br /&gt;
* {{cita libro|autore=[[Andrew Stuart Tanenbaum]]|titolo=Architettura dei calcolatori. Un approccio strutturale|editore=Pearson Education|città=Milano|anno=2006|url=http://books.google.it/books?id=hK8lJ4BPOYcC|pp=491-528|capitolo=Livello del linguaggio assemblativo|isbn=978-88-7192-271-3|cid=adc}}&lt;br /&gt;
* {{Cita testo|titolo=Programmare in Assembler|url=https://archive.org/details/programmareinassembler|autore=Alain Pinaud|editore=Gruppo Editoriale Jackson|anno=1982|ISBN=88-7056-105-4}}&lt;br /&gt;
* {{cita libro|lingua=en|autore=Randall Hyde|titolo=The Art of Assembly Language|editore=No Starch Press|anno=2010|url=http://books.google.it/books?id=F5MhjlEnnO0C|isbn=978-1-59327-301-9|cid=taoal}}&lt;br /&gt;
&lt;br /&gt;
== Voci correlate ==&lt;br /&gt;
* [[Assembler]]&lt;br /&gt;
* [[Disassembler]]&lt;br /&gt;
* [[Linguaggio macchina]]&lt;br /&gt;
&lt;br /&gt;
== Altri progetti ==&lt;br /&gt;
{{interprogetto|preposizione=sul}}&lt;br /&gt;
&lt;br /&gt;
== Collegamenti esterni ==&lt;br /&gt;
* {{Collegamenti esterni}}&lt;br /&gt;
* {{FOLDOC|assembly language|assembly language}}&lt;br /&gt;
&lt;br /&gt;
{{Controllo di autorità}}&lt;br /&gt;
{{portale|informatica}}&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Linguaggi di programmazione]]&lt;/div&gt;</summary>
		<author><name>imported&gt;BashonUbuntuonWindows</name></author>
	</entry>
</feed>