Chiarimento su gestione di array e indici

di il
9 risposte

Chiarimento su gestione di array e indici

Salve a tutti ragazzi fra un paio di giorni dovrò affrontare un esame universitario che richiede una prova di laboratorio in cui si programma in assembly
avrei bisogno di chiarirmi un piccolo dubbio: quando devo gestire un array attraverso un registro indice come SI mi è stato detto che per partire dal primo elemento effettivo quando lavoro su una stringa devo partire da 2...vorrei tanto capire il perchè di questa cosa e se vale solo per le stringhe o anche per altri tipi di array...grazie mille in anticipo a chi mi risponderà

9 Risposte

  • Re: Chiarimento su gestione di array e indici

    Veramente non è così in assoluto ... dipende dal contesto in cui lavori.

    Con quali strumenti operi in assembly?

    Mostra qualche esempio di codice a cui fai riferimento.
  • Re: Chiarimento su gestione di array e indici

    Uso emu8086
    Comunque ti faccio un esempio perché ora non ho il pc sotto mano

    Acquisisco una stringa da tastiera che metto in un array che può contenere massimo 10 caratteri
    Supponiamo che la stringa sia "ciao"
    Voglio sostituire a 'c' la lettera 'a'
    Devo inizializzale il registro indice a 2 perché la c è in quella posizione nel array....volevo sapere invece nella posizione 0 e nella 1 cosa c'è a questo punto perché a c non corrisponde la posizione 0 dell array


    Inviato dal mio iPhone utilizzando Tapatalk
  • Re: Chiarimento su gestione di array e indici

    La risposta dipende unicamente da quale funzione usi per acquisire la stringa da tastiera. Ecco perché ti chiedevo un esempio concreto.
  • Re: Chiarimento su gestione di array e indici

    Ah allora ecco un esempio
    Lea dx,buf
    Mov ah,0Ah
    Int 21h

    Ret
    Max equ 10
    Buf db max,?,max dup('$')


    Inviato dal mio iPhone utilizzando Tapatalk
  • Re: Chiarimento su gestione di array e indici

    In questo *specifico* caso tu utilizzi una funzionalità del DOS e precisamente la funzione 0ah dell'INT 21h il cui funzionamento è descritto, ad esempio, in



    Come vedrai dalla descrizione, questa funzione si aspetta in input (in DS:DX) il puntatore ad un'area di memoria (chiamata DOS input buffer) fatta in questo modo

    Offset Size Description
    00 1 maximum characters buffer can hold
    01 1 number of chars from last input which may be recalled OR number of characters actually read, excluding CR
    02 n actual characters read, including the final carriage return

    in cui, come puoi facilmente vedere, il primo byte rappresenta il numero massimo di caratteri di cui fare l'input, il secondo byte rappresenta il numero di caratteri presenti dopo l'input e solo dal terzo byte (offset 2) l'effettiva sequenza di caratteri in input.

    E' per questo *specifico* motivo che i dati li prelevi a partire dall'offset 2 (rispetto all'inizio del buffer, Buf nel tuo caso).

    Se avessi utilizzato un'altra funzione del DOS (o una tua funzione) questa cosa non sarebbe andata così (dato che non è una regola universale).

    Oppure, se avessi scritto così

    Buf db max,?
    StrBuf max dup('$')

    basandoti su StrBuf per ottenere i caratteri in input (e utilizzando sempre Buf per la chiamata) avresti dovuto utilizzare 0 come indice.
  • Re: Chiarimento su gestione di array e indici

    Grazie mille per la risposta e per il chiarimento, di sicuro grazie a questa spiegazione mi eviterò qualche errore durante l'esame [SMILING FACE WITH OPEN MOUTH AND SMILING EYES]


    Inviato dal mio iPhone utilizzando Tapatalk
  • Re: Chiarimento su gestione di array e indici

    Di nulla ... se hai bisogno di altri chiarimenti, fai un fischio ...
  • Re: Chiarimento su gestione di array e indici

    Ciao un altra domanda
    ho un array parola,in parola[1] dovrebbe esserci la dimensione totale della parola giusto?
    mi serve inserire questa dimensione totale della parola in un registro indice però il compilatore mi dice che non posso inserirla in un registro a 16bit...come posso ovviare a questo problem visto che i registri indici son entrambi a 16bit??
  • Re: Chiarimento su gestione di array e indici

    andreflex ha scritto:


    ciao un altra domanda
    ho un array parola,in parola[1] dovrebbe esserci la dimensione totale della parola giusto?
    No ... non è una regola ... Di nuovo, in quale contesto operi? Parli di buffer utilizzato per l'input come prima? O di altro array ?
    mi serve inserire questa dimensione totale della parola in un registro indice però il compilatore mi dice che non posso inserirla in un registro a 16bit...come posso ovviare a questo problem visto che i registri indici son entrambi a 16bit??
    
        mov al,num
        xor ah,ah
        mov si,ax
    
Devi accedere o registrarti per scrivere nel forum
9 risposte