Aiuto Assembly 8086

Pubblicità

OleandroBianco

Nuovo Utente
Messaggi
12
Reazioni
0
Punteggio
25
Ho un esame tra pochi giorni e ancora non so programmare benissimo in Assembly 8086..
Cio' che mi crea più problemi però sono i cicli.
In primis non ho ancora capito come si settano CX e SI prima del LOOP, come "riempirli". Che criterio/logica devo seguire? Nel materiale da studiare non è specificato.
In secundis, non so mai come regolarmi col ciclo vero e proprio... Se mi ritrovo un problema davanti so COSA devo fare, ma non COME farlo con l'Assembly.

Aiutatemi voi D:
 
Non riesco a scrivere i comandi per far ciclare, appunto...
Cioè, conosco le istruzioni, ma se ad esempio la traccia dell'esercizio chiede di trovare il minimo e il massimo in un array, io non so da dove iniziare per far si che il LOOP mi trovi i valori.
Non so se mi sono spiegata...
 
Credo di aver capito.
Prendiamo come esempio il trovare minimo e massimo di un array.
1)dichiari un' etichetta(o label come preferisci)
2)Fai due cicli IF-ELSE per trovare minimo e massimo(JG per massimo e JL per il minimo)
3)Incrementi l' indice del vettore
4)Fai una JL per controllare se l' indice del puntatore è minore dalla lunghezza del vettore.
Se è minore allora jumpi all' etichetta altrimenti jump alla fine del ciclo
 
Grazie :D Il problema è che ogni volta la richiesta è diversa e va adottata una soluzione differente.. non c'è niente di statico a cui aggrapparsi, ecco.

Qual è la regola generale per settare SI e CX prima del ciclo?
 
Non riesci a capire semplicemente perché SI non serve.
Le uniche istruzioni che ti servono per fare un ciclo sono LOOP e CX;
LOOP è simile al comando FOR-NEXT del BASIC, quindi come per questo comando bisogna specificare quante volte deve essere eseguito; ovvero si setta CX (contatore) con il numero di volte, alla fine di ogni iterazione l'8086 sottrae uno da CX, e quando CX diventa zero il ciclo termina.
SI (source index) ha altri scopi, non inerenti al funzionamento di LOOP.
Tutto chiaro?

Esempio:

...
394F:0103 MOV CX, 0008 // supponiamo 8 iterazioni
394F:0104 ..bla bla
394F:0105 ..bla bla
394F:0106 LOOP 0104
...
 
Setta il registro CX (contatore legato a LOOP) al numero di iterazioni.
Quando viene incontrata l'istruzione LOOP, CX viene decrementato di 1
e confrontato a 0, in caso affermativo si continua con l'istruzione
successiva altrimenti si salta all'istruzione indicata da LOOP.



Se la tua confusione permane perchè hai letto un esempio in cui
si faceva uso di SI, non te la prendere, puoi sempre dedicarti al cake design.
 
Non era un esempio, ma presente in tutte le esercitazioni di laboratorio.
Se ti infastidisce dare spiegazioni puoi anche non intervenire, piuttosto risparmiati l'ironia che è altamente fuori luogo :)
Nessuno ha le idee chiarissime quando comincia, evidentemente non ricordi i tuoi primi passi nel mondo della programmazione.

Buona giornata.
 
Ultima modifica:
Postami un'esercitazione, così proverò a spiegartela riga per riga.

Vedrai che SI non a nulla a che vedere con il ciclo;
sicuramente verrà usato per scorrere una serie di indirizzi, ma
può benissimo essere usato come general purpose,
quindi non farci caso e non confondere i consigli con l'ironia.
 
@OleandroBianco per caso negli esercizi in cui viene utilizzato il SI ci sono delle istruzioni di Push e Pop, oppure solo delle Load e delle Store?
 
Nè l'uno, nè l'altro.
In ogni caso ho superato brillantemente l'esame un bel po' di giorni fa, quindi ringrazio chi è stato così tanto cortese nell'aiutarmi :)
 
Pubblicità
Pubblicità
Indietro
Top