Laborator 6 - Probleme propuse

Operatii pe siruri de bytes/words/doublewords/quadwords

Exerciții

Problemele din acest laborator trebuie rezolvate folosind instructiuni specifice lucrului cu siruri: LODSB, STOSB, MOVSB, SCASB, CMPSB, LODSW, STOSW, MOVSW, SCASW, CMPSW, LODSD, STOSD, MOVSD, SCASD, CMPSD.
  1.  Se da un sir de dublucuvinte continand date impachetate (4 octeti scrisi ca un singur dublucuvant). Sa se obtina un nou sir de dublucuvinte, in care fiecare dublucuvant se va obtine dupa regula: suma octetilor de ordin impar va forma cuvantul de ordin impar, iar suma octetilor de ordin par va forma cuvantul de ordin par. Octetii se considera numere cu semn, astfel ca extensiile pe cuvant se vor realiza corespunzator aritmeticii cu semn.

    Exemplu:

    pentru sirul initial:
    127F5678h, 0ABCDABCDh, ... 
    Se va obtine:
    006800F7h,  0FF56FF9Ah 
  2. Se da un sir de cuvinte. Sa se obtina din acesta un sir de dublucuvinte, in care fiecare dublucuvant va contine nibble-urile despachetate pe octet (fiecare cifra hexa va fi precedata de un 0), aranjate crescator in interiorul dublucuvantului.

    Exemplu:

    pentru sirul initial:
    1432h, 8675h, 0ADBCh, ...
    Se va obtine:
    01020304h,  05060708h, 0A0B0C0Dh, ... 
  3. Se da un sir de 3 dublucuvinte, fiecare dublucuvant continand 2 valori pe cuvant (despachetate, deci fiecare cifra hexa e precedata de un 0). Sa se creeze un sir de octeti care sa contina acele valori (impachetate deci pe un singur octet), ordonate crescator in memorie, acestea fiind considerate numere cu semn.

    Exemplu:

    pentru sirul initial:
    0702090Ah, 0B0C0304h, 05060108h
    se va obtine:
    72h, 9Ah, 0BCh,  34h, 56h, 18h
    care se va ordona crescator:
    9Ah, 0BCh, 18h, 34h, 56h, 72h
  4. Se da un sir de octeti s. Sa se construiasca sirul de octeti d, care contine pe fiecare pozitie numarul de biti 1 ai octetului de pe pozitia corespunzatoare din s.

    Exemplu:

    s: 5, 25, 55, 127
    in binary:
    101, 11001,10111,1111111
    d: 2, 3, 5, 7
  5. Se dau doua siruri de octeti s1 si s2. Sa se construiasca sirul de octeti d, care contine pentru fiecare octet din s2 pozitia sa in s1, sau 0 in caz contrar.

    Exemplu:

    pos: 1, 2, 3, 4, 5 
    s1: 7, 33, 55, 19, 46
    s2: 33, 21, 7, 13, 27, 19, 55, 1, 46 
    d: 2,  0, 1, 0, 0, 4, 3, 0, 5
  6. Se da un sir de cuvinte s. Sa se construiasca sirul de octeti d, astfel incat d sa contina pentru fiecare pozitie din s:
    - numarul de biti de 0, daca numarul este negativ
    - numarul de biti de 1, daca numarul este pozitiv

    Exemplu:

    s: -22, 145, -48, 127
    in binary:
    1111111111101010, 10010001, 1111111111010000, 1111111
    d: 3, 3, 5, 7
  7. Se da un sir de dublucuvinte. Sa se obtina sirul format din octetii superiori ai
    cuvitelor superioare din elementele sirului de dublucuvinte care sunt divizibili cu 3.

    Exemplu:

    Se da sirul de dublucuvinte:
    s DD 12345678h, 1A2B3C4Dh, FE98DC76h
    Sa se obtina sirul
    d DB 12h.
  8. Se da un sir de dublucuvinte. Sa se obtina sirul format din octetii inferiori ai
    cuvintelor superioare din elementele sirului de dublucuvinte care sunt palindrom in scrierea in baza 10.

    Exemplu:

    Se da sirul de dublucuvinte:
    s DD 12345678h, 1A2C3C4Dh, 98FCDC76h
    Sa se obtina sirul
    d DB 2Ch, FCh.
  9. Se da un sir de dublucuvinte. Sa se obtina, incepand cu partea inferioara a dublucuvantului, dublucuvantul format din octetii
    superiori pari ai cuvintelor inferioare din elementele sirului de dublucuvinte. Daca nu sunt indeajuns octeti
    se va completa cu octetul FFh.

    Exemplu:

    Se da sirul de dublucuvinte:
    s DD 12345678h, 1A2C3C4Dh, 98FCDD76h, 12783A2Bh
    Sa se obtina dublucuvant
    d DD FF3A3C56h.
  10. Se da un sir A de cuvinte. Construiti doua siruri de octeti  
     - B1: contine ca elemente partea superioara a cuvintelor din A
     - B2: contine ca elemente partea inferioara a cuvintelor din A
  11. Se da un sir A de dublucuvinte. Construiti doua siruri de octeti  
     - B1: contine ca elemente partea superioara a cuvintelor superioare din A
     - B2: contine ca elemente partea inferioara a cuvintelor inferioare din A
  12. Se da un sir A de dublucuvinte. Cunstruiti doua siruri de octeti  
     - B1: contine ca elemente partea inferioara a cuvintelor inferioara din A
     - B2: contine ca elemente partea superioara a cuvintelor superioare din A
  13. Se da un sir S de dublucuvinte.
    Sa se obtina sirul D format din octetii inferiori ai cuvintelor inferioare din elementele sirului de dublucuvinte, care sunt multiplii de 7.

    Exemplu:

    s DD 12345607h, 1A2B3C15h, 13A33412h
    d DB 07h, 15h
  14. Se da un sir S de dublucuvinte.
    Sa se obtina sirul D format din octetii dublucuvintelor din sirul D sortati in ordine crescatoare in interpretarea fara semn.

    Exemplu:

    s DD 12345607h, 1A2B3C15h
    d DB 07h, 12h, 15h, 1Ah, 2Bh, 34h, 3Ch, 56h
  15. Se da un sir S de dublucuvinte.
    Sa se obtina sirul D format din octetii dublucuvintelor din sirul D sortati in ordine descrescatoare in interpretarea fara semn.

    Exemplu:

    s DD 12345607h, 1A2B3C15h
    d DB 56h, 3Ch, 34h, 2Bh, 1Ah, 15h, 12h, 07h
  16. Se dau doua siruri de caractere ordonate alfabetic s1 si s2. Sa se construiasca prin interclasare sirul ordonat s3 care sa contina toate elementele din s1 si s2.
  17. Se da un sir de dublucuvinte. Sa se ordoneze descrescator sirul cuvintelor inferioare ale acestor dublucuvinte. Cuvintele superioare raman neschimbate.

    Exemplu:

    dandu-se:
    sir DD 12345678h 1256ABCDh, 12AB4344h
    rezultatul va fi
    1234ABCDh, 12565678h, 12AB4344h.
  18. Se da un sir de dublucuvinte. Sa se ordoneze crescator sirul cuvintelor superioare ale acestor dublucuvinte. Cuvintele inferioare raman neschimbate.

    Exemplu:

    dandu-se:
    sir DD 12AB5678h, 1256ABCDh, 12344344h 
    rezultatul va fi
    12345678h, 1256ABCDh, 12AB4344h.
  19. Dandu-se doua siruri de octeti sa se calculeze toate pozitiile unde al doilea sir apare ca subsir in primul sir.
  20. Se da un sir de octeti reprezentand un text (succesiune de cuvinte separate de spatii). Sa se identifice cuvintele de tip palindrom (ale caror oglindiri sunt similare cu cele de plecare): "cojoc", "capac" etc.
  21. Dandu-se un sir de cuvinte sa se obtina sirul (de octeti) cifrelor in baza zece ale fiecarui cuvant din acest sir.

    Exemplu:

    daca avem sirul:
    sir DW 12345, 20778, 4596 
    obtinem rezultatul
    1, 2, 3, 4, 5, 2, 0, 7, 7, 8, 4, 5, 9, 6.
  22. Se da un sir de octeti 'input' si inca doua siruri de dimensiune N fiecare, 'src' si 'dst'. Sa se obtina un nou sir 'output' din sirul 'input' in care se vor inlocui toti octetii cu valoarea src[i] cu dst[i], unde i=1..N.
  23. Dandu-se un sir de octeti sa se obtina un sir de cuvinte care sa contina in octetii inferiori multimea caracterelor din sirul de octeti, iar octetul superior al unui cuvant sa contina numarul de aparitii al octetului inferior din acel cuvant in sirul de octeti dat.

    Exemplu:

    se da sirul
    sir DB 2, 4, 2, 5, 2, 2, 4, 4 
    se va obtine sirul
    rez DW 0402h, 0304h, 0105h.
  24. Dandu-se un sir de dublucuvinte, sa se obtina un alt sir de dublucuvinte in care se vor pastra doar dublucuvintele din primul sir care au un numar par de biti cu valoare 1.
  25. Se da un sir de octeti. Sa se obtina sirul oglindit al reprezentarii binare a acestui sir de octesi.

    Exemplu:

    Se da sirul de octeti:
    s DB 01011100b, 10001001b, 11100101b 
    Sa se obtina sirul
    d DB 10100111b, 10010001b, 00111010b.
  26. Se da un sir de dublucuvinte. Sa se obtina sirul format din octetii superiori ai cuvintelor inferioare din elementele sirului de dublucuvinte, care sunt multiplii de 10.

    Exemplu:

    Se da sirul de dublucuvinte:
    s DD 12345678h, 1A2B3C4Dh, FE98DC76h 
    Sa se obtina sirul
    d DB 3Ch, DCh.
  27. Dandu-se un sir de cuvinte, sa se calculeze cel mai lung subsir de cuvinte ordonate crescator din acest sir.
  28. Dandu-se un sir de octeti si un subsir al sau, sa se elimine din primul sir toate aparitiile subsirului.
  29. Se dau doua siruri de octeti. Sa se parcurga cel mai scurt sir dintre cele doua siruri si sa se construiasca un al treilea sir care va contine cel mai mare element de acelasi rang din cele doua siruri, iar pana la lungimea celui mai lung sir, sirul al treilea se va completa alternativ cu valoarea 1 respectiv 0.
  30. Se da un sir de cuvinte. Sa se construiasca doua siruri de octeti, s1 si s2, astfel: pentru fiecare cuvant,
    • daca numarul de biti 1 din octetul high al cuvantului este mai mare decat numarul de biti 1 din octetul low, atunci s1 va contine octetul high, iar s2 octetul low al cuvantului
    • daca numarul de biti 1 din cei doi octeti ai cuvantului sunt egali, atunci s1 va contine numarul de biti 1 din octet, iar s2 valoarea 0
    • altfel, s1 va contine octetul low, iar s2 octetul high al cuvantului.