Advertisement
dusanrs

domacil_lprs

Jan 10th, 2022
1,265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. /*
  3. // Equivalent C code:
  4. const short N = 10;
  5. short a[10] = {26, 21, 1, 18, 23, 15, 1, 32, 18, 19};
  6. short b[10] = {7, 3, 32, 1, 31, 0, 15, 5, 2, 16};
  7. short c[10];
  8. void main() {
  9.     short* pa;
  10.     short* pb;
  11.     short* pc;
  12.     short* pae;
  13.     short* pce;
  14.     short e;
  15.    
  16.     for(pa = a, pb = b+N-1, pc = c+N-1, pae = a+N;pa != pae;pa++, pb--, pc--){
  17.         *pc = *pa & *pb;
  18.     }
  19.     for(pc = c+N-1, e = 0, pce = c-1;pc != pce;pc--){
  20.         e += *pc;
  21.     }
  22. }
  23.  
  24.    
  25. */
  26.  
  27.  
  28. .data
  29.  
  30. 10
  31.  
  32. 26, 21, 1, 18, 23, 15, 1, 32, 18, 19
  33.  
  34. 7, 3, 32, 1, 31, 0, 15, 5, 2, 16
  35.  
  36. // u C znam da su vec sve nule
  37.  
  38.  
  39.  
  40. // R0 = N
  41. // R1 = brojac
  42. // R2 = adresa a
  43. // R3 = adresa b
  44. // R4 = adresa c
  45. // R5 = racunica
  46. // R6 = uslov/racunica
  47. // R7 = e
  48.  
  49. .text
  50. main:
  51.    // R0 ==10
  52.         ld R0, R0
  53.    // R4 ==30
  54.         add R4, R0, R0  // R0+R0==20
  55.         add R4, R4, R0  // R4+R0==30 upisi taj zbir u R4
  56.    // R3 ==20
  57.         sub R3, R4, R0  // R4==30 - R0==10  --> u R3 JE b tj 20 i znam da cu biti na poslednjem u b
  58.    // R2 ==1
  59.         inc R2, R2     //inkrement
  60.  
  61. for_counter_binarno:
  62.  
  63.         sub R6, R1, R0   // kada brojac i N budu jednaki iskace iz petlje
  64.     jmpz for_counter_binarno_end
  65.  
  66. for_counter_binarno_body:
  67.         ld R6, R2 // citam vrednost iz niza a u R6
  68.         ld R5, R3 // citam vrednost iz niza b u R5
  69.  
  70.    
  71.         and R5, R6, R5 // vrsio se binarno and nad poslednjim u b i prvim u a -> u itearciji 1 ...
  72.  
  73.    
  74.         st R5, R4  // ono sto se nalazi nalazi u R5 se smesta u R4 tj u C ali na poslednje mesto
  75.  
  76.  
  77.         inc R1, R1 // brojac ++
  78.          
  79.         dec R4, R4  // pomearam se u levo u C nizu
  80.    
  81.         dec R3, R3  // pomearam se u levo u B nizu
  82.          
  83.         inc R2, R2  // pomeram se u desno u A nizu
  84.          
  85.     jmp for_counter_binarno
  86.  
  87. for_counter_binarno_end:
  88.  
  89.         sub R1, R1, R1 // brojac se setuje na 0
  90.  
  91.         add R4, R0, R0  // 10+10 ==20 smesta se u R4
  92.         add R4, R4, R0  // R4==30 -> tj poslednji elemenat iz C
  93.  
  94. for_counter_set:  
  95.    // tmp = counter - N
  96.         sub R6, R1, R0    // u koliko brojac i N budu isti prosao je kroz niz i treba da skoci na kraj
  97.     jmpz for_counter_set_end  
  98.  
  99. for_counter_dec_body:
  100.  
  101.         ld R5, R4  // citam vrednost iz R4 i stavljam je u R5 tj C niz mi je tad tu
  102.    
  103.         add R7, R7, R5 // poslednji iz C smestam u R7
  104.  
  105.         inc R1, R1     // povecavam brojac
  106.    
  107.         dec R4, R4     // pomearam se u levo za u C
  108.     jmp for_counter_set // skacem da proveravam brojac i N
  109.  
  110. for_counter_set_end:
  111.  
  112. end:
  113.     jmp end
  114.  
  115.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement