Advertisement
Alhiris

wtf

Nov 28th, 2019
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. .data
  2. p: .space 4 #retinem valoarea p
  3. a: .space 400
  4. mesajn: .space 400
  5. alfabet:.asciiz "ABCDEFGHIJKLMNOPQRSTUVWXYZ *"
  6. newl: .asciiz "\n"
  7. fgen: .asciiz "Generatoul g este: "
  8. errPrime: .asciiz "P nu este un numar prim!"
  9. errGen: .asciiz "Eroare Generator(404)"
  10.  
  11. .text
  12. main:
  13. ######
  14. ##Rezolvare punctul a
  15. ######
  16.  
  17. #Citire p
  18. li $v0,5 #citire int
  19. syscall
  20. sw $v0,p #punem val citita in p
  21.  
  22. #Verificare p prim
  23. li $t0,2 #Punem in $t0 divizorul posibil al lui p
  24. mul $t1,$t0,$t0 #Folosim $t1 pentru conditie only, echivalentul cu i*i<=n (pentru eficienta)
  25. lw $t2,p #In $t2 il retinem pe p
  26.  
  27. Lprim:
  28. bgt $t1,$t2,findGen #Daca trece for-ul de divizibilitate, inseamna ca p e prim, deci cotinuam rezolvarea problemei
  29.  
  30. rem $t3,$t2,$t0 # $t3 = $t2 % $t0 (Restul impartirii la $t0, nu la $t1!!)
  31.  
  32. beq $t3,$0,notPrime # Daca $t3!=0 atunci p nu e prim, incheiem programul
  33.  
  34. addi $t0,$t0,1 # Adaugare 1 la indice
  35. mul $t1,$t0,$t0 # Facem update la "i*i"
  36. j Lprim
  37.  
  38. #Continuarea problemei
  39. findGen:
  40. lw $t1,p #Retinerea lui p in $t1
  41. li $t0,2 #In $t0 retinem numarul generatorului, incepem de la 2
  42. beq $t1,$t0,assignGenException #In cazul ca p=2, vom folosi generatorul 1
  43.  
  44. Lgen:
  45. bge $t0,$t1,errGenNotFound #Nu e posibil sa ajunga in cazul errGenNotFound, daca input-ul e corect
  46.  
  47. li $t9,0 #$t9 reprezinta pozitia in vector(din 4 in 4)
  48. li $t8,0 #$t8 reprezinta indicele vectorului
  49.  
  50. Lvectgen:
  51. bge $t8,$t1,genCorect
  52.  
  53. li $t7,1 #Valoarea lui g mod p
  54. li $t6,1 #Puterea la care e ridicat g-ul ($t7)
  55.  
  56. ridPut:
  57. bgt $t6,$t8,verificUnic
  58. mul $t7,$t7,$t0 # $t7 = ($t7 * g) % p
  59. rem $t7,$t7,$t1
  60.  
  61. addi $t6,$t6,1
  62.  
  63. j ridPut
  64.  
  65. verificUnic: #Verifica daca mai e un element egal in vector cu un for pana la ultimul element din vector
  66. #Incep de la pozitia 1 pentru ca g^0 va fi intotdeauna 1, si se poate demonstra ca
  67. #va mai exista un elem 1 doar in pozitia g^(p-1) cu ajutorul inversului modular, deoarece p e prim:
  68. # g^(p-2)=1(mod p)=> g^(p-1)%p=1 oricare ar fi g<p
  69. li $t5,4 #reprezinta pozitia pe memoria vect
  70. li $t4,1 #reprezinta indicele pe vect
  71.  
  72. loopVect:
  73. bge $t4,$t8,addInV
  74. lw $t3,a($t5)
  75. beq $t7,$t3,genGresit
  76. addi $t5,$t5,4
  77. addi $t4,$t4,1
  78. j loopVect
  79.  
  80. addInV:
  81.  
  82. sw $t7,a($t9) #adaugam in vector si marim indicele
  83. addi $t8,$t8,1
  84. addi $t9,$t9,4
  85. j Lvectgen
  86.  
  87. genGresit:
  88. addi $t0,$t0,1
  89. j Lgen
  90.  
  91. #Am gasit generatorul, se afla in $t0
  92. genCorect:
  93.  
  94. la $a0,fgen
  95. li $v0,4
  96. syscall
  97. move $a0,$t0
  98. li $v0,1
  99. syscall
  100. la $a0,newl
  101. li $v0,4
  102. syscall
  103.  
  104. ######
  105. ##Rezolvare punctul b
  106. ######
  107.  
  108. li $a1,400 #citire mesaj necriptat de lungime maxima 400
  109. la $a0,mesajn
  110. li $v0,8
  111. syscall
  112.  
  113. li $t0,0 #indicele, care va reprenta lungimea sirului, in t1 se afla p
  114.  
  115. #Incepem parcurgeream string-ului
  116. Lcript:
  117. lb $t2,mesajn($t0)
  118. beqz $t2,doneCript
  119. li $t9,0
  120. findInAlph:
  121. lb $t8,alfabet($t9)
  122. beq $t2,$t8,afisCript #$t9 retine pozitia din alfabet al caracterului
  123. addi $t9,1
  124. j findInAlph
  125.  
  126. afisCript:
  127. lw $t9,a($t9) #Pozitia din alfabet a literei criptate
  128. lb $a0,alfabet($t9)
  129. li $v0,11
  130. syscall
  131. addi $t0,1
  132. j Lcript
  133.  
  134. doneCript:
  135. li $v0,10
  136. syscall
  137.  
  138.  
  139. notPrime: #Eroare p nu e prim, afisam mesaj + exit
  140. la $a0,errPrime
  141. li $v0,4
  142. syscall
  143. j Exit
  144.  
  145. assignGenException:
  146. li $t0,1
  147. j Lgen
  148.  
  149. errGenNotFound:
  150. la $a0,errGen
  151. li $v0,4
  152. syscall
  153. j Exit
  154.  
  155. Exit:
  156. li $v0,10
  157. syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement