Advertisement
Guest User

URS

a guest
Nov 30th, 2017
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 9.42 KB | None | 0 0
  1. ----------------------------------------------------------------------------------------------
  2. 1.
  3. ----------------------------------------------------------------------------------------------
  4.  
  5. .global _start
  6.  
  7. .text
  8.  
  9. _start:
  10.     adr r0, pod         /* adresa podatka */
  11.     mov r1, #0xF0000000     /* r1 = 0xF0000000 (kriterij zaustavljanja) */
  12.    
  13. petlja:
  14.     ldr r2, [r0], #4        /* ucitaj podatak za obradu u r2 */
  15.     cmp r2, r1          /* provjeri kriterij zaustavljanja */
  16.     beq kraj            /* zavrsi ako je kriterij zadovljen */
  17.     cmp r2, #0          /* provjeri je li podatak negativan */
  18.     blt petlja          /* prijedji na sljedci ako je negativan */
  19.    
  20.     /* rotacija skupina od 4 bita */
  21.     and r4, r2, #0xF0       /* stavi gornja 4 bita zadnjeg bajta u r4 */
  22.     mov r4, r4, LSR #4      /* pomakni 4 bita u desno */
  23.     and r5, r2, #0x0F       /* stavi donja 4 bita zadnjeg bajta u r5 */
  24.     mov r5, r5, LSL #4      /* pomakni 4 bita u lijevo */
  25.    
  26.     /* rekonstrukcija podatka sa zarotiranim skupinama bitova */
  27.     and r2, r2, #0xFFFFFF00 /* ocisti zadnji bajt podatka */
  28.     orr r2, r2, r4      /* stavi zadnja 4 bita iz r4 u podatak */
  29.     orr r2, r2, r5      /* stavi predzadnja 4 bita iz r5 u podatak*/
  30.    
  31.     b petlja
  32.  
  33. kraj:
  34.     b kraj
  35.    
  36. pod:
  37. .word   0x5a22115a, 0x11223345, -5, 0xF0000000
  38.  
  39. .end
  40.  
  41. ----------------------------------------------------------------------------------------------
  42. 2.
  43. ----------------------------------------------------------------------------------------------
  44.  
  45. .equ len, 0x0100
  46. .global _start
  47.  
  48. .text
  49.  
  50. _start:
  51.     adr r0, pod     /* adresa podatka */
  52.     add r1, r0, #len    /* adresa zadnjeg podatka */
  53.    
  54.     mov r2, #1000       /* pocetni podatak za unos u memoriju */
  55.    
  56. punjenje_pod:
  57.     add r2, r2, #-50    /* stvori neki novi podatak */
  58.     str r2, [r0], #4    /* spremi podatak iz r2 u memoriju */
  59.     cmp r0, r1      /* provjeri je li se doslo do adrese zadnjeg podatka */
  60.     ble punjenje_pod    /* ako nije, nastavi puniti memoriju podacima */
  61.    
  62.     adr r0, pod     /* adresa podatka */
  63.    
  64.     /* pocetak zbrajanja */
  65.    
  66.     ldr r2, [r0], #4    /* ucitaj donja 32 bita prvog podatka iz memorije u r2 */
  67.     mov r3, #0      /* postavi gornja 32 bita prvog podatka na nulu */
  68.    
  69.     cmp r2, #0      /* provjeri je li podatak negativan */
  70.     bge zbrajanje       /* ako nije, nastavi zbrajati */
  71.     mvn r3, r3      /* ako jest, invertiraj gornja 32 bita u jedinice */
  72.    
  73. zbrajanje:
  74.  
  75.     ldr r4, [r0], #4    /* ucitaj donja 32 bita sljedeceg podatka u r4 */
  76.     mov r5, #0      /* postavi gornja 32 bita na 0 */
  77.    
  78.     cmp r4, #0      /* provjeri je li podatak negativan */
  79.     bge nastavi_zbroj   /* ako nije, nastavi zbrajati */
  80.     mvn r5, r5      /* ako jest, invertiraj gornja 32 bita u jedinice */
  81.    
  82. nastavi_zbroj:
  83.     adds r2, r2, r4 /* pribroji donja 32 bita trenutnog broja u r2 */
  84.     adc r3, r3, r5      /* pribroji gornje bitove u r3, uzmi u obzir carry bit */
  85.    
  86.     cmp r0, r1      /* provjeri kriterij zaustavljanja */
  87.     ble zbrajanje       /* ako nije, nastavi zbrajati */
  88.  
  89. kraj:
  90.     b kraj
  91.    
  92. pod:
  93.  
  94. .end
  95.  
  96. ----------------------------------------------------------------------------------------------
  97. 3.
  98. ----------------------------------------------------------------------------------------------
  99.  
  100. .global _start
  101.  
  102. .text
  103.  
  104. _start:
  105.     adr r0, pod         /* adresa podatka */
  106.     mov r1, #0xFFFFFFFF     /* podatak koji oznacava kraj */
  107.    
  108.     mov r2, #0          /* inicijalizacija sume na 0 */
  109.    
  110. petlja:
  111.     ldrsh r3, [r0], #2      /* ucitaj signed half word podatak u r3 */
  112.     cmp r3, r1          /* provjeri je li se doslo do kraja */
  113.     beq kraj            /* ako jest, izadji iz petlje */
  114.    
  115.     add r2, r2, r3      /* pribroji podatak iz r3 u r2 */
  116.  
  117.     b petlja            /* nastavi obradu */
  118.    
  119. kraj:
  120.     b kraj
  121.    
  122. pod:
  123. .hword -10, -32000, -29000, 25000, -3, 0xFFFF
  124.  
  125. .end
  126.  
  127. ----------------------------------------------------------------------------------------------
  128. 4.
  129. ----------------------------------------------------------------------------------------------
  130.  
  131. .equ x, 4           /* Prvi broj */
  132. .equ y, 5           /* Drugi broj */
  133. .equ stack_top, 0x1000  /* Vrh stoga na adresi 0x1000 */
  134.  
  135. .global _start
  136.  
  137. .text
  138.  
  139. _start:
  140.     mov sp, #stack_top  /* Spremi vrh stoga u SP */
  141.     mov r0, #x      /* Prvi broj u r0 */
  142.     mov r1, #y      /* Drugi broj u r1 */
  143.    
  144.     add sp, sp, #-4 /* Rezerviraj mjesto za povratnu vrijednost */
  145.     str r0, [sp], #-4   /* Prvi parametar (x) na stog */
  146.     str r1, [sp], #-4   /* Drugi parametar (y) na stog */
  147.    
  148.     bl mnozenje     /* Pozovi potprogram */
  149.     ldr r5, [sp, #4]!   /* Ucitaj povratnu vrijednost u r5 */
  150.  
  151. kraj:
  152.     b kraj
  153.    
  154. mnozenje:
  155.     ldr r3, [sp, #4]!   /* Dohvat drugog (y) parametra sa stoga */
  156.     ldr r4, [sp, #4]!   /* Dohvat prvog (x) parametra na stoga */
  157.     mul r5, r3, r4  /* Pomnozi i stavi rezultat u r5 */
  158.    
  159.     str r5, [sp, #4]    /* Stavi rezltat na stog */
  160.     mov pc, lr      /* Vrati se u glavni program */
  161.    
  162. .end
  163.  
  164. ----------------------------------------------------------------------------------------------
  165. 5.
  166. ----------------------------------------------------------------------------------------------
  167.  
  168. .equ blok, 0x1000       /* Adresa bloka je 0x1000 */
  169.  
  170. .global _start
  171.  
  172. .text
  173.  
  174. _start:
  175.     adr r0, pod     /* Adresa podataka */
  176.     mov r1, #blok       /* Stavi adresu bloka u r1 */
  177.    
  178. punjenje:
  179.     /* Prebacivanje podataka u blok */
  180.     ldr r2, [r0], #4    /* Uzmi podatak u r2 */
  181.     str r2, [r1], #4    /* Spremi podatak iz r2 u blok */
  182.     cmp r2, #0      /* Provjeri jesi li dosao do kraja */
  183.     bne punjenje        /* Ako nisi, nastavi puniti blok */
  184.    
  185.     mov r0, #blok       /* Stavi adresu pocetka bloka u r0 */
  186.     mov r1, r0      /* Stavi je i u r1 kao pomocni registar */
  187.  
  188. petlja:
  189.     ldr r2, [r0], #4    /* Uzmi broj iz bloka */
  190.     cmp r2, #0      /* Provjeri je li broj jednak nuli */
  191.     beq kraj        /* Ako jest, zavrsi */
  192.     bgt petlja      /* Ako je veci od 0, preskoci ga */
  193.    
  194.     /* Zamjena brojeva */
  195.     ldr r3, [r1]        /* Spremi broj s pocetka u r3 */
  196.     str r2, [r1], #4    /* Na njegovo mjesto stavi negativni broj */
  197.     str r3, [r0, #-4]   /* Stavi broj s pocetka na mjesto negativnog broja */
  198.  
  199.     b petlja        /* Idi na sljedeci broj */
  200.    
  201. kraj:
  202.     b kraj
  203.    
  204. pod:
  205.  
  206. .word -5, 4, 2, -1, -10, 8, 13, 0x00000000
  207.  
  208. .end
  209.  
  210. ----------------------------------------------------------------------------------------------
  211. 6.
  212. ----------------------------------------------------------------------------------------------
  213.  
  214. .global _start
  215.  
  216. .text
  217.  
  218. _start:
  219.     adr r0, pod     /* Adresa podataka */
  220.     mov r1, #0      /* Inicijalizacija brojaca elemenata */
  221.     mov r2, #0      /* Inicijalizacija sume elemenata */
  222.    
  223. zbrajanje:
  224.     ldr r3, [r0], #4    /* Dohvati broj iz memorije */
  225.     cmp r3, #0      /* Provjeri je li broj nula */
  226.     beq dijeljenje  /* Ako jest, zavrsi zbrajanje */
  227.    
  228.     add r2, r2, r3  /* Dodaj broj u sumu */
  229.     add r1, r1, #1  /* Inkrementiraj brojac */
  230.    
  231.     b zbrajanje
  232.    
  233.     mov r3, #0      /* Inicijaliziraj rezultat dijeljenja */
  234.     cmp r1, #0      /* Provjeri dijeli li se s 0 */
  235.     beq kraj        /* Ako dijeli, zavrsi i ostavi rezultat 0 */
  236.    
  237. /* Dijeljenje oduzimanjem */
  238. dijeljenje:
  239.     cmp r2, #0      /* Provjeri je li dijeljenje zavrseno */
  240.     ble kraj        /* Ako jest, prestani dijeliti */
  241.    
  242.     sub r2, r2, r1  /* Umanji sumu za ukupan broj elemenata */
  243.     add r3, r3, #1  /* Inkrementiraj rezultat */
  244.    
  245.     b dijeljenje
  246.    
  247. kraj:
  248.     b kraj
  249.    
  250. pod:
  251.  
  252. .word 8, 3, 4, 0x00000000
  253.  
  254. .end
  255.  
  256. ----------------------------------------------------------------------------------------------
  257. 7.
  258. ----------------------------------------------------------------------------------------------
  259.  
  260. .global _start
  261.  
  262. .text
  263.  
  264. _start:
  265.     adr r0, pod     /* Adresa podataka */
  266.    
  267. petlja:
  268.     ldrb r1, [r0], #1   /* Ucitaj bajt (char) */
  269.     cmp r1, #0      /* Provjeri jesi li dosao do terminatora */
  270.     beq kraj        /* Ako jesi, zavrsi obradu */
  271.    
  272.     cmp r1, #'A'        /* Provjeri je li slovo manje od velikog slova A */
  273.     blt petlja      /* Ako jest, prijedji na sljedece */
  274.     cmp r1, #'Z'        /* Provjeri je li slovo vece od velikog slova Z */
  275.     bgt petlja      /* Ako jest, prijedji na sljedece */
  276.    
  277.     add r1, r1, #32 /* Pretvori veliko slovo u malo */
  278.     strb r1, [r0, #-1]  /* Spremi malo slovo u memoriju na mjesto velikog */
  279.    
  280.     b petlja   
  281.    
  282. kraj:
  283.     b kraj
  284.    
  285. pod:
  286.  
  287. .byte 'E', 'r', 'i', 'C', 's', 'S', 'O', 'n', 0x00000000
  288.  
  289. .end
  290.  
  291. ----------------------------------------------------------------------------------------------
  292. 8.
  293. ----------------------------------------------------------------------------------------------
  294.  
  295. .global _start
  296.  
  297. .text
  298.  
  299. _start:
  300.     adr r0, pod     /* Adresa podataka */
  301.     mov r1, #0      /* Inicijalizacija brojača */
  302.     mov r2, #0x00000001 /* Maska za ekstrakciju zadnjeg bita */
  303.        
  304. petlja:
  305.     ldr r3, [r0], #4    /* Ucitaj podatak u r3 */
  306.     cmp r3, #0      /* Provjeri jesi li dosao do kraja */
  307.     beq kraj        /* Ako jesi, zavrsi obradu */
  308.    
  309.     and r3, r3, r2  /* Pomocu maske ukloni sve bitove osim zadnjeg */
  310.     cmp r3, #0      /* Provjeri je li zadnji bit 0 */
  311.     beq petlja      /* Ako jest, broj je paran, pa prijedji na sljedeci */
  312.    
  313.     add r1, r1, #1  /* Ako je broj neparan, inkrementiraj brojac */
  314.        
  315.     b petlja   
  316.    
  317. kraj:
  318.     b kraj
  319.    
  320. pod:
  321.  
  322. .word 5, 8, 4, 11, 10, 3, 2, 2, 65, 42, 40, 8, 33, 0
  323.  
  324. .end
  325.  
  326. ----------------------------------------------------------------------------------------------
  327. 9.
  328. ----------------------------------------------------------------------------------------------
  329.  
  330. .equ x, 20
  331. .equ y, 35
  332. .equ blok, 0x1000
  333.  
  334. .global _start
  335.  
  336. .text
  337.  
  338. _start:
  339.     mov r0, #blok       /* Ucitaj adresu bloka */
  340.     mov r1, #x      /* x u r1 */
  341.     mov r2, #y      /* y u r2 */
  342.    
  343.     str r1, [r0], #4    /* Spremi x u memoriju */
  344.     str r2, [r0], #4    /* Spremi y u memoriju */
  345.    
  346.     cmp r1, r2      /* Provjeri je li x manji od y */
  347.     blt manji       /* Ako jest oduzmi x - y */
  348.     sub r1, r1, r2  /* Ako nije oduzmi y - x */
  349.     b spremi
  350.    
  351. manji:
  352.     sub r1, r2, r1
  353.  
  354. spremi:
  355.     str r1, [r0], #4    /* Spremi rezultat u memoriju */
  356.  
  357. kraj:
  358.     b kraj
  359.    
  360. .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement