archijs90 Posted April 14, 2009 Report Share Posted April 14, 2009 kads ludzu nevaretu palidzet kkur dabut programas kodu kas rakstita asamblera(ar paskaidorjumiem) un tas blokshemu... Link to comment Share on other sites More sharing options...
Kavacky Posted April 15, 2009 Report Share Posted April 15, 2009 Blokshēmas ir vienādas pilnīgi visur. Uzdevums un risinājums priekš RISC16: "Atmiņā sākot no adreses D000 līdz atmiņas beigām atrodas datu masīvs. Uzrakstiet programmu, kura šajā apgabalā pozitīvos skaitļus atstās tādus kā tie ir, bet negatīvos skaitļus aizvietos ar nulli.": 0x0000: LUI R1, 0x3FF (0110011111111111) # uz R1 uzstādam sākuma adreses 1. daļu 0x0001: ADDI R1, R1, 0x03C (0010010010111100) # 2. daļu ( achtung - šite neuzstāda uz uzdevuma D000, bet gan FFFC, spēlēties var pēc vajadzības ) 0x0002: LUI R2, 0x200 (0110101000000000) // iekš R2 uzstādam bitmasku, pret ko čekot pozitīvs/nepozitīvs ( 1000 0000 0000 0000 ) 0x0003: LW R3, R1, 0x000 (1000110010000000) // ielasa čekojamo vārdu no R1 adreses iekš R3 0x0004: NAND R3, R3, R2 (0100110110000010) // salīdzina R3 ar masku no R2 0x0005: NAND R3, R3, R3 (0100110110000011) // apgriež riņķī R3 0x0006: BEQ R3, R0, 0x001 (1100110000000001) // ja R3 ir 0, tad vecākais bits bija 0, tad tas bija pozitīvs, lecam tālāk 0x0007: SW R0, R1, 0x000 (1010000010000000) // ja nekur neaizlecām, ierakstam skaitļa vietā 0 ( adrese glabājas R1 joprojām ) 0x0008: ADDI R1, R1, 0x001 (0010010010000001) // palielinam adreses skaitītāju par 1 0x0009: BEQ R1, R0, 0x001 (1100010000000001) // ja adrese ir 0 ( nākamā pēc FFFF ), lecam pāri nākošajai instrukcijai 0x000A: BEQ R0, R0, 0x078 (1100000001111000) // nekur neaizlecām? lecam atpakaļ uz cikla sākumu ( uz 0x0003 adresi, 8. lauciņus atpakaļ ) 0x000B: JALR R0, R0 (1110000001111111) // aizlecām? HALT! Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now