|
| |
| Si scriva un programma assembly che conti i caratteri di
una stringa diversi dallo spazio (il codice ASCII dello spazio e' 32 in
decimale).
Il conteggio deve essere effettuato attraverso un sottoprogramma CONTA,
che riceve l'indirizzo della stringa come parametro sullo stack e
restituisce come parametro di ritorno il numero di caratteri della stringa.
La stringa e' terminata da '\0' come in C/C++.
Si supponga di chiamare STRINGA l'etichetta relativa all'indirizzo di
partenza della stringa. Il codice C++ del sottoprogramma sarà allora:
int CONTA (char STRINGA[]) {
int i=0;
int sum=0;
while(STRINGA[i]!='\0') {
if (STRINGA[i]!=' ')
sum++;
i++;
}
return sum;
} |
|
Soluzione |
| Si scriva un programma assembly che conti gli elementi di
valore dispari di un vettore di interi.
Il conteggio deve essere effettuato attraverso un sottoprogramma
CONTADISP, che riceve l'indirizzo del vettore come parametro sullo stack e
restituisce come parametro di ritorno il numero di elementi del vettore di
valore dispari. Si supponga di non fornire al sottoprogramma il
riempimento del vettore, ma che il vettore sia terminato da un elemento 'tappo'
di valore pari a zero.
Si supponga di chiamare VETT l'etichetta relativa all'indirizzo di
partenza del vettore. Il codice C++ del sottoprogramma sarà allora:
int CONTADISP (int VETT[]) {
int i=0;
int sum=0;
while(VETT[i]!=0) {
if (VETT[i]%2==1)
sum++;
i++;
}
return sum;
} |
|
Soluzione |
|
PROVA del 27 Giugno 2002
Si scriva un programma assembly che calcoli il prodotto degli elementi di valore dispari di un vettore di interi.
Il calcolo deve essere effettuato attraverso un sottoprogramma PRODDISP, che riceve l'indirizzo del
vettore ed il suo riempimento come parametro sullo stack e restituisce come parametro di uscita il valore
PROD.
Si supponga di chiamare VETT l'etichetta relativa all'indirizzo di partenza del
vettore.
Il codice C++ del sottoprogramma sarà allora:
void PRODDISP(int VETT[], int RIEMP, int & PROD) {
PROD=1;
int i=0;
while(i<RIEMP) {
if (VETT[i]%2!=0)
PROD=PROD*VETT[i];
i++;
}
}
Si provi il programma con il vettore [-1 5 6 -3 -7 4 2], avendo cura di allocare l'area dati del MAIN a
partire dall'indirizzo $8400. |
|
PROVA del 10 Luglio 2002
Si scriva un programma assembly che, date due stringhe di eguale
lunghezza, calcoli il numero di caratteri omologhi delle due stringhe che sono uguali.
Il conteggio deve essere effettuato attraverso un sottoprogramma CONTAUG, che riceve l'indirizzo delle
due stringhe come parametro sullo stack e restituisce come parametro di uscita il valore CAR_UG.
Le stringhe siano terminata da '\0' come in C/C++
Si supponga di chiamare STR1 e STR2 le etichette relative agli indirizzi di partenza delle due
stringhe.
Il codice C++ del sottoprogramma sarà allora:
void CONTAUG (char STR1[], char STR2[], int & CAR_UG){
int i=0;
CAR_UG=0;
while(STR1[i]!='\0') {
if (STR1[i]==STR2[i])
CAR_UG++;
i++;
}
}
Si provi il programma con le stringhe: 'Oggi 27 Giugno 2002'
e 'Ieri 26 Giugno 2002'
avendo cura di allocare nell'area dati del MAIN l'etichetta CAR_UG a partire dall'indirizzo $8400.
n.b.: con queste stringhe il valore di CAR_UG sara' 15. |
|