Skip to content

A series of simple computer science problems (encrypting a text by shifting the alphabet, calculating the ages of people whose birth dates are known, encrypting a text with the column transposition method, simulating a cache memory) solved in the Assembly language.

Notifications You must be signed in to change notification settings

florinpavelescu15/Assembly-Basic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pavelescu Florin, grupa 324CC

Am rezolvat cele 4 cerinte scriind mai intai algoritmii in C, pe care i-am "tradus" ulterior, linie cu linie, in Assembly. Pentru problemele 2, 3 si 4 am folosit stiva pentru a salva anumite variabile din cauza numarului redus de registre disponibile.

Observatie: In comentariile din cod, prin "salvez eax pe stiva" inteleg ca salvez continutul registrului eax pe stiva si prin "scot eax de pe stiva" inteleg ca pun in eax continutul din varful stivei.

Rotp

Am construit textul ciphertext cu ajutorul buclei build_ciphertext care itereaza prin plaintext si salveaza in ciphertext textul modificat cu ajutorul cheii, respectand formula din cerinta: ciphertext[i] = plaintext[i] ^ key[len-i-1].

Ages

Am construit vectorul all_ages parcurgand vectorul dates si folosind formula all_ages[i] = present->year - dates[i].year, exceptie facand cazurile in care ziua de nastere nu a fost inca; in acest caz, all_ages[i] = present->year - dates[i].year - 1. De asemenea, pentru all_ages[i] < 0, am pus all_ages[i] = 0, conform cerintei.

Columnar

Pentru a implementa modelul prezentat in cerinta, am gandit matricea descrisa ca pe un vector. Am parcurs vectorul key, si la fiecare iteratie, pentru a lua toate elementele de pe coloana key[i], am parcurs haystack si am luat elementele haystack[j] cu proprietatea j % len_cheie == key[i]. La final, am pus terminatorul '\0' la finalul vectorului obtinut, ciphertext.

Cache

Am urmat algoritmul de load descris in cerinta: am calculat tagul aferent adresei primite (am siftat la dreapta cu 3 pozitii adresa) si l-am cautat in vectorul tags. Daca l-am gasit, am retinut linia, am calculat offsetul corespunzator (si logic intre adresa si 7(10)=0...0111(2), pentru a obtine ultimii 3 biti ai adresei) si am pus in reg elementul cache[line][offset]. Daca nu am gasit tagul, am incarcat in cache 8 octeti consecutivi din memorie, practic intervalul [[tag]000, [tag]111], dupa care am pus elementul cautat (tocmai incarcat in cache) in registru, ca la cazul anterior.

Detalii mai amanuntite despre implementare se gasesc in comentariile din cod. Am adaugat comentarii pe fiecare linie de cod, acestea fiindu-mi foarte utile pe parcursul scrierii codului si al rezolvarii erorilor aparute (debugging).

About

A series of simple computer science problems (encrypting a text by shifting the alphabet, calculating the ages of people whose birth dates are known, encrypting a text with the column transposition method, simulating a cache memory) solved in the Assembly language.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published