Passaggio paremtro tramite stack. aiuto!

di il
9 risposte

Passaggio paremtro tramite stack. aiuto!

Ciao. sono nuovo del forum. nel mio programma assembly ho un array di 3 elementi di tipo byte e devo passare questo array come parametro in ingresso ad una procedura tramite stack. ora sappiamo tutti che nello stack si possono impilare solo dati di tipo word e il mio problema è ke facendo l'opportuna push prima della chiamata della procedura, nello stack vanno a finire solo i primi due elementi dell'array di byte (che insieme formano la word). insomma vorrei sapere come fare a passare come parametro tramite stack l'intero array di byte. grazie

9 Risposte

  • Re: Passaggio paremtro tramite stack. aiuto!

    Puoi fare in diversi modi:
    metodo 1:
    mov dx,offset array
    xor ax,ax
    mov ax,numero elementi
    push ax
    push dx
    ricorda questo metodo va usato se hai un solo segmento dati !
    metodo 2
    mov ds,seg array
    mov dx,offset array
    xor ax,ax
    mov ax,numero elementi
    push ax
    push dx
    push ds
    questo sistema va usato se usi più segmenti dati
    metodo 3:
    passaggio di parametri per dati
    sapendo quanti dati contiene l'arrey
    fai:
    esempio di passaggio di 3 parametri.
    
    xor ax,ax
    mov bh,array[0]
    mov bl,array[1]
    mov ah,array[2]
    push bx
    push ax
    sapendo che i parametri sono solo 3 puoi tranquillamente scartare al

    ricordati che quando estrai dallo stack i parametri devono essere letti a partire dall'ultimo dato inserito.

    spero di esserti stato d'aiuto
  • Re: Passaggio paremtro tramite stack. aiuto!

    Ok grazie mille sei stato molto disponibile e di aiuto
    però vorrei sapere una cosa: in questi casi a cosa serve la xor?
  • Re: Passaggio paremtro tramite stack. aiuto!

    andrewpitt18 ha scritto:


    ok grazie mille sei stato molto dispinibile e di aiuto
    però vorrei sapere una cosa: in questi casi a cosa serve la xor?
    ok ho capito da solo: serve x azzerare il registro. grazie ancora per l'aiuto
  • Re: Passaggio paremtro tramite stack. aiuto!

    Esempio xor ax,ax ;cancella il registro
    la xor serve per azzerare il registro ed evitare che vengano passati dati indesiderati.
    per esempio
    mov ah,02 ;chiamo una funzione 
    mov dl,31h ; carico il carattere da visualizzare
    int 21h ; visualizzo il carattere a video
    mov ax,numero parametri ; carico il parametro 
    push ax ; salvo il parametro nello stack
    ..........
    ..........
    ..........
    pop ax : prendo il parametro
    ; adesso si possono verificare 2 casi
    1) numero parametro e un byte
    in questo caso quando eseguiro la pop ax avro ax = ah=02 e al=numero parametri
    e cio mi potrebbe causare qualche problema nella gestione dei parametri.
    utilizzando xor ax,ax evito questo tipo di problemi perchè all'esecuzione della pop ax avro : ax = ah=00 al = numero parametri.
    2) numero parametri e una word
    in questo caso la xor e superflua

    comunque se non ti piace la xor per cancellare il registro puoi usare anche la sub ax,ax e lievemente più lenta della xor ma fa la stessa cosa.
    spero di averti fatto capire.
  • Re: Passaggio paremtro tramite stack. aiuto!

    Ok grazie ancora x la spiegazione sisi io uso la sub x pulire i registri
  • Re: Passaggio paremtro tramite stack. aiuto!

    Senti un ultima cosa. ho provato a spedirti un mex privato ma non me lo fa mandare. te lo dico qua:
    ho visto ke hai risposto in parecchie discussioni, e ho visto insomma ke te la cavi abbstanza con assembly. anche io non sono male. siccome la settimana prossima devo dare un esame di assembly e sto ceracndo in tutti i modi di allenarmi. mi chiedevo se tu mi potevi dire qualche traccia e programma da svolegere x allenarmi. ho fatto un po di tutto, convertitori di basi, gestione stringhe, calcolatrici e non so piu che fare x allenarmi. mi chiedevo se mi potevi suggerire qualcosa, in particolare con lo stack. grazie in anticipo
  • Re: Passaggio paremtro tramite stack. aiuto!

    Ho provato a rispondere al tuo messaggio
    non so se arrivato comunque:
    rispondimi a questa domanda :
    avendo uno stack di lunghezza uguale 6 byte come fai a passargli 8 parametri
    non tralasciando i byte che servono alla call per chiamare la tua funzione?
    come allenamento ti propongo:
    1) calcolo di tutte le possibili colonne del totocalcio.
    2) routine per calcola gli anagrammi di una stringa immessa dall'utente.
    3) procedura di ordinamento di un file ti lascio libera scelta sull' algoritmo.
    4) grafico di una funzione.
    5) calcolo integrale e seriale
    questi esercizi potrebbero esserti utili per l'esame.
    lo stack lo puoi usare in tutti e 5 gli esperimenti
    forse solo nel grafico di funzione potrebbe non servirti
    in bocca a lupo.
    fammi sapere se lo hai passato ok?

    aspetto la risposta alla domanda per lunedi ok?
  • Re: Passaggio paremtro tramite stack. aiuto!

    Scusa se nonti ho piu risposto, ma non ho avuto piu modo di connettermi. cmq grazie mille x le tracce di allenamento. l'esame l'ho fatto e l'ho passato con 30 grazie dell'aiuto!
  • Re: Passaggio paremtro tramite stack. aiuto!

    E stato un onore averti aiutato.
Devi accedere o registrarti per scrivere nel forum
9 risposte