Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797

    [Pseudo assembler] media di un vettore

    Testo
    Sia dato un vettore A memorizzato a partire dalla locazione LA, di dimensione
    non nota, che contiene i voti riportati agli esami da uno studente. I voti sono
    valori positivi (tra 18 e 30), ciascuno dei quali occupa 1 byte, ed il valore 0 indica
    la fine del vettore. Scrivere una subroutine in Assembler (commentata linea per
    linea in modo leggibile) che scriva nella locazione di memoria LNESAMI il
    numero di esami e nella locazione LMEDIA la media ottenuta. Si descriva anche
    la situazione dello stack all’inizio della subroutine.
    Il puntatore al vettore A, LA (cioè la locazione di memoria in cui è memorizzato il
    primo numero intero), il puntatore LNESAMI alla variabile NESAMI (che contiene
    il numero totale di esami sostenuti dallo studente) e il puntatore LMEDIA alla
    variabile MEDIA (che contiene la media dei voti degli esami sostenuti dallo
    studente) sono passati alla subroutine tramite lo stack, nell’ordine descritto. Si
    supponga di avere a disposizione un’istruzione DIV in grado di operare su
    numeri in virgola mobile e si considerino le variabili NESAMI e MEDIA espresse
    in virgola mobile su 4 bytes. Nel caso lo studente non avesse sostenuto
    nemmeno un esame, la sua media è pari a 0.
    Ipotesi: i registri a disposizione sono R0, R1 ed R2, ciascuno dei quali presenta
    una dimensione pari a 32 bit.

    codice:
    PUSH R0
    PUSH R1
    PUSH R2
    MOVE #16(SP),R0 //in r0 carica il puntatore del vettore
    CLEAR R2 //azzera r1 e r2
    CLEAR R1
    CMP (RO),#0 //controlla che nn sia stato dato nessun esame 
    BRANCH = 0 FINEERR //se è così salta a fineerr
    loop:  //ciclo
    CMP (RO),#0 //controlla la fine del vettore
    BRANCH = 0 FINE
    ADD (RO),R1 // somma in r1 il contenuto di r0
    ADD #1,R2 //incremetna il contatore
    ADD #1,R0 //passa di cella
    BRANCH LOOP //salta a loop
    fineerr:
    MOVE #0,(#24(SP)) //carica 0 nella media
    POP R2
    POP R1
    POP R0
    fine: 
    DIV R1,R2 // fa la divisione (nn ricordo l'ordine degli operandi)
    MOVE R1,(#24(SP)) // sposta i valori nelle celle..
    MOVE R2,(#20(SP))
    POP R2
    POP R1
    POP R0
    secondo voi è giusto?

  2. #2
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    nessuno che sa se va o no?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.