Ciao ragazzi sono uno studente ma che frequento il fuoricorso ho bisogno di una grandissimo aiuto! Per favore vi chiedo di aiutarmi l'esame si avvicina e il mio cervello ha consumato tutte le risorse possibili per fare questi 3 elaborati! Devo consegnare 3 elaborati di cui 1 l'ho fatto perchè mi è sembrato semplice. Mi potreste aiutare entro Domenica SE è possibile?
Grazie
ELABORATO 1
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
HO TROVATO QUESTO MA NON RIESCO AD ESTENDERLO PER L'APPOSITO ESERCIZIO CHE DEVO FARE
#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);
}
ELABORATO 2
Data una sequenza di bit, sapendo che ogni n bit(di dati) vi è un bit di parità (1 se il numero di bit a 1 fra i precedenti n è dispai-9, verificare se vi sono errori.
#include <stdio.h>
void main()
{
unsigned char vet[] = {2,4,67,2,2,58,99}; //sequenza di bit
unsigned int len = 55; // lunghezza numero di bit
unsigned char n=4 // numero di bit dati
unsigned char errori=0; // risultato (1= errori, 0=no errori)
__asm
{
qui devo inserire che blocco? mi potreste aiutare a crearlo?
}
printf("La sequenza di bit %s contiene errori\n",(errori?"":"non "));
}
-----------------------------------------------------------------
#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
}
-----------------------------------------------
Cosa devo fare?
Grazie per la vostra futura collaborazione.
Cordialissimi saluti a tutti voi programmatori
Mi potreste creare voi il programma SE VOI potete?