.campion
conectare | înregistrare | căutare
Pagina principală » Probleme » miniasm

ultima problemă
grupă: mică
sursă: OMI 2016
ultimul articol
autor: Prof. Radu Vişinescu
ultimul software
autor: Prof. Emanuela Cerchez
 .campion
miniasm


Timp maxim de execuţie/test:
0.4 secunde
Memorie totala disponibilă/stivă:
1.5 MB/0.5MB

Pentru programarea unui dispozitiv se foloseşte o variantă simplificată a limbajului de asamblare. Avem doar patru regiştri: AX, BX, CX şi DX. Dispozitivul are un procesor de mică performanţă, aşa că regiştri pot stoca numai trei biţi, adică valori între 0 şi 7, inclusiv. Totuşi, în acest mini assembly există instrucţiunile clasice din limbajul de asamblare pentru operaţiile aritmetice şi operaţiile pe biţi, după cum urmează. În continuare vom descrie instrucţiunile limbajului. Pentru descrierea parametrilor vom folosi reg, care poate semnifica oricare registru şi imm, care poate semnifica orice valoare imediată, adică o constantă între 0 şi 7, inclusiv.
  • MOV reg,reg: Registrul din primul parametru ia valoarea registrului din al doilea parametru.
  • MOV reg,imm: Registrul ia valoarea imediată.
  • NOT reg: Se execută un NU logic pe registru.
  • AND reg,reg: Se execută ŞI logic între cei doi regiştri şi primul registru ia valoarea rezultatului.
  • AND reg,imm: Se execută ŞI logic între cei doi parametri şi registrul ia valoarea rezultatului.
  • OR reg,reg: Se execută SAU logic între cei doi regiştri şi primul registru ia valoarea rezultatului.
  • OR reg,imm: Se execută SAU logic între cei doi parametri şi registrul ia valoarea rezultatului.
  • XOR reg,reg: Se execută SAU EXCLUSIV logic între cei doi regiştri şi primul registru ia valoarea rezultatului.
  • XOR reg,imm: Se execută SAU EXCLUSIV logic între cei doi parametri şi registrul ia valoarea rezultatului.
  • MUL reg: Se înmulţeşte valoare din AX cu registrul din parametru şi rezultatul se stochează în DX:AX.
  • DIV reg: Se împarte valoarea din DX:AX cu registrul din parametru. Câtul se stochează în AX şi restul în DX. Dacă registrul este egal cu zero, sau câtul nu încape pe trei biţi, instrucţiunea nu este validă.
Notăm cu DX:AX un număr de şase biţi, biţii semnificativi fiind stocaţi în DX, iar biţii nesemnificativi în AX. De exemplu, dacă avem DX=3 şi AX=5, valoarea din DX:AX = DX * 8 + AX = 3 * 8 + 5 = 29
Operaţiile logice se execută pe fiecare bit în parte, după cum urmează:

Cerinţă

Ştiind în câte unităţi de timp se execută fiecare dintre cele 11 tipuri de instrucţiuni de mai sus şi o stare iniţială a regiştrilor, să se scrie un program, care duce la o stare dată a regiştrilor şi se execută în timp minim!

Date de intrare

Pe prima linie a fişierului de intrare miniasm.in se află patru numere separate prin câte un spaţiu, semnificând starea iniţială a regiştrilor. Pe a doua linie se află patru numere separate prin câte un spaţiu, semnificând starea finală a regiştrilor. Pe a treia linie se află 11 numere separate prin câte un spaţiu, semnificând numărul unităţilor de timp în care se execută fiecare tip de instrucţiune, respectând ordinea din enunţ.

Date de ieşire

Pe prima linie a fişierului de ieşire miniasm.out să se scrie numărul de instrucţiuni al programului şi numărul unităţilor de timp necesar pentru rularea acestuia, separate printr-un singur spaţiu. Pe următoarele linii să se scrie programul, cu câte o instrucţiune pe linie.

