Errori riscontrati nei vostri progetti Assembler

Nel correggere le relazioni del SecondoEsercizioAssembler2001 sto incontrando questi errori comuni:

  • Mancato salvataggio/ripristino dei registri usati nel trap.handler.
    • Le eccezioni e le interruzioni debbono essere invisibili al programma principale. Se invece "sporcate" i registri l'insorgere di una interruzione potrebbe rovinare l'esecuzione del programma principale.
  • Lettura sbagliata della password.
    • Bisogna stare attenti che i caratteri battuti dall'utente non sovrascrivano le strutture dati che seguono. In particolare bisogna ricordarsi che la stringa letta dalla syscall 8, e' terminata da un carattere "0", quindi la zona "password" deve essere lunga almeno 5 caratteri.
  • Uso di registri per comunicare dal trap.handler al programma principale.
    • Questo vuol dire riservare un registro per uno scopo estremenente specifico. Visto che i registri sono solo 32 questo non si fa .
    • Inoltre, il testo del SecondoEsercizioAssembler2001 indicava chiaramente che e' il programma principale a dover confrontare la zona di memoria di nome "buffer" con la zona di memoria di nome "password".
  • Mancato allineamento in memoria di "buffer" o di "password".
    • Se usate l'istruzione lw per caricare una delle due zone di 4 bytes in un registro dovete assicurarvi che l'indirizzo da cui caricate le words sia allineato (cioe' multiplo di 4). Questo si risolve:
      • definendo le due zone come .word
      • oppure usando la direttiva .align 2 che informa l'assemblatore di allineare la zona.
      • oppure usando l'istruzione ulw (unaligned load word)
  • Salto dal trap handler al programma principale.
    • questo stravolge completamente il flusso del programma .... non si fa.
  • Il programma ricorda la password battuta da un run al successivo ....
    • questo e' un grave baco di sicurezza!!! smile

Avrei dovuto considerare come errore (ma non l'ho fatto) anche:

  • manipolare il buffer byte a byte invece che come una singola word (era o non era di 4 bytes?)

Errori riscontrati nelle vostre relazioni per il PrimoEsercizioAssembler2001

  • Errore nello scrivere nella matrice
    • talvolta siete usciti dalla zona di memoria allocata, sporcando le strutture dati seguenti
  • Stampa col segno della half-word della prima matrice
    • si deve usare lhu (load half unsigned) per caricare la half-word altrimenti essa verra' estesa in segno
  • Errore nel caricare i due bytes della half-word
    • anche in questo caso si deve prestare attenzione al fatto che i due bytes non vanno considerati col segno
  • Uso delle istruzioni j o b invece che jal nella seconda chiamata ricorsiva di tart
    • anche se il programma in alcuni casi particolari funziona ...
    • ... bisogna stare molto attenti altrimenti lo stack non viene gestita correttamente.
  • Implementazione di tart in cui si somma 1 ad un registro (inizializzato a 0) ogni volta che si giunge al bordo
    • mi dispiace frown , ma queste non erano le specifiche da seguire per implementare tart

Restano poi alcune disattenzioni che hanno penalizzato alcuni di voi (per fortuna pochi):

  • mancanza del flow-chart di un programma
  • mancanza dei listati di un programma

-- AndreaSterbini - 24 May 2001


This topic: Architetture2/MZ > ErroriComuniAssembler
Topic revision: r4 - 2001-06-01 - AndreaSterbini
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2022 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback