Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- main INP R0, 2 //citim partea intrega a lui a
- INP R1, 2 //citim partea fractionara a lui a
- LDR R2, aaddr
- STR R0, [R2]
- ADD R2, #1
- STR R1, [R2]
- INP R0, 2 //citim partea intrega a lui b
- INP R1, 2 ////citim partea fractionara a lui b
- LDR R3, baddr
- STR R0, [R3]
- ADD R3, #1
- STR R1, [R3]
- //JMS scadere
- JMS citirec
- JMS chder
- HLT
- aaddr DAT 300
- N DAT 4
- cder DAT 150
- caddr DAT 200
- baddr DAT 302
- baddr1 DAT 303
- j DAT 350
- scadere PSH {LR}
- LDR R7, aaddr //incarc in R& partea intrega a lui A
- LDR R4, [R7]
- OUT R4, 4
- ADD R7, #1 //INCREMENTAM ADRESA
- LDR R5, [R7] //PARTEA ZECIMALA A LUI A
- OUT R5,4
- SUB R6, R1, R5
- OUT R6, 4
- CMP R6, #0
- BLT imprumut
- BRA store
- imprumut ADD R1, #10 //ADAUGAM UN 10 PENTRU IMPRUMUT
- SUB R0, #1 //SCADEM IMPRUMUTUL
- SUB R6, R1, R5
- store ADD R7, #4
- STR R6, [R7]//305 - PARTEA FRACTIONARA INTREAGA
- SUB R6, R0, R4
- SUB R7, #1
- STR R6, [R7]//304 - PARTEA INTREAGA
- POP {PC}
- RET
- citirec PSH {LR}
- LDR R0, N //incarcam din memorie pe N
- LDR R7, caddr
- loop INP R1, 2 //citim partea intreaga a elem din c
- STR R1, [R7]
- ADD R7, #1
- INP R1, 2 //citim partea zecimala
- STR R1, [R7]
- ADD R7, #1
- SUB R0, #1
- CMP R0, #0
- BGT loop
- POP {PC}
- RET
- chder PSH {LR}
- LDR R0, N
- SUB R0, #1
- MUL R0, #2
- LDR R7, cder
- ADD R7, #3 //cder[n-1]==0
- LDR R6, N
- MUL R6, #2
- SUB R6, #4
- ADD R6, caddr //de aici luam pentru cder[n-2]
- LDR R2, [R6] //aducem p intreaga
- ADD R6, #1
- LDR R3, [R6] //aducem p fractionara
- MUL R3, R0 //inmultim p fractionara cu 2*(n-1)
- MOV R5, R3
- MOD R5, #10
- STR R5, [R7] //store parte fr pentru cder(n-1)
- SUB R7, #1
- MOV R5, R3
- UDV R5, #10
- MUL R2, R0
- ADD R2, R5
- STR R2, [R7]
- LDR R0, N
- SUB R0, #3
- for1
- SUB R0, #1
- CMP R0, #0
- BGE for1
- POP {PC}
- RET
- //TREBUIE SA SALVAM FIECARE NR IN 2 LOCATII DE MEMORIE
- //LA INCEPUT, CAND CITIM A SI B TREBUIE SA VERIFICAM CATE ZECIMALE ARE FIECARE,
- SI SA LE ADUCEM LA ACELASI NR DE ZECIMALE (INMULTIM CU 10 PANA AJUNG LA ACELAS NR DE ZECIMALE)
- DACA B<A (PT CA TREBE SA FACEM B-A), INMULTIM CU 10 PARTEA FRACTIONARA A LUI B
- SI VOM SCADEA 1 DIN PARTEA INTREAGA A LUI B
- si vom suprascrie memoria doar cu un singur numar = B-A
- //C IL CITIM IN 2 LOCATII DE MEMORIE, DECI VOM MERGE PANA LA 2*N SI IL SALVAM IN MEMORIE
- cder[n-2]=2*(n-1)*c[n-1];
- 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
- SI AVEM IN 2 REGISTRII ADRESELE DE MEMORIE, UNA PENTRU VECTORUL CDER, UNA PENTRU C[N], ADRESE PE CARE LE VOM DECREMENTA/INCREMENTA
- con=2.0/(b-a);
- EX. 2/2.3=0.86 -> AVEM 1 ZECIMALA => INMULTIM CU 10 -> 20/23 -> 20<23 => 200/23 =
- void chder(float a, float b, float c[], float cder[], int n)
- {
- int j;
- float con;
- cder[n-1]=0.0; n-1 and n-2 are special cases.
- cder[n-2]=2*(n-1)*c[n-1];
- for (j=n-3;j>=0;j--)
- cder[j]=cder[j+2]+2*(j+1)*c[j+1]; Equation (5.9.2).
- con=2.0/(b-a);
- for (j=0;j<n;j++) Normalize to the interval b-a.
- cder[j] *= con;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement