|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
HELP!: Elaborati!
Ciao ragazzi sono nuovo di qui.
Siccome la domenica di questa settimana devo consegnare gli elaborati avrei bisogno di un grande aiuto essendo in stato di malattia. Non riesco a capire cosa devo fare qui i ho studiato ma non sono capace di fare il diagramma di flusso. C'è qualcuno che mi può aiutare. Non copio per passare così ma per impare che poi in futuro se mi ricapiterà un problema simile saprò cosa fare. Mi potresta aiutare? Grazie ELABORATO 1 Devo creare un programma che sostituisce tutte le occorrenze di una sottostringa all'interno di una stringa. Ad esempio ("Questa stringa è una stringa","stringa";"Mela") -> Questa mela è una mela. Non so se mi avete capito. Io ho impostato il programma così: #include <stdio.h> //include la libreria stdio.h void main() { //La stringa da modificare char stringa[1024] = "Questa stringa e' una strina"; char str1[] = "stringa"; char str2[] = "mela"; __asm { che blocco devo implementare in assembler } printf("Nuova stringa: %s\n";stringa); } So benissimo che esistono i comandi di manipolazione della stringa e che sono: LODS - leggi stringa STOS - scrivi stringa MOVS - copia stringa CMPS - confronta due stringhe SCAS - esamina stringa Cosa devo fare? Grazie per la vostra futura collaborazione. Cordialissimi saluti a tutti voi programmatori Cristian Capannini |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
Credo che....
Ciao a tutti, spero che riusciate a risolvere questo problema.....vi ringrazierò un casino. Riesco adesso solo a studiare ce l'ho Lunedì prox l'esame quindi se potete risolvermelo entro giovedì se potete o max venerdì. Grazie a tutti. Ci tengo molto a passare questo esame e vorrei cortesemente essere aiutato.
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
devi stare attento se modifichi qualcosa nei registri non ti ritrovi la stessa cosa dopo...
le variabili possono essere memorizzate pure su alcuni registri quindi io ti consiglio di "salvare il contesto" cioè di mettere il contenuto di tutti i registri principali nello stack: push(AX); push(BX); ecc... poi alla fine delle tue robe in assembly fai i pop... (al contrario di come li hai messi cioè prima bx poi ax) cmq guarda le documetazioni in giro io nn mi ricordo + bene il tutto infine fai il print |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
Ehmm...
Ehm grazie comunque però come lo impostereste voi?
Vi dico che sto lavorando con Visual Studio C++ 6.0. |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
Ehm....
Su xp e con visual studio 6.0 c++. Cioè il programma quando lo esequi deve cambiare solo la sottostringa "Stringa" con "mela" uitilizzando i registri.
Bisogna convertire la parola? O bisogna fare il CMP fino a che non trova la parola stringa se si sostituisci e vai avanti a cercare anche la seconda sottostringa uguale alla prima se no cerca finchè la ogni sotto stringa non sia la parola "stringa" una volta sostituisce le due sottostringhe con "mela". Come si fa? PS: Bisogna che lo consegno domenica perchè se no non posso andare all'esame e ci tengo tanto. Grazie |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
grazie.....
ehm vi ringrazio della vostra collaborazione........
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Guarda ... cerco io di aiutarti (per quello che posso, ovviamente).
Il mio primo dubbio è questo: nell'array stringa se devi sostituire "stringa" con "mela" in pratica accorci la stringa. Devi per forza operare su un solo array o puoi usare un array "di output"??? Allungare/accorciare una stringa non è proprio molto comodo!!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
ehm grazie micetto (scusa te ti chiamo così)
Ehm ho visto questa cosa a fianco:
Input: la stringa in cui effettuare la sostituzione, la stringa da cercare e quella con cui sostituirla (Tutti array di BYTE terminanti con 0) Output: la stessa stringa modificata N.B: LA STRINGA MODIFICATA DEVE ESSERE TERMINATA DA UN CARATTERE NULLO (BYTE 0) ESATTAMENTE COME LE STIRNGHE DI INPUT. SI SUPPONGA CHE IL BUFFER DI MEMOORIA CUI CORRISPONDE LA STRINGA DA MODIFICARE SIA SEMPRE SUFFICIEMENTE AMPIO PER IL RISULTATO. PS. Vuoi che ti invio il testo degli elaborati da fare entro se è possibile sabato....se è possibile...solo il 2° no perchè l'ho fatto perchè mi sembrava il più facile tra quegli altri due. Potreste aiutarmi? Grazie della tua attenzione micetto (scusa se ti chiamo così perchè ho visto l'avatar del gattino che è il mio animale preferito! e ne ho 12 in casa mia identici al tuo avatar 7 li ho chiamati come i 7 nani e gli altri 3 come i tre re magi <= CHE IDIOTA CHE SONO NON E' VERO?). Comuqneu ti ringrazioerò e non so come del tuo aiuto. Il secondo è stato più facile perchè ho fatto già un'esercizio precedente. Ah giusto quello della parità dei dispari o parità pari e quello della ricerca della sotto stringa sono simili a due elaborati che ho fatto ma non sono in grado di estenderli se te li invio e mi dai una mano, che ne dici? GrazieCordialissimissimissimi saluti al micetto (se è possibile vorrei sapere il suo nome, io mi chiamo Cristian) Ciao Ciao |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
ricerca carattere di una stringa esempio
/********************************************************************************
* * * Architetture dei sistemi di Elaborazione * * * ******************************************************************************** Esercizio: 003 Descrizione: Ricerca di un carattere in una stringa ********************************************************************************/ questo come dice il titolo fa una ricerca del carattere di una stringa #include <stdio.h> void main() { // Variabili char Stringa[] = "Questa è una stringa"; int Lunghezza = sizeof(Stringa)-1; char Carattere = 'è'; int Posizione; // Blocco assembler __asm { MOV DL,Carattere ; Carattere da cercare in DL MOV ECX,Lunghezza; Numero di caratteri XOR EBX,EBX ; Azzera EBX Ciclo: CMP EBX,ECX ; Ho superato la lunghezza ? JGE NonTr MOV AL,Stringa[EBX] ; Copia in AL il carattere EBX-esimo CMP AL,DL ; Confronta i caratteri JE Fine ; Trovato! INC EBX ; Passa al carattere successivo JMP Ciclo NonTr: MOV EBX,-1 ; Carattere non trovato Fine: MOV Posizione,EBX ; Trovato in posizione EBX } // Stampa su video printf("Posizione=%d\n",Posizione); } |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
e l'altro elaborato non è simile a questo?
/********************************************************************************
* * * Architetture dei sistemi di Elaborazione * * * ******************************************************************************** Esercizio: 006b Descrizione: Calcolare la parità di un vettore di byte (Seconda Versione) ********************************************************************************/ #include <stdio.h> void main() { // Variabili unsigned char Vettore[] = {3,7,3,7,5,1,4}; unsigned int Lung = sizeof(Vettore)/sizeof(Vettore[0]); int Ris; // 0: parità pari, 1: parità dispari // Blocco assembler __asm { MOV ECX,Lung ; Lunghezza del vettore in ECX XOR EDX,EDX ; Azzera EDX Ciclo: XOR DL,Vettore[ECX-1] ; LOOP Ciclo ; Continua finchè ECX è 0 TEST DL,DL; Il byte in DL ha la stessa parità dell'intera stringa LAHF ; Carica i flag in AH NOT AH ; Il flag di parità è 1 se la parità è pari: lo inverto SHR EAX,10 ; Sposto il flag di parità sul primo bit di EAX AND EAX,1 ; Mantengo solo il primo bit MOV Ris,EAX ; Ris è 1 se il numero di bit a uno è dispari, 0 altrimenti } // Stampa su video printf("Ris=%d\n",Ris); } e questo potrebbe aiutarmi a risolvere l'altro elaborato? |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Posso darti come "input" questo codice:
Codice:
#include <stdio.h>
int main (void)
{
char stringa[1024] = "Questa stringa e' una stringa";
char str1[] = "stringa";
char str2[] = "mela";
__asm
{
lea esi,stringa
lea edi,str1
call compara_str
jmp end_asm
/* INPUT:
* esi = puntatore alla stringa 1
* edi = puntatore alla stringa 2
* OUTPUT:
* Z = 1 (stringhe uguali)
* Z = 0 (stringhe diverse)
*/
compara_str:
push esi
push edi
compara_str_loop1:
mov al,[esi]
cmp al,[edi]
jne compara_str_end
cmp al,0
je compara_str_end
inc esi
inc edi
jmp compara_str_loop1
compara_str_end:
pop edi
pop esi
ret
end_asm:
}
return 0;
}
La sub-routine compara_str si occupa di verificare se 2 stringhe sono esattamente uguali oppure no. A quel punto, tenendo edi che punta a str1, bisogna partire dal primo carattere di stringa e andare avanti per cercare se ad un certo punto si trova la stringa in str1. L'unica cosa è che da "stringa" a "mela" accorci e non crea troppi problemi ma se la stringa da sostituire fosse più lunga, sarebbe più un casino. Credo che ti convenga usare un buffer temporaneo, se ti è possibile (cioè se ti va bene). P.S.: poi comunque prova a "buttare" giù qualcosa tu.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
adesso lo provo ti ringrazio che cosa e quanto ti devo? Te lo dico senza scherzare. Dimmi quanto ti devo e però pensavo con cosa sdebitarmi? Ti mando un mega complimenti per il tuo aiuto...e l'altro hai provato a darci un'occhiata....grazie grazie grazie e ehm giuuuuso
che cos'è il buffer temporaneo che non ho capito bene a cosa servi?
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
Fai scienze dell'informazione a cesena per caso? Anche io devo consegnare questi elaborati. |
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
Ehm....
Ehm si ma non copiare ok? . Chi sei?
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Adesso non ho molto tempo, appena ho un attimo domani la riscrivo bene bene. Sorry. ![]() P.S. per buffer temporaneo intendevo una cosa del genere: Codice:
char stringa[200] = "Questa stringa e' una stringa"; char buffer[200];
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
Oups...
non ti preoccupare capita (
sdebitarmi ....
Ultima modifica di LOVE85 : 21-06-2006 alle 22:23. |
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
ehm
Ciao AndBin ti consiglio prima di postarlo di mandarlo o nella mia email: [email protected] ho nel mex privato grazie perchè quel ragazzo copia da tutti.
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Posso postare questo codice che è solo una parte del codice che ho messo giù io.
Ovviamente devi completarlo tu! Codice:
#include <stdio.h>
int main (void)
{
char stringa[200] = "Questa stringa e' una stringa";
char output[200];
char str1[] = "stringa";
char str2[] = "mela";
__asm
{
/*
.... tuo codice ....
*/
jmp end_asm
/* INPUT:
* esi = puntatore alla stringa
* OUTPUT:
* eax = lunghezza
*/
calcola_lunghezza:
push esi
xor eax, eax
calcola_lunghezza_loop:
cmp [BYTE PTR esi],0
je calcola_lunghezza_end
inc eax
inc esi
jmp calcola_lunghezza_loop
calcola_lunghezza_end:
pop esi
ret
/* INPUT:
* esi = puntatore alla stringa 1
* edi = puntatore alla stringa 2
* ecx = lunghezza
* OUTPUT:
* Z = 1 (stringhe uguali)
* Z = 0 (stringhe diverse)
*/
compara_str:
push ecx
push esi
push edi
cld
repz cmpsb
pop edi
pop esi
pop ecx
ret
end_asm:
}
printf ("Nuova stringa: %s\n", output);
return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
Non so come tu faccia a saperlo visto che non sai nemmeno chi sono. Se avessi letto un po' in giro comunque avresti visto che c'è un mio 3d dove chiedo consigli su alcune istruzioni perchè li sto facendo e non sto chiedendo a qualcun altro su internet di farmeli. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:29.











CHE IDIOTA CHE SONO NON E' VERO?). Comuqneu ti ringrazioerò e non so come del tuo aiuto. Il secondo è stato più facile perchè ho fatto già un'esercizio precedente. Ah giusto quello della parità dei dispari o parità pari e quello della ricerca della sotto stringa sono simili a due elaborati che ho fatto ma non sono in grado di estenderli se te li invio e mi dai una mano, che ne dici? Grazie
che cos'è il buffer temporaneo che non ho capito bene a cosa servi?
Ehm si ma non copiare ok?
sdebitarmi








