# a0 is return var
# a1, a2 are func arguments

.data
argument:      .word 7
start_str:     .string "["
div_str:       .string ","
end_str:       .string "]"

.text
main:
    lw  s0, argument            # a_n = argument     (a_n is s0)                 
    addi s1, x0, 0              # nStar = 0          (nStar is s1)
    addi s2, x0, 4              # four = 4           (four is s2)                
    jal ra, print_start
    
main_loop:
    addi a0, s0, 0              # print_num(a_n)
    jal ra, print_num           # |
    jal ra, print_div           # print_div()
    
    andi t0, s0, 1              # res = a_n % 2 (res is t0)
    
    bne t0, x0, else            # if res != 0 { goto else }
    srli s0, s0, 1              # a_n = a_n / 2
    jal, ra, end                # goto end      
else: 
    slli t0, s0, 1              # temp = a_n * 2
    add t0, t0, s0              # temp += a_n
    addi s0, t0, 1              # a_n = temp + 1
end:
    addi, s1, s1, 1             # nStar = nStar + 1
    
    bne s0, s2, main_loop        #  if a_n != 4 { goto main_loop }
end_loop:
    
    addi a0, s0, 0              # print_num(a_n)
    jal ra, print_num           # |
    jal ra, print_end           # print_end()         
    
exit:
    addi a0, x0, 0
    addi a7, x0, 10
    ecall


                                # x is a1
                                
print_num:                      # fn print(int x) 
    addi a7, x0, 1              # print(x)
    ecall                       # |
    jr ra                       # return
    
    
print_start:                    # fn print_start()       
    la a0, start_str            # print(start_str)
    addi a7, x0, 4              # |
    ecall                       # |
    jr ra                       # return
    
    
    
print_div:                      # fn print_div()       
    la a0, div_str              # print(div_str)
    addi a7, x0, 4              # |
    ecall                       # |
    jr ra                       # return
    
    
    
print_end:                      # fn print_end()       
    la a0, end_str              # print(end_str)
    addi a7, x0, 4              # |
    ecall                       # |
    jr ra                       # return
    

        



    
    
    
        
        

