Advertisement
Guest User

Untitled

a guest
Feb 28th, 2015
362
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SPARK 2.89 KB | None | 0 0
  1. /**
  2.  * COSC 221: Lab 4 - Calculate Date of Easter
  3.  * Author:   Gilbert Fulmore
  4.  * Date:     2015/02/16
  5.  */
  6. define(c_r, l0)
  7. define(y_r, l1)
  8. define(m_r, l2)
  9. define(d_r, l3)
  10. define(g_r, l4)
  11. define(x_r, l5)
  12. define(z_r, l6)
  13. define(e_r, l7)
  14. define(n_r, l8)
  15.  
  16.     .global main
  17. main:               !int main() {
  18.     save   %sp, -96, %sp        !int c; //century
  19.                         !int y; //year
  20.                     !int m; //month
  21.                     !int d; //day
  22.  
  23.                     !int g; //golden number
  24.                     !int x; //number of dropped leap years
  25.                     !int z; //synchronize easter with moon orbit
  26.                     !int e; //epact
  27.                     !int n; //find full moon
  28.  
  29.                     !printf("Enter Year: ");
  30.     mov    1984, %y_r       !scanf("%d", &y);
  31.        
  32.                     !//find golden number
  33.     mov    %y_r, %o0        !g = (y % 19) + 1;
  34.     mov    19, %o1
  35.     call   .rem
  36.     nop
  37.     add    %o0, 1, %g_r
  38.                     !//find century
  39.     mov    %y_r, %o0        !c = (y / 100) + 1;
  40.     mov    100, %o1
  41.     call   .div
  42.     nop
  43.     add    %o0, 1, %c_r
  44.  
  45.     mov    %y_r, %o0        !if (y % 100 != 0) {
  46.     mov    100, %o1
  47.     call   .rem
  48.     nop
  49.         cmp    %o0, %g0
  50.     be     done
  51.     nop
  52.  
  53.     mov    3, %o0               !x = (3 * c / 4) - 12;
  54.     mov    %c_r, %o1
  55.     call   .mul
  56.         nop
  57.         mov    4, %o1
  58.         call   .div
  59.         nop
  60.         sub    %o0, 12, %x_r
  61.    
  62.     mov    8, %o0               !z = ((8 * c + 5) / 25) - 5;
  63.     mov    %c_r, %o1
  64.     call   .mul
  65.     nop
  66.     add    %o0, 5, %o0
  67.     mov    25, %o1
  68.     call   .div
  69.     nop
  70.         sub    %o0, 5, %z_r
  71. done:                   !}
  72.    
  73.                     !//find sunday
  74.     mov    5, %o0           !d = (5 * y / 4) - x - 10;
  75.     mov    %y_r, %o1
  76.     call   .mul
  77.     nop
  78.     mov    4, %o1
  79.     call   .div
  80.     nop
  81.     sub    %o0, %x_r, %o0
  82.         sub    %o0, 10, %d_r
  83.                     !//find the "epact" E
  84.     mov    11, %o0          !e = (11 * g + 20 + z - x) % 30;
  85.     mov    %g_r, %o1
  86.     call   .mul
  87.     nop
  88.     add    %o0, 20, %o0
  89.     add    %o0, %z_r, %o0
  90.     sub    %o0, %x_r, %o0
  91.     mov    30, %o1
  92.     call   .rem
  93.     nop
  94.     mov    %o0, %e_r
  95.                     !if (e == 25 && g > 11 || e == 24)
  96.     subcc  %e_r, 25, %o0        !if (e == 25)
  97.     bne    done
  98.     nop
  99.     subcc  %g_r, 11, %o1        !if (g > 11)
  100.     bl     done
  101.     nop
  102.     and    %o0, %o1, %o0        !if ((e == 25) && (g > 11))
  103.     subcc  %e_r, 24, %o1        !if (e == 24)
  104.     bne    done
  105.     nop
  106.     or     %o0, %o1, %o0        !if ((e == 25 && g > 11) || (e == 24))
  107.     cmp    %o0, 1           !if (true)
  108.     bne    done
  109.     nop
  110.    
  111.     add    %e_r, 1, %e_r                !++e;
  112. done:
  113.                     !//find full moon
  114.     sub    44, %e_r, %n_r       !n = 44 - e;
  115.  
  116.     cmp    %n_r, 21         !if (n < 21)
  117.     bg     done
  118.     nop
  119.     add    %n_r, 30, %n_r           !n += 30;
  120. done:
  121.                     !//advance to sunday
  122.     add    %d_r, %n_r, %o0      !n = n + 7 - ((d + n) % 7);
  123.     mov    7, %o1
  124.     call   .rem
  125.     nop
  126.     add    %n_r, 7, %n_r
  127.     sub    %n_r, %o0, %n_r
  128.                     !//get month
  129.     cmp    %n_r, 31         !if (n > 31) {
  130.     bl     else
  131.     nop
  132.     mov    4, %m_r              !m = 4;
  133.     sub    %n_r, 31, %d_r           !d = n-31;
  134.     ba     done
  135.     nop
  136. else:                   !} else {
  137.                         !m = 3;
  138.                         !d = n;
  139. done:                   !}
  140.    
  141.                     !printf("Easter date: %d-%d-%d\n", y, m, d);
  142.     mov    1, %g1           !return 0;
  143.     ta     0
  144.                 !}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement