Newsgroup: it.comp.programmare
Titolo: ASSEMBLER - PICCOLA MODIFICA A CODICE

Ciao a tutti , in questo programma dovrei:
- immettere da tastiera un numero di 4 cifre
- stampare a video tutte le combinazioni (solo quelle a 2 cifre) creabili con le cifre del numero immesse prima
- ordinare in modo crescente tutte le combinazioni
 
il programma funziona ma , al punto 2, mi stampa tutte le combinazioni ( quindi anche quelle da 1 , 3 e 4 cifre)
 
come posso modificare questo programma in modo che le combinazioni 
siano SOLO di 2 cifre ???
https://www.dropbox.com/s/oqat55pxbt0eztb/prog33.txt
 
 
grazie mille !


In questo preciso momento non posso mettermi a leggere un listatone Assembly, magari se non ci sono risposte ci provo appena il tempo me lo consente. Nel frattempo volevo solo dire:
"oggesù, non vedevo la sintassi assembly intel da anni!" :)
Ciao!
 
P.S. Hai per caso provato a scrivere il tutto in pseudo-codice (o meglio, in un linguaggio ad alto livello che conosci, meglio di tutti in C (non perché mi piaccia il C, eh, solo perché è il miglior linguaggio hi-level più vicino alla macchina che io conosca))? Se lo fai l'errore probabilmente verrà fuori facilmente..

Ok grazie mille :) comunque si , ho scritto il programma in c e in c++ prima di assembly ma l'errore non mi riesce di trovarlo ! Forse e' una cosa banale ma proprio non sono riuscita a correggerlo :( ho scritto in un centinaio di forum e nessuno ha risposto. Se , quando hai tempo ovviamente, ci dessi un occhiata mi faresti un gran favore !! Grazie mille in anticipo :)

Scusa se ti rompo le scatole ! Potresti aiutarmi ? Qui non mi risponde nessun altro 😓

 Scusa se ti rompo le scatole ! Potresti aiutarmi ? Qui non mi risponde nessun altro 😓
 
Il codice in oggetto l'ho letto.
Non l'ho provato (non so sottmano un compilatore MASM) ma non ho visto da nessuna parte la parte di codice che dovrebbe far stampare solo i numeri di due cifre (c'è la proc STAMPA_SEQUENZA che fa quello che deve, niente di più).
Oltretutto è, se permetti, veramente scritto in maniera... bruttina: la cosa peggiore è che i commenti sono pochi e spesso sbagliati! Ho visto che hai anche postato altri problemi simili: fossi in te cercherei di migliorare un po' di più il codice sotto questo aspetto, altrimenti sarà difficile andare avanti!
Ciao!

i commenti sono pochi perchè prima di metterli, vorrei funzionasse. per quando riguarda il contatore in STAMPA_SEQUENZA lo vorrei mettere soltanto dopo essermi assicurata che vengano stampate tutte le combinazioni. fino a ieri , digitando 10000 , mi uscivano i numeri 0001,0010... oggi ho modificato il programma e finalmente vengono stampate 00001,00010,00100,01000 ma non mi viene stampato il numero 10000 ( 
http://www.mediafire.com/?q51vwj64onvszln
 ) una volta verificato questo, metterò il contatore, ma devo essere sicura che il codice che ho scritto sia corretto prima

 i commenti sono pochi perchè prima di metterli, vorrei funzionasse. per quando riguarda il contatore in STAMPA_SEQUENZA lo vorrei mettere soltanto dopo essermi assicurata che vengano stampate tutte le combinazioni. fino a ieri , digitando 10000 , mi uscivano i numeri 0001,0010... oggi ho modificato il programma e finalmente vengono stampate 00001,00010,00100,01000 ma non mi viene stampato il numero 10000 ( 
http://www.mediafire.com/?q51vwj64onvszln
 ) una volta verificato questo, metterò il contatore, ma devo essere sicura che il codice che ho scritto sia corretto prima
 
In pratica hai chiesto aiuto per risolvere un problema che non avevi? Oppure volevi che qualcuno scrivesse il codice al posto tuo? :-/
Bah.

ho chiesto aiuto per un problema che ho fatto prima a risolvere da sola. cosa che è sempre meglio fare se ti capitano soggetti come te, che dicono di sapere qualsiasi cosa e poi parlano, parlano, parlano. non ho mai avuto intenzione di farmi scrivere UNA SOLA RIGA DI CODICE, ho postato ciò che avevo scritto e gli errori che ho riscontrato , non ho mai chiesto ,ne mai chiederò ad una persona di svolgere un compito per me, quindi sei pregato di tenere per te commenti che non rispecchiano ciò che ho chiesto. E' un forum, vuoi aiutarmi, mi aiuti; non vuoi , leggi altri post. io di sicuro non mi toglierò la vita, ma non permetterti di giudicare il mio lavoro o soprattutto di farmi passare come una persona che si fa passare compiti. io non sono una persona del genere, porto rispetto agli altri e vorrei che gli altri lo facessero con me.

 E' un forum, vuoi aiutarmi, mi aiuti; non vuoi , leggi altri post. 
 
