Inserito un numero da tastiera capire se e' divisibile per 3

di il
40 risposte

40 Risposte - Pagina 2

  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Non so rispondere alla tua domanda..
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Ma un minimo di comprensione di quello che stai facendo deve esserci. Come fai a presentare un programma facendo copia-incolla di codice che non sai spiegare e non sai neanche se è corretto?

    Cosa dici poi al tuo professore o a chi devi presentare il compito?
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Sinceramente so commentare ogni operazione che viene fatta,purtroppo non mi è chiaro l'uso dello Oah con tutte le sue condizioni quindi mi trovo in difficoltà a gestire il tutto. Ho chiesto aiuto ,se non c'è modo di risolvere alcuni problemi,fa niente,andrò oltre..
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Sai commentare ogni operazione che viene fatta ... è quello che ti chiedo ... spiega le operazioni in quella parte di codice e ne parliamo ...

    Lo so benissimo che hai chiesto aiuto e infatti ti ho risposto con tutto l'aiuto del caso. Ma devi anche collaborare per farmi capire che impiego bene il mio tempo.
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Hai ragione

    sub ax,ax ;sottraendo AX a se stesso lo azzero quindi azzero sia la parte alta che Bassa che mi serviranno successivamente
    mov cl,numero+1 ; Sposto nella parte bassa di cx la lunghezza della stringa in modo da usarlo come contatore dell'istruzione loop.Qui il primo dubbio come faccio a dire che numero + 1 è la lunghezza della stringa?
    sub ch,ch ;nella parte alta di cx ho 0,avrei potuto usare anche uno XOR ch,ch oppure mov 0,sono operazioni equivalenti in termini di risultato ma non di cicli di clock
    sub si,si ;vedi sopra ^^
    ciclo: mov dl,numero[si+2] ; Non capisco la gestione di numero fatta in questo modo
    sub dl,48 ;30h=48 decimale,converto il carattere ascii immesso da tastiera in numero puro per le operazioni aritmetiche
    add al,dl ;equivale (?) a una mov in quanto al è vuoto e quindi ritrovo il valore di dl in Al
    adc ah,0 ;perchè fare addizione con carry se ho 0 ?!!?
    inc si ;passo all'elemento successivo incrementando si che uso come registro di scorrimento
    loop ciclo ;ripeto il ciclo fino a quando cx non si azzera,poichè CH è uguale a 0 proseguo questo ciclo fino a quando cl non diventa 0 ricordando che in cl c'è numero+1 ossia la lunghezza
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Qui il primo dubbio come faccio a dire che numero + 1 è la lunghezza della stringa?
    [numero+1] è un indirizzo non un valore. E' l'indirizzo dove si trova il numero di caratteri inseriti. E' la funzione usata con la INT 21h che, come ti ho detto prima, restituisce un valore all'interno della locazione [numero+1].
    Non capisco la gestione di numero fatta in questo modo
    Carica in DL il valore della locazione all'indirizzo [numero+si+2]. In questo modo prende tutti i caratteri che si trovano a partire dall'indirizzo [numero+2]
    equivale (?) a una mov in quanto al è vuoto e quindi ritrovo il valore di dl in Al
    No. Stai facendo una ADD quindi stai addizionando il valore di DL con quello precedente di AL e il risultato va in AL. All'inizio del ciclo AL è zero ma durante il ciclo no perché conserva i vari risultati delle addizioni.
    perchè fare addizione con carry se ho 0 ?!!?
    Perché così l'eventuale riporto (carry), viene sommato al valore precedente di AH.
    Se non comprendi ancora, prova a fare una semplice somma con la matita e controlla come usi i riporti.

    Hai spiegato le varie operazioni ma non il perché di questo ciclo. Cosa succede alla fine del ciclo? Cosa hai nel registro AX ?

    Prova a fare un esempio, come ti chiedevo prima, come se i caratteri nel buffer fossero

    1 8 2

    Cosa succede a quei 3 caratteri? Cosa ottieni in quel caso in AX?
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    182 con gli spazi o senza? Se intendi con gli spazi l'ho inserito e mi dice che il numero non e' divisibile. Per quanto riguarda cosa si trova in AX,suppongo ci sia il numero da dividere per 3 ?
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    No ... senza spazi era per vedere meglio le cifre ...

    Non fare supposizioni ... significa che hai spiegato il codice ma non l'hai capito.
    Applica tutti i passaggi, uno per uno, prendendo le cifre dell'esempio, una dopo l'altra e dimmi cosa trovi alla fine in AX
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    182 non è divisibile per 3. Forse inizio a capire,sbaglio o trovo la somma delle cifre ecco perchè devo fare anche l'addizione con carry (?)
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    sbaglio o trovo la somma delle cifre
    Non sbagli ... trovi la somma delle cifre 1+8+2 ... ovvero 11 che non c'entra nulla con 182

    Lascia perdere il riporto ... il problema grave è che non ottieni in AX quello che pensi.
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    :O e cosa ottengo?
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Cesc__ ha scritto:


    :O e cosa ottengo?
    Te l'ho detto!

    trovi la somma delle cifre 1+8+2 ... ovvero 11
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Ottimo,Scusa se ho disturbato per tutto questo tempo ,ogni tanto mi blocco da solo e devo capire.Grazie ancora della disponibilità e della competenza!
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Va be ... concludiamo ... in quel ciclo manca una moltiplicazione per 10 di AX ad ogni giro *prima* dell'addizione.

    Adesso modifica il codice.
  • Re: Inserito un numero da tastiera capire se e' divisibile per 3

    Ok basta aggiungere un MUL BL dopo aver spostato 10 al suo interno e il gioco è fatto
Devi accedere o registrarti per scrivere nel forum
40 risposte