Advertisement
iuliaa

Untitled

Nov 15th, 2020
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 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 160
  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. //inmultirea
  91. LDR R3, [R6] //in R3 punem c(j+1) p fractionara
  92. MUL R3, R1 //inmultim p fr cu 2j+1
  93. MOV R5, R3 //mutam in R5 rezultatul
  94. MOD R5, #10 //facem restul impartirii
  95. MOV R4, R3 //mut rezultatul inmultirii in R4
  96. UDV R4, #10 //trebuie adunat la p intreaga!
  97. //partea intreaga
  98. SUB R6, #1 //zona de mem pt p intreaga
  99. LDR R3, [R6]
  100. MUL R3, R1
  101. ADD R3, R4 //inmultirea pentru partea intreaga
  102. //adunarea
  103. MOV R2, R7
  104. SUB R2, #1 //aducem partea fractionara de la cder[j+2]
  105. LDR R4, [R2] //aducem in R4 ce e in R2
  106. ADD R5, R4 //adunam in R5 ce e in cder[j+2] cu rezultatul de sus
  107. CMP R5, #10
  108. BGE maimare
  109. MOV R4, #0
  110. BRA nuemaimare
  111. maimare SUB R5, #10
  112. MOV R4, #1
  113. nuemaimare ADD R2, #4
  114. STR R5, [R2]
  115. SUB R2, #5 //locatia pt p intreaga
  116. LDR R5, [R2]
  117. ADD R5, R3
  118. ADD R5, R4
  119. ADD R2, #4
  120. STR R5, [R2]
  121. SUB R0, #1
  122. ADD R7, #2
  123. SUB R6, #1
  124. CMP R0, #0
  125. BGE for1
  126. POP {PC}
  127. RET
  128.  
  129.  
  130.  
  131.  
  132.  
  133. void chder(float a, float b, float c[], float cder[], int n)
  134. {
  135. int j;
  136. float con;
  137. cder[n-1]=0.0; n-1 and n-2 are special cases.
  138. cder[n-2]=2*(n-1)*c[n-1];
  139. for (j=n-3;j>=0;j--)
  140. cder[j]=cder[j+2]+2*(j+1)*c[j+1]; Equation (5.9.2).
  141. con=2.0/(b-a);
  142. for (j=0;j<n;j++) Normalize to the interval b-a.
  143. cder[j] *= con;
  144. }
  145.  
  146.  
  147.  
  148. //TREBUIE SA SALVAM FIECARE NR IN 2 LOCATII DE MEMORIE
  149. //LA INCEPUT, CAND CITIM A SI B TREBUIE SA VERIFICAM CATE ZECIMALE ARE FIECARE,
  150. SI SA LE ADUCEM LA ACELASI NR DE ZECIMALE (INMULTIM CU 10 PANA AJUNG LA ACELAS NR DE ZECIMALE)
  151. DACA B<A (PT CA TREBE SA FACEM B-A), INMULTIM CU 10 PARTEA FRACTIONARA A LUI B
  152. SI VOM SCADEA 1 DIN PARTEA INTREAGA A LUI B
  153. si vom suprascrie memoria doar cu un singur numar = B-A
  154. //C IL CITIM IN 2 LOCATII DE MEMORIE, DECI VOM MERGE PANA LA 2*N SI IL SALVAM IN MEMORIE
  155. cder[n-2]=2*(n-1)*c[n-1];
  156. 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
  157. SI AVEM IN 2 REGISTRII ADRESELE DE MEMORIE, UNA PENTRU VECTORUL CDER, UNA PENTRU C[N], ADRESE PE CARE LE VOM DECREMENTA/INCREMENTA
  158. con=2.0/(b-a);
  159. 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