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.
- 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:
Se va obtine:127F5678h, 0ABCDABCDh, ...
006800F7h, 0FF56FF9Ah
- 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:
Se va obtine:1432h, 8675h, 0ADBCh, ...
01020304h, 05060708h, 0A0B0C0Dh, ...
- 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:
se va obtine:0702090Ah, 0B0C0304h, 05060108h
care se va ordona crescator:72h, 9Ah, 0BCh, 34h, 56h, 18h
9Ah, 0BCh, 18h, 34h, 56h, 72h
- 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:
in binary:s: 5, 25, 55, 127
101, 11001,10111,1111111
d: 2, 3, 5, 7
- 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
- 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:
in binary:s: -22, 145, -48, 127
1111111111101010, 10010001, 1111111111010000, 1111111
d: 3, 3, 5, 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:
Sa se obtina siruls DD 12345678h, 1A2B3C4Dh, FE98DC76h
d DB 12h.
- 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:
Sa se obtina siruls DD 12345678h, 1A2C3C4Dh, 98FCDC76h
d DB 2Ch, FCh.
- 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:
Sa se obtina dublucuvants DD 12345678h, 1A2C3C4Dh, 98FCDD76h, 12783A2Bh
d DD FF3A3C56h.
- 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 - 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 - 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 - 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
- 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
- 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
- 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.
-
Se da un sir de dublucuvinte. Sa se ordoneze descrescator sirul cuvintelor inferioare ale acestor dublucuvinte. Cuvintele superioare raman neschimbate.
Exemplu:
dandu-se:
rezultatul va fisir DD 12345678h 1256ABCDh, 12AB4344h
1234ABCDh, 12565678h, 12AB4344h.
-
Se da un sir de dublucuvinte. Sa se ordoneze crescator sirul cuvintelor superioare ale acestor dublucuvinte. Cuvintele inferioare raman neschimbate.
Exemplu:
dandu-se:
rezultatul va fisir DD 12AB5678h, 1256ABCDh, 12344344h
12345678h, 1256ABCDh, 12AB4344h.
- Dandu-se doua siruri de octeti sa se calculeze toate pozitiile unde al doilea sir apare ca subsir in primul sir.
- 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.
-
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:
obtinem rezultatulsir DW 12345, 20778, 4596
1, 2, 3, 4, 5, 2, 0, 7, 7, 8, 4, 5, 9, 6.
- 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.
-
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
se va obtine sirulsir DB 2, 4, 2, 5, 2, 2, 4, 4
rez DW 0402h, 0304h, 0105h.
- 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.
- 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:
Sa se obtina siruls DB 01011100b, 10001001b, 11100101b
d DB 10100111b, 10010001b, 00111010b.
- 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:
Sa se obtina siruls DD 12345678h, 1A2B3C4Dh, FE98DC76h
d DB 3Ch, DCh.
- Dandu-se un sir de cuvinte, sa se calculeze cel mai lung subsir de cuvinte ordonate crescator din acest sir.
- Dandu-se un sir de octeti si un subsir al sau, sa se elimine din primul sir toate aparitiile subsirului.
- 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.
- 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.