Restricţii

  • Fiecare număr de pe primele două linii ale fişierului de intrare va avea o valoare între 0 şi 7, inclusiv.
  • Cele patru valori date pe primele două linii vor semnifica regiştrii în ordinea: AX, BX, CX, DX.
  • Numerele de pe a treia linie a fişierului de intrare vor avea valori între 1 şi 100, inclusiv.
  • Fiecare instrucţiune scrisă în fişierul de ieşire va trebui să respecte exact formatul din enunţ, adică fără spaţii la început sau sfârşit, instrucţiunea scrisă cu litere mari, un singur spaţiu după instrucţiune, fără spaţii înainte sau după virgulă, numele regiştrilor scrise cu litere mari.
  • Se acordă punctaje parţiale, după cum urmează: numărul unităţilor de timp 50%, programul complet 50.

Exemple

miniasm.in miniasm.out
1 1 1 1
0 1 1 1
5 5 5 5 5 5 5 4 5 5 5
1 4
XOR AX,AX

drd. Pătcaş Csaba
Universitatea Babeş-Bolyai, Cluj-Napoca
patcas.csaba@gmail.com
propunător: Prof. Emanuela Cerchez
emanuela.cerchez@gmail.com
Articole recomandate
Probleme recomandate
De la .campion 2008: celule, premii, cai, scp, forum, vedete, film, finala, ab, nice, supertri, mod3, degrade, fractii, balanta, inginer, camp, ozn, hora, trei, rebus, sl, detinut, fbr, noroc, simetric, egal, manevre, connect3, gropi, nrcuv, ruleta, carti, pod, bonuri, tgv, fib, uscat, 2sir, atac, matrice2, zeratul, afise, an, dezbateri, test, platforma, lac, vopsea, harta, nrbun2, barfa, nrbun, bunici, opmat, acop, tren, cub, picnic, cursa, rv, compus, comun, magic, votare, onu, tramvai, bipal, nspecial, retea, secvop
De acelaşi autor: zeratul, 3d, datorii, virus, tango, pack
Despre graf: gropi, tgv, matrice2, picnic, mere, circuit, soldati, arce, conflicte, desen, robot, furtuna, net, cuvinte, excursie, cadere, pioni, reinvent, kreg, flood, croco, johnie, matrice, arthur, kimberley, ro, sol, caravane, bete, honest, police, pcod, zmeu, auto2, grazing, datorii, trafic, sponsori, monede1, apm, bile1, caini, masina1, bomboane, turn1, shgraf, paintball, program1, tgraf, kgb, algola, felinar, joc6, tric, homeless, promo, turism, casute, joc10, prieteni1, traseu, zapezi, litoral, lover, trip, garaj, ziduri, tv, pact, echipe1, vitale, spion, trasee, bcolor, scara2, lant, ab3, soc, team, gard, rsp, graf, mexc, dep, albinuta1, atac2, cabane, drumuri, tj, grade, jungla, lanterna, magic5, coment, urgenta, fazan, lanturi, cfr, site, traseu1, trmv, graphgame, minuni, telefon, ubergraf, carray, pestera, chei, arbgraf, war, fluviu, drumuri1, entries, ubuntzei, pack, fotbal1, pamant, dag, razboi, benzina2, wg, neconex, asfalt1, kubus2, module, progresii, dfs, prieteni3, megascoala, grafxy, dineu, vot1, biperm, drumuri2, nrgraf, cristal, cartite, copaci3, dragoni, nuclee
Despre drum minim: robot, furtuna, excursie, arthur, bete, zmeu, trafic, masina1, bomboane, traseu, litoral, lover, trip, scara2, team, gard, pitici1, base3, coach, lanturi, trmv, pestera, fluviu, ubuntzei, razboi, benzina2, kubus2, megascoala, dragoni
surse trimise | ajutor