Butchers algorithm in Jasmin

207 views Asked by At

I keep getting errors and I have been trying to print this forever it seems. Ive looked for info on Jasmin and as far as I can tell there really isn't a lot of information. Any help with my code would be greatly appreciated. I'm supposed to use Butchers algorithm to print with Jasmin on the command line the next 10 years of Easter. Most of my problem is in the Printing of the Month and My code below.....

.class public example/Easterdeb
.super java/lang/Object

;
; standard initializer
.method public <init>()V
   aload_0
   invokenonvirtual java/lang/Object/<init>()V
   return
.end method

.method public static main([Ljava/lang/String;)V
   ; set limits used by this method
   .limit locals 20
   .limit stack 6

   ; setup local variables:

   ;    1 - the PrintStream object held in java.lang.System.out
   getstatic java/lang/System/out Ljava/io/PrintStream;
   astore_1

   ;    2 - the integer 10 - the counter used in the loop
   bipush 10
   sipush 2016
   istore_2       ;count is in 2
   istore 4       ;year is in 4 

   ; now loop 10 times printing out a number

 Loop:

   ; compute 10 - <local variable 2> ...
  iload 4      ;year
   bipush 19
   irem
   istore 5     ; a is in 5
   iload 4
   bipush 100
   idiv
   istore 6     ; b is in 6
   iload 4
   bipush 100
   irem
   istore 7     ; c is in 7
   iload 7
   iload 6      
   bipush 4
   idiv
   istore 8     ; d is in 8
   iload 6      
   bipush 4
   irem
   istore 9     ; e is in 9
   iload 6
   bipush 8
   iadd 
   bipush 25
   idiv
   istore 10    ; f is in 10
   iload 6 
   iload 10
   isub
   bipush 1
   iadd
   bipush 3
   idiv
   istore 11    ; g is in 11
   bipush 19
   iload 5
   imul
   iload 6        
   iadd
   iload 8
   isub          
   iload 11
   isub
   bipush 15
   iadd
   bipush 30
   irem
   istore 12     ; h is in 12
   iload 7
   bipush 4
   idiv
   istore 13     ; i is in 13
   iload 7
   bipush 4
   irem
   istore 14     ; k is in 14
   bipush 32
   bipush 2
   iload 9  ;load e
   imul
   iadd
   bipush 2
   iadd
   iload 13 ; load i
   imul
   iload 12 ; load h
   isub
   iload 14 ; load k
   isub
   bipush 7
   irem
   istore 15      ; x is in 15
   iload 5
   bipush 11
   iload 12
   imul
   iadd
   bipush 22
   iload 15
   imul
   iadd
   sipush 451
   idiv
   istore 16      ; m is in 16
   iload 12
   iload 15
    iadd
   bipush 7
   iload 16
   imul
   isub
   bipush 114
   iadd
   bipush 31
   idiv
   istore 17     ; easter month is in 17  
  iload 12
  iload 15
   iadd
   bipush 7
   iload 16
  imul
  isub
   bipush 114
   iadd
   bipush 31
   irem
   bipush 1
   iadd
   istore 18     ; p is in 18

   iload 17        
   bipush 4  
   isub
   ifeq Print_April 
   aload_1     
   ldc "March"
   swap
   goto PRINT_IT   
   Print_April: 
   aload_1   
   ldc "April"
   PRINT_IT:

   invokestatic java/lang/String/valueOf(I)Ljava/lang/String;
   astore_3

   ; ... and print it

   aload_1    ; push the PrintStream object
   aload_3    ; push the string we just created - then ...
   invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V

   ; decrement the counter and loop
   iinc 4 1    ;increment year
   iinc 2 -1
   iload_2
   ifne Loop

   ; done
   return

.end method

SO I figured it out here it is

.class public Easter

.super java/lang/Object

.method public <init>()V

aload_0

 invokespecial java/lang/Object/<init>()V

 return

.end method

.method public static main([Ljava/lang/String;)V

       .limit stack 100

       .limit locals 50

      getstatic java/lang/System/out Ljava/io/PrintStream;

       astore_1

       ;    2 - the integer 10 - the counter used in the loop
       sipush 2009
       istore 4       ;year is in 4
       bipush 10
       istore_2       ;count is in 2 


       ; now loop 10 times printing out a number

     Loop:

       iinc 4 1
       iload 4  
       bipush 19
       irem
       istore 5     ; a is in 5


       iload 4  
       bipush 100
       idiv
       istore 6     ; b is in 6


       iload 4  
       bipush 100
       irem
       istore 7     ; c is in 7

       iload 6      
       bipush 4
       idiv
       istore 8     ; d is in 8

       iload 6      
       bipush 4
       irem
       istore 9     ; e is in 9

       iload 6
       bipush 8
       iadd 
       bipush 25
       idiv
       istore 10    ; f is in 10

       iload 6 
       iload 10
       isub
       bipush 1
       iadd
       bipush 3
       idiv
       istore 11    ; g is in 11

       bipush 19
       iload 5
       imul
       iload 6        
       bipush 15 
       iadd
       iadd
       iload 8
       iload 11
       iadd
       isub
       bipush 30
       irem
       istore 12     ; h is in 12

       iload 7
       bipush 4
       idiv
       istore 13     ; i is in 13

       iload 7
       bipush 4
       irem
       istore 14     ; k is in 14

       bipush 2
       iload 9  ;load e
       imul
       bipush 2
       iload 13 ; load i
       imul
       bipush 32
       iadd
       iadd
       iload 12 ; load h
       iload 14 ; load k
       iadd
       isub
       bipush 7
       irem
       istore 15      ; x is in 15

       bipush 11
       iload 12       ;load h
       imul
       bipush 22
       iload 15
       imul
       iload 5         ;load a
       iadd
       iadd
       sipush 451
       idiv
       istore 16      ; m is in 16

       iload 12
       iload 15
       bipush 114
       iadd
       iadd
       bipush 7
       iload 16
       imul
       isub
       istore 17
       iload 17
       bipush 31
       idiv
       istore 18    ; easter month is in 17

       iload 17
       bipush 31
       irem
       istore 19    ; p is in 19

       iload 18       
       bipush 4  
       isub
       ifeq Print_April
       aload_1  
       ldc "March " 
       goto PRINT_IT
       Print_April:
       aload_1
       ldc "April "
       goto PRINT_IT
       PRINT_IT:       

             invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V

              aload_1
              iload 19
              bipush 1
              iadd
              invokestatic java/lang/String/valueOf(I)Ljava/lang/String;
              invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V

             aload_1
             ldc ", "
             invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V

             aload_1
             iload 4
             invokestatic java/lang/String/valueOf(I)Ljava/lang/String;
             invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V

              aload_1
              ldc "\n"
              invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V

       iinc 2 -1    ; check loop
       iload_2
       ifne Loop


       return

.end method
0

There are 0 answers