| Array: assembler | |||||||||||||
| .text | |||||||||||||
| .globl main | |||||||||||||
| main: | |||||||||||||
| la $s0, size | # initialize registers | ||||||||||||
| lw $s1, 0($s0) | # $s1 = size | ||||||||||||
| ori $s2, $0, 0 | # $s2 = sum | ||||||||||||
| ori $s3, $0, 0 | # $s3 = pos | ||||||||||||
| ori $s4, $0, 0 | # $s4 = neg | ||||||||||||
| # <init> | |||||||||||||
| ori $s5, $0, 0 | # $s5 = i | ||||||||||||
| la $s6, arr | # $s6 = &arr | ||||||||||||
| # if (<cond>) | |||||||||||||
| L1: | bge $s5, $s1, DONE | ||||||||||||
| # <for-body> | |||||||||||||
| lw $s7, 0($s6) | # $s7 = arr[i] | ||||||||||||
| addu $s2, $s2, $s7 | # sum += arr[i] | ||||||||||||
| blez $s7, NEG | # if ! (arr[i] > 0) | ||||||||||||
| addu $s3, $s3, $s7 | # | pos += arr[i]; | |||||||||||
| j UPDATE | # goto UPDATE | ||||||||||||
| NEG: | bgez $s7, UPDATE | # if ! (arr[i] < 0) | |||||||||||
| addu $s4, $s4, $s7 | # | neg += arr[i]; | |||||||||||
| UPDATE: | # <update> | ||||||||||||
| addi $s5, $s5, 1 | # i++ | ||||||||||||
| addi $s6, $s6, 4 | # move array pointer | ||||||||||||
| j L1 | # goto L1 | ||||||||||||
| DONE: | |||||||||||||
| # initialize data | |||||||||||||
| .data | |||||||||||||
| size: | .word | 10 | |||||||||||
| arr: | .word | 12, -1, 8, 0, 6, 85, -74, 23, 99, -30 | |||||||||||