Advertisement
iuliaa

Untitled

Nov 15th, 2020
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.79 KB | None | 0 0
  1. main INP R0, 2 //citim partea intrega a lui a
  2. INP R1, 2 //citim partea fractionara a lui a
  3. LDR R2, aaddr
  4. STR R0, [R2]
  5. ADD R2, #1
  6. STR R1, [R2]
  7. INP R0, 2 //citim partea intrega a lui b
  8. INP R1, 2 ////citim partea fractionara a lui b
  9. LDR R3, baddr
  10. STR R0, [R3]
  11. ADD R3, #1
  12. STR R1, [R3]
  13. //JMS scadere
  14. JMS citirec
  15.  
  16. JMS chder
  17. HLT
  18. aaddr DAT 300
  19. N DAT 4
  20. cder DAT 150
  21. caddr DAT 200
  22. baddr DAT 302
  23. baddr1 DAT 303
  24. j DAT 350
  25. scadere PSH {LR}
  26. LDR R7, aaddr //incarc in R& partea intrega a lui A
  27. LDR R4, [R7]
  28. OUT R4, 4
  29. ADD R7, #1 //INCREMENTAM ADRESA
  30. LDR R5, [R7] //PARTEA ZECIMALA A LUI A
  31. OUT R5,4
  32. SUB R6, R1, R5
  33. OUT R6, 4
  34. CMP R6, #0
  35. BLT imprumut
  36. BRA store
  37. imprumut ADD R1, #10 //ADAUGAM UN 10 PENTRU IMPRUMUT
  38. SUB R0, #1 //SCADEM IMPRUMUTUL
  39. SUB R6, R1, R5
  40. store ADD R7, #4
  41. STR R6, [R7]//305 - PARTEA FRACTIONARA INTREAGA
  42. SUB R6, R0, R4
  43. SUB R7, #1
  44. STR R6, [R7]//304 - PARTEA INTREAGA
  45. POP {PC}
  46. RET
  47. citirec PSH {LR}
  48. LDR R0, N //incarcam din memorie pe N
  49. LDR R7, caddr
  50. loop INP R1, 2 //citim partea intreaga a elem din c
  51. STR R1, [R7]
  52. ADD R7, #1
  53. INP R1, 2 //citim partea zecimala
  54. STR R1, [R7]
  55. ADD R7, #1
  56. SUB R0, #1
  57. CMP R0, #0
  58. BGT loop
  59. POP {PC}
  60. RET
  61.  
  62. chder PSH {LR}
  63. LDR R0, N
  64. SUB R0, #1
  65. MUL R0, #2
  66. LDR R7, cder
  67. ADD R7, #3 //cder[n-1]==0
  68. LDR R6, N
  69. MUL R6, #2
  70. SUB R6, #4
  71. ADD R6, caddr //de aici luam pentru cder[n-2]
  72. LDR R2, [R6] //aducem p intreaga
  73. ADD R6, #1
  74. LDR R3, [R6] //aducem p fractionara
  75. MUL R3, R0 //inmultim p fractionara cu 2*(n-1)
  76. MOV R5, R3
  77. MOD R5, #10
  78. STR R5, [R7] //store parte fr pentru cder(n-1)
  79. SUB R7, #1
  80. MOV R5, R3
  81. UDV R5, #10
  82. MUL R2, R0
  83. ADD R2, R5
  84. STR R2, [R7]
  85. LDR R0, N
  86. SUB R0, #3
  87. for1 MOV R1, R0
  88. ADD R1, #1 //j+1
  89. MUL R1, #2 //2*(j+1)
  90. LDR R3, [R6] //in R3 punem c(j+1) p fractionara
  91. MUL R3, R1 //inmultim p fr cu 2j+1
  92. MOV R5, R3 //mutam in R5 rezultatul
  93. MOD R5, #10 //facem restul impartirii
  94. MOV R4, R3 //mut rezultatul inmultirii in R4
  95. UDV R4, #10 //trebuie adunat la p intreaga
  96. SUB R6, #1 //zona de mem pt p intreaga
  97. MUL R3, R1
  98. ADD R3, R4 //inmultirea pentru partea intreaga
  99. MOV R2, R7
  100. SUB R2, #1
  101. LDR R4, [R2] //aducem in R4 ce e in R2
  102. ADD R5, R4 //adunam in R5 ce e in mem cu rezultatul de sus
  103. CMP R5, #10
  104. BGE maimare
  105. MOV R4, #0
  106. BRA nuemaimare
  107. maimare SUB R5, #10
  108. MOV R4, #1
  109. nuemaimare STR R5, [R2]
  110. SUB R2, #1 //locatia pt p intreaga
  111. LDR R5, [R2]
  112. ADD R5, R3
  113. ADD R5, R4
  114. STR R5, [R2]
  115. SUB R0, #1
  116. CMP R0, #0
  117. BGE for1
  118. POP {PC}
  119. RET
  120.  
  121.  
  122.  
  123.  
  124.  
  125. void chder(float a, float b, float c[], float cder[], int n)
  126. {
  127. int j;
  128. float con;
  129. cder[n-1]=0.0; n-1 and n-2 are special cases.
  130. cder[n-2]=2*(n-1)*c[n-1];
  131. for (j=n-3;j>=0;j--)
  132. cder[j]=cder[j+2]+2*(j+1)*c[j+1]; Equation (5.9.2).
  133. con=2.0/(b-a);
  134. for (j=0;j<n;j++) Normalize to the interval b-a.
  135. cder[j] *= con;
  136. }
  137.  
  138.  
  139.  
  140. //TREBUIE SA SALVAM FIECARE NR IN 2 LOCATII DE MEMORIE
  141. //LA INCEPUT, CAND CITIM A SI B TREBUIE SA VERIFICAM CATE ZECIMALE ARE FIECARE,
  142. SI SA LE ADUCEM LA ACELASI NR DE ZECIMALE (INMULTIM CU 10 PANA AJUNG LA ACELAS NR DE ZECIMALE)
  143. DACA B<A (PT CA TREBE SA FACEM B-A), INMULTIM CU 10 PARTEA FRACTIONARA A LUI B
  144. SI VOM SCADEA 1 DIN PARTEA INTREAGA A LUI B
  145. si vom suprascrie memoria doar cu un singur numar = B-A
  146. //C IL CITIM IN 2 LOCATII DE MEMORIE, DECI VOM MERGE PANA LA 2*N SI IL SALVAM IN MEMORIE
  147. cder[n-2]=2*(n-1)*c[n-1];
  148. LA LINIA ASTA ADUNAM REPETAT C[N-1], DE 2*(N-1) ORI SI VERIFICAM TOT TIMPUL NR DE ZECIMALE, IN CAZ CA AVEM „CARRY” SA IL PUNEM IN PARTEA INTREGA
  149. SI AVEM IN 2 REGISTRII ADRESELE DE MEMORIE, UNA PENTRU VECTORUL CDER, UNA PENTRU C[N], ADRESE PE CARE LE VOM DECREMENTA/INCREMENTA
  150. con=2.0/(b-a);
  151. EX. 2/2.3=0.86 -> AVEM 1 ZECIMALA => INMULTIM CU 10 -> 20/23 -> 20<23 => 200/23 =
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement