Advertisement
Mihailo21

Asm1

Feb 11th, 2024
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. /*
  2. // .data
  3.  
  4. const short a = 20;
  5. const short b = 30;
  6. const short dx = 2;
  7. const short* p_result = 0x30;
  8. */
  9.  
  10. .data
  11. 20 // adresa 0
  12. 30 // adresa 1
  13. 2 // adresa 2
  14. 0x30 // adresa 3
  15.  
  16.  
  17. /*
  18. // .text
  19.  
  20. short P = 0;
  21. for(short x = a; x <= b; x += dx){
  22. short y = 33*x + 5;
  23. short dP = y*dx;
  24. P += dP;
  25. }
  26.  
  27. *p_result = P;
  28. */
  29.  
  30. .text
  31. /*
  32. * R0 - a
  33. * R1 - b
  34. * R2 - dx
  35. * R3 - x // pored x, koristio sam ga na kraju za upis resenja na adresu 0x30
  36. * R4 - y
  37. * R5 - za mnozenje sa dx //koristio sam ga za +5
  38. * R6 - dP
  39. * R7 - P
  40. */
  41. begin:
  42.  
  43. ld R0,R0 //ucitamo R0 = a = 20
  44.  
  45. inc R1,R1 // R1 = 1
  46. ld R1,R1 // ucitamo u R1 adresu 1 tj R1 = b = 30
  47.  
  48. inc R5,R5
  49. inc R5,R5
  50. inc R5,R5
  51. inc R5,R5
  52. inc R5,R5 //stavljamo R5 na vrednost 5 tako sto ga inkrementiramo 5 puta kako bi ga iskoristili u formuli
  53.  
  54. inc R2,R2
  55. inc R2,R2 //stavljamo R2 na 2 kako bismo uzeli vrednost sa druge adrese
  56. ld R2,R2 // loadujemo dx u R2 (R2=2) ovo i nije potrebno jer je R2 vec bilo 2 ali da ispostujem
  57.  
  58. loaduj:
  59.  
  60. sub R3,R3,R3 //ponistimo registar R3 na nulu
  61. st R0,R3 //postavimo (novo) a na adresu nula
  62. ld R3,R3 //ucitamo novo a u R3 (to nam je x)
  63. jmp mnozenje // nije potrebno ali nema veze
  64.  
  65. mnozenje:
  66.  
  67. //16 puta shiftujemo u levo R3 tako ga mnozimo sa 32 (jedan shift u levo mnozi za 2)
  68. shl R3,R3
  69. shl R3,R3
  70. shl R3,R3
  71. shl R3,R3
  72. shl R3,R3
  73. shl R3,R3
  74. shl R3,R3
  75. shl R3,R3
  76. shl R3,R3
  77. shl R3,R3
  78. shl R3,R3
  79. shl R3,R3
  80. shl R3,R3
  81. shl R3,R3
  82. shl R3,R3
  83. shl R3,R3 //sada imamo 32*R3 (32*x)
  84.  
  85. add R3,R3,R0 // dodamo jos jedno a i sada imamo 33*x
  86.  
  87. add R4,R3,R5 // sabiranje y=33x+5 (sada nam je R4 y)
  88. shl R6,R4 // dobijamo dp -> mnozimo y sa dx (shiftovanje u levo se mnozi sa 2) dp=y*dx (dp = y*2) i stavljamo ga u registar R6
  89. add R7,R7,R6 // P+= dp
  90.  
  91. add R0,R0,R2 //dodaje dx (2) na a
  92.  
  93. sub R3,R1,R0 // oduzima a od b i proverava ako je a vece onda skace na kraj (mozemo koristiti R3 ovde kao tmp registar jer nam vise ne treba)
  94. jmps end_mnozenje
  95. jmpns loaduj; //ako a nije vece od b vraca se na loaduj
  96.  
  97. end_mnozenje:
  98.  
  99. sub R3,R3,R3 //cistimo registar R3
  100.  
  101. inc R3,R3
  102. inc R3,R3
  103. inc R3,R3 //postavljamo R3 na R3=3 kako bismo pristupili adresi od 0x30
  104. ld R3,R3 //postavljamo 0x30 u R3
  105.  
  106. st R7,R3 //i na kraju store-ujemo nas rezultat P na adresu 0x30
  107.  
  108. jmp end
  109.  
  110. end:
  111. jmp end
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement