title: MIPS assembly parsing error when trying to assign a variable
body: <p>I am having problems with my MIPS assembly code. 
  It shows a syntax error in li $t4, $zero line (4th line of the actual code).
  Could you help me solve it?</p>
  
  <pre><code>    .data
  
      .globl funcall1
      .globl funcall2
  
  
      .text
  
  funcall1:   
          lw $t1, 0($a0) # load the 1st argument - shows how many there are
          addiu $t2, $t1, -1 #t2 stores how many args
          addiu $t3, $t2, -4 #t3 stores how many args there will be apart from 4 main
          li $t4, $zero
          addiu $sp, $sp, -24 # make stack frame
          bgezal $t3, SETSTACK 
          addiu $sp, $sp, $t4 # make stack frame
          sw $ra, 16($sp) # save where to return
  
          # 3:0xAAAA:0:12:0:7 format of FET
  
  
          lw $v0, 4($a0) # load the op-comand or value into the return value
          lw $s0, $a0 # save FET for future reference
          jal EXPRESSION
          bgezal $t3, ADDMOREARGS
  
          lw $a0, $s1 # return the first value to a0
  
          jal $t0
  
          lw $ra, 16($sp) # restore $ra
          addiu $sp, $sp, 24  # restore $sp
  
          jr $ra # return
  
  funcall2:                   # main function in file
                          # Arguments $a0 is address of input FET
  
          jr $ra           # return
  
  SETSTACK:   
          addiu $sp, $sp, -24 # make stack 
          sw $ra, 16($sp) # save where to return
          mul $t4, $t3, 4 # this is how many extra bytes wil be needed
          div $t4, 8
          bne $hi, 0, ADDFOUR # if size not divisible by 8, add 4.
          mul $t4, $t4, -1
  
          lw $ra, 16($sp) # restore $ra
          addiu $sp,$sp,24  # restore $sp
  
          jr $ra # return
  
  ADDFOUR:
          addiu $sp, $sp, -24 # make stack 
          sw $ra, 16($sp) # save where to return
          addiu $t4, $t4, 4 # t4 += 4
          lw $ra, 16($sp) # restore $ra
          addiu $sp,$sp,24  # restore $sp
  
          jr $ra # return 
  
  EXPRESSION: 
          addiu $sp, $sp, -24 # make stack 
          sw $ra, 16($sp) # save where to return
  
          lw $t0,  4($s0) # save the operand
          lw $s1, 12($s0) # free a0 for addmoreargs, save the first value in s1 as well
          lw $a0, 12($s0) # save first value in a0
          lw $a1, 20($s0) # second value
          lw $a2, 28($s0) # third value
          lw $a3, 32($s0) # fourth value
  
          la $s9, 40($s0) # save the rest of address
          lw $s8, 40($s0) # save the rest of data
          la $s7, $a3     # save the next place for an argument
          addiu $s7, $s7, -8
  
          lw $ra, 16($sp) # restore $ra
          addiu $sp,$sp,24  # restore $sp
  
          jr $ra # return
  
  
  ADDMOREARGS:
  
          sw $s7, 4($s8)
          lw $s8, 8($s8) # jump thorugh the data
          addiu $t3, $t3, -1
          bgezal $t3, ADDMOREARGS
  </code></pre>
  
  <p>P.S. I know there could be some more problems with the code, I only started the debugging...</p>