No. E' usenet. E i tuoi messaggi violano praticamente ogni convenzione
in uso negli ultimi 30 anni. Per cui, se vuoi continuare a flammare con
fmassei:
 
1. non farlo
2. se proprio devi, fallo in modo opportuno.
 
Aggiungo: hai fatto caso che lui non e' stato l'unico ad avere
l'impressione che stessi chiedendo i compiti? Invece si scaldarti, fai
dell'auto-analisi per cercare di capire perche' i tuoi messaggi sono
stati interpretati in questo senso.
 
 
 
-- 
-riko
http://www.enrico-franchi.org/
 
http://rik0-techtemple.blogspot.com/
 

grazie per l'attenta analisi dei miei post: non credo di avere mai infranto nessuna regola, e non ho mai avuto la presunzione di esprimere giudizi gratuiti su nessuno: a fronte di tante persone che educatamente rispondono, o cercano di farlo, c'è sempre qualcuno che esprime giudizi lapidari e gratuiti; non cerco un suo aiuto, o una sua risposta, mi basta quella di coloro che umilmente esprimono la loro opinione, magari sbagliando, magari "scaldandosi" un pò, se ritengono di essere stati colpiti ingiustamente, la cosa -mi creda- più inutile che può capitare è avere a che fare con soggetti che con un'ombra di presunzione commentano i post altrui per fare gli avvocati difensori o per ergersi a sommi giudici. Se era questo che cercava, allora gentile utente mi complimento con lei, è perfettamente riuscito nel suo intento

 grazie per l'attenta analisi dei miei post: non credo di avere mai infranto nessuna regola, e non ho mai avuto la presunzione di esprimere giudizi gratuiti su nessuno: a fronte di tante persone che educatamente rispondono, o cercano di farlo, c'è sempre qualcuno che esprime giudizi lapidari e gratuiti; non cerco un suo aiuto, o una sua risposta, mi basta quella di coloro che umilmente esprimono la loro opinione, magari sbagliando, magari "scaldandosi" un pò, se ritengono di essere stati colpiti ingiustamente, la cosa -mi creda- più inutile che può capitare è avere a che fare con soggetti che con un'ombra di presunzione commentano i post altrui per fare gli avvocati difensori o per ergersi a sommi giudici. Se era questo che cercava, allora gentile utente mi complimento con lei, è perfettamente riuscito nel suo intento
 
Bòn - avevo deciso di lasciar perdere ma, visto che sono ottimista e spero sempre nelle buone intenzioni di ogni OP, i possibili macro-scenari sono due:
1- (a cui non credo) sei un troll. In questo caso big-fail visto che sono stato l'unico allocco a rispondere :)
2- (che spero sia quella giusta) hai perso poco tempo a capire come funziona Usenet, come ci si parla e come ci si esprime. Ci sono persone che sono qui da molto più tempo di me (ed io partecipo attivamente su vari gruppi da vari anni) che ritengono la "netiquette" la condicio-sine-qua-non per prendere in considerazione l'idea di rispondere. Ho presente persone che possono lasciar perdere un intero thread se l'OP fa male il quoting. Comunque, se questo è il tuo caso (su Usenet tradizionalmente ci si da tutti del tu) basta perdere una mezz'oretta scarsa a leggersi i vecchi 3ds per vedere come si fa.
 
