.text bsy_tmain: subu $sp, $sp, 16 sw $fp, 4($sp) addu $fp, $sp, 16 sw $ra, -8($fp) sw $a0, 0($fp) li $t0, 0 b bsy_tmain_test .data bsy_tmain_msg0: .asciiz "Thread " bsy_tmain_msg1: .asciiz ": " bsy_tmain_msg2: .asciiz "\n" .text bsy_tmain_bod: la $a0, bsy_tmain_msg0 li $v0, 4 syscall lw $a0, 0($fp) li $v0, 1 syscall la $a0, bsy_tmain_msg1 li $v0, 4 syscall move $a0, $t0 li $v0, 1 syscall la $a0, bsy_tmain_msg2 li $v0, 4 syscall sw $t0, -4($fp) li $t0, 0 li $t1, 0 li $t2, 0 li $t3, 0 li $t4, 0 li $t5, 0 li $t6, 0 li $t7, 0 li $t8, 0 li $t9, 0 li $a0, 0 li $a1, 0 li $a2, 0 li $a3, 0 jal thr_yield lw $t0, -4($fp) addiu $t0, $t0, 1 sw $t0, -4($fp) bsy_tmain_test: blt $t0, 10, bsy_tmain_bod lw $ra, -8($fp) lw $fp, -12($fp) addu $sp, $sp, 16 jr $ra bsy_foo: subu $sp, $sp, 12 sw $fp, 4($sp) addu $fp, $sp, 12 sw $ra, -4($fp) .data bsy_foo_msg0: .asciiz "I am thread " bsy_foo_msg1: .asciiz ", and this is " bsy_foo_msg2: .asciiz " times through\n" .text sw $a0, 0($fp) la $a0, bsy_foo_msg0 li $v0, 4 syscall lw $a0, 0($fp) li $v0, 1 syscall la $a0, bsy_foo_msg1 li $v0, 4 syscall move $a0, $a1 li $v0, 1 syscall la $a0, bsy_foo_msg2 li $v0, 4 syscall jal thr_yield lw $ra, -4($fp) lw $fp, -8($fp) addu $sp, $sp, 12 jr $ra bsy_t2main: subu $sp, $sp, 16 sw $fp, 4($sp) addu $fp, $sp, 16 sw $ra, -8($fp) sw $a0, 0($fp) # thread_id move $t0, $zero # i b bsy_t2test bsy_t2bod: sw $t0, -4($fp) move $a1, $t0 lw $a0, 0($fp) jal bsy_foo .data bsy_t2_msg0: .asciiz "[ " bsy_t2_msg1: .asciiz ":" bsy_t2_msg2: .asciiz " ]\n" .text la $a0, bsy_t2_msg0 li $v0, 4 syscall lw $a0, 0($fp) li $v0, 1 syscall la $a0, bsy_t2_msg1 li $v0, 4 syscall lw $t0, -4($fp) move $a0, $t0 li $v0, 1 syscall la $a0, bsy_t2_msg2 li $v0, 4 syscall li $t0, 0 li $t1, 0 li $t2, 0 li $t3, 0 li $t4, 0 li $t5, 0 li $t6, 0 li $t7, 0 li $t8, 0 li $t9, 0 li $a0, 0 li $a1, 0 li $a2, 0 li $a3, 0 jal thr_yield lw $t0, -4($fp) addiu $t0, $t0, 1 bsy_t2test: blt $t0, 10, bsy_t2bod lw $ra, -8($fp) lw $fp, -12($fp) addu $sp, $sp, 16 jr $ra .globl main # # 8 + 10 * THR_STATE_SIZE + 10 * 4 * 512 # = 8 + 10 * 60 + 10 * 2048 # = 8 + 600 + 20480 # = 21088 # # fp -> t9stk -2044($fp) # t8stk -4092($fp) # t7stk -6140($fp) # t6stk -8188($fp) # t5stk -10236($fp) # t4stk -12284($fp) # t3stk -14332($fp) # t2stk -16380($fp) # t1stk -18428($fp) # t0stk -20476($fp) # t9 -20536($fp) # t8 -20596($fp) # t7 -20656($fp) # t6 -20716($fp) # t5 -20776($fp) # t4 -20836($fp) # t3 -20896($fp) # t2 -20956($fp) # t1 -21016($fp) # t0 -21076($fp) # old-ra -21080($fp) # old-fp -21084($fp) # sp -> main: subu $sp, $sp, 21088 sw $fp, 4($sp) sw $ra, 8($sp) addu $fp, $sp, 21088 li $t0, 2048 subu $sp, $sp, 4 sw $t0, 4($sp) # push shared 4th arg la $a3, -20476($fp) li $a2, 0 la $a1, bsy_tmain la $a0, -21076($fp) jal thr_init la $a3, -18428($fp) li $a2, 1 la $a1, bsy_tmain la $a0, -21016($fp) jal thr_init la $a3, -16380($fp) li $a2, 2 la $a1, bsy_tmain la $a0, -20956($fp) jal thr_init la $a3, -14332($fp) li $a2, 3 la $a1, bsy_t2main la $a0, -20896($fp) jal thr_init la $a3, -12284($fp) li $a2, 4 la $a1, bsy_tmain la $a0, -20836($fp) jal thr_init la $a3, -10236($fp) li $a2, 5 la $a1, bsy_t2main la $a0, -20776($fp) jal thr_init la $a3, -8188($fp) li $a2, 6 la $a1, bsy_tmain la $a0, -20716($fp) jal thr_init la $a3, -6140($fp) li $a2, 7 la $a1, bsy_t2main la $a0, -20656($fp) jal thr_init la $a3, -4092($fp) li $a2, 8 la $a1, bsy_tmain la $a0, -20596($fp) jal thr_init la $a3, -2044($fp) li $a2, 9 la $a1, bsy_t2main la $a0, -20536($fp) jal thr_init addu $sp, $sp, 4 # pop shared 4th arg jal thr_go .data bsy_done_msg: .asciiz "All done!\n" .text la $a0, bsy_done_msg li $v0, 4 syscall lw $ra, -21080($fp) lw $fp, -21084($fp) addu $sp, $sp, 21088 jr $ra