Tema 1

Enunț

Să se implementeze un program în limbaj de asamblare care efectuează evaluarea unei expresii aritmetice în formă postfixată (Reverse Polish notation) și apoi afișează rezultatul. Numerele ce apar în expresie sunt numere întregi, pe 32 de biți, iar operațiile ce se aplica lor sunt: +, -, /, *.

Implementare

Programul va folosi ca input un string în care se afla expresia postfixată. Această expresie se va citi de la tastatura folosind macro-ul GET_STRING.

Găsiți în arhiva cu resursele temei un fișier schelet de la care puteți începe implementarea.

Exemplu rulare:

$ ./tema1
-200 150 60 + 10 - /
-1
$ ./tema1
300 400 + 10 *
7000

Testare

Tema se poate testa pe platforma vmchecker sau local folosind checker-ul din arhiva cu resursele temei.

Arhiva conține o serie de input-uri în directorul inputs/input*.txt și rezultatele așteptate pentru fiecare test, în directorul outputs. Verificarea acestor teste este făcută automat de către checker. Nu folositi ca input fisierele infix*.txt.

Fișierul README din arhivă conține instrucțiuni despre folosirea checker-ului.

Trimitere și notare

Temele vor trebui încărcate pe platforma vmchecker (în secțiunea IOCLA) și vor fi testate automat. Arhiva încărcată trebuie să fie o arhivă .zip care să conțină:

  • fișierul sursă ce conține implementarea temei, denumit tema1.asm
  • fișier README ce conține descrierea implementării

Punctajul final acordat pe o temă este compus din:

  • punctajul obținut prin testarea automată de pe vmchecker - 80%
  • coding style - 10%. Se va ține cont de:
    • claritatea codului
    • indentare coerentă
    • comentarii
    • nume sugestive pentru label-uri
  • fișier README - 10%

Temele care nu trec de procesul de asamblare (build) nu vor fi luate în considerare.

Mașina virtuală folosită pentru testarea temelor de casă pe vmchecker este descrisă în secțiunea Mașini virtuale din pagina de resurse.

Precizări suplimentare

  • Aici puteţi găsi un cheatsheet, recomandări, o serie de bug-uri frecvente, etc.
  • Inputul citit de la tastatura este valid (nu se efectuează împățiri la 0, nu se citesc caractere diferite de [0-9] si ”-+/* ”)
  • Operanzii pot avea valori negative, va trebui sa folosiți imul pentru înmulțire și idiv și cdq pentru împarțire.
  • Răspunsul oricărei operații nu va depăși 31 de biți (nu va face seta flag-ul de Overflow)
  • În cazul operației de împarțire, doar câtul va fi luat în considerare. Spre exemplu, pentru input-ul '7 6 / 2 +' programul va trebui să afișeze 3:
$ ./tema1
7 6 / 2 +
3
  • Dacă întâmpinați probleme în rularea modului de debug în SASM, asigurațivă că fișierul ~/.gdbinit nu conține următoarea linie source ~/peda/peda.py.

Resurse

Arhiva ce conține ​checker-ul, testele și fișierul de la care puteți începe implementarea este aici.

iocla/teme/tema-1.txt · Last modified: 2018/11/11 12:16 by radu.nicolau
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0