Per quanto riguarda il caso specifico, basta che rileggi il tutto dal mio punto di vista: io ho letto "non mi funziona X" e sono andato a cercare "X" nel codice: visto che non c'era ho supposto (a quanto pare giustamente) che tu "X" non l'avessi proprio scritto.
Sottolineo, è solo un problema di atteggiamento: se avessi detto "ho questo codice e devo fare questa cosa, mi date dei suggerimenti? ho studiato questo e quest'altro e quest'esercizio mi risulta difficile per questo e quest'altro motivo." (questo è così come l'avevo inteso io).
 
Anche perché, e qui provo a dare un po' di input per gli altri che non hanno partecipato fin'ora, fosse stato un problema reale (tipo gara d'ottimizzazione, o simili) si sarebbe fatto con le SIMDx, in CUDA (per chi non disprezza le nVidia) o simili (suppongo eh, non fatemelo provare a fare! :D queste cose di solito le faccio fare al gcc in -o3 con tanta fiducia e pochissima voglia di fare misurazioni).
 
Quindi, per dare un senso a tutto 'sto post:
- se eri in buona fede scrivi il codice, provalo e debuggalo (prova-prova-prova-come facciamo tutti quando cerchiamo di imparare) e se non sei proprio in condizioni di riuscire ti aiuteranno in più di quelli che ti potresti aspettare.
- se non eri in buona fede grazie lo stesso, rileggere un po' di chiamate a INT DOS su X86 mi ha dato tanti bei ricordi, e molta nostalgia! :'-D
 
Ciao!

 codice che ho scritto sia corretto prima
 
Elena, non posso eseguire agevolmente il tuo codice, qui sul mio Mac, 
per� posso consigliarti fortemente di usare un debugger. E' 
fondamentale, quando si sviluppa in Assembly. Io, negli anni d'oro dei 
tool Borland, ho usato il Turbo Assembler in coppia col Turbo Debugger. 
Esistono sicuramente debugger migliori, al giorno d'oggi. Procuratene 
uno ed esegui il tuo codice passo passo. I bug si debuggano solo con un 
debugger.
 

 debugger.
 
Sono d'accordo che un debugger sia utilissimo... ma...
 
in ogni caso i problemi, se hai letto il codice, sono ben altri:
Righe del tipo
"MOV BL,CH     ; Carico la prima cifra in AL"
oppure
"CMP CH,CL
JE NULLA
CMP CH,CL
JE NULLA"
per non parlare della scelta dei registri in clobbering..
sono sintomatiche di problemi di metodologia ben peggiori.
 
IMHO all'OP serve sì una serie di strumenti utili (come appunto una toolchain decente e aggiornata per il linguaggio, se esiste) ma soprattutto un cambio di approccio alla programmazione assembly - che ricordo dà filo da torcere anche ai più esperti!
 
Ciao!

grazie per i consigli, finalmente ho risolto i miei problemi. ho modificato la struttura stessa del programma, in un modo che mi è risultato più semplice, inserendo anche la distinzione tra combinazione e disposizione. grazie a chi a si è preso il disturbo di aiutarmi. qui il codice: 
https://dl-web.dropbox.com/get/Shared%20with%20Elena/ASM/asm28.asm?w=3ffbb084
 

 in ogni caso i problemi, se hai letto il codice, sono ben altri:
 
Il codice l'ho letto e sono venuti i brividi anche a me, ma ognuno č 
libero di programmare male, se vuole. Concediamole poi, magari, anche 
il beneficio di poter essere alle prime armi.
Un debugger č comunque utile, in tutti i casi. Sicuramente risolverebbe 
il suo problema, utilizzandolo. Poi, resterebbe il cambio di 
metodologia, ma quello č un problema che richiederebbe piů tempo per la 
sua correzione.
 

 sua correzione.
 
Sì, per carità, l'unico modo d'imparare è dai propri errori.
Volevo solo, purtroppo col mio modo solitamente scostante (ma non lo faccio a posta, son fatto così, che ci vuoi fare), dare dei consigli in merito: meglio che chi ha un po' più d'esperienza dica come stanno le cose piuttosto che abbozzi facendo finta che vada bene.
Al solito preciso, magari il mio codice fa schifo pure più del suo, però con vari trucchetti d'esperienza magari riesco a scrivere codice schifoso facilmente comprensibile, correggibile e modificabile; e son cose che ad esempio io ho imparato non soltanto perché ho sbagliato, ma perché qualcuno migliore di me me le ha insegnate negli anni. Su usenet ho imparato tantissime cose, per cui quando posso cerco anch'io di dare il mio parere, anche perché tanto quando sbaglio la correzione arriva in meno di un minuto :D
 
Faccio un esempio, correlato a quanto dicevo prima in questo thread. In assembly il commento è più importante del codice, perché non deve solo far capire cosa le istruzioni fanno: ogni gruppo di istruzioni deve descrivere la situazione attuale che ci si aspetta, in modo che in debug si possa facilmente mettere un breakpoint e controllare i valori dei registri, senza scorrersi centinaia di righe, soprattutto cercando di "swrappare" a mente le macro (e quando ci sono degli pseudo-op auguri!) presenti nel sorgente e sparse un po' qui un po' lì..).
 
Magari l'OP deve solo dare un esame all'università, magari vuole diventare il prossimo guru dell'assembly x86, non lo so. Di sicuro, se ti metti nel tuo giardino a tosare le siepi strappando i rami a mani nude, molti si fermeranno a consigliarti di usare quantomeno dei guanti! :)
Ciao!
 
P.S. Ironia della sorte, ho scritto questo post mentre in un altra finestra avevo il gdb bloccato su una istruzione assembly (una "LDR r0, [pc, #68]" NdA) su una procedura di boot (che non mi funziona) di un Cortex-A8 ;)

 piuttosto che abbozzi facendo finta che vada bene.
 
Io mi aspetto che chi ha un po' pi� di esperienza sappia capire quando 
una persona � inesperta e sta cercando, per quanto goffamente, di 
risolvere un problema.
Io mi aspetto che una persona con un po' pi� di esperienza la aiuti, 
piuttosto che troneggiare spocchiosamente affibbiando del "troll".
Io le ho dato il miglior consiglio che si pu� dare a una persona che 
sviluppa in Assembly e che sta cercando di individuare un bug: usare un 
debugger ed eseguire il codice passo passo.
Detto questo, sono felice che Elena, che abbia seguito o meno il mio 
consiglio, abbia risolto il suo problema.
 

 consiglio, abbia risolto il suo problema.
 
Yup. :)
Peace!