# zad1 .macro print_str (%str) .data myLabel: .asciiz %str .text li $v0, 4 la $a0, myLabel syscall .end_macro .macro get # pobiera liczbe i przechwuje w $v0 li $v0, 5 syscall .end_macro .macro calculate # a = $a0, b = $a1, c = $a2, wynik w $v0 mul $t0, $a0, $a0 # a^2 nop mul $t0, $t0, $a0 # a^3 nop mul $t0, $t0, 3 # 3a^3 nop mul $t1, $a1, $a1 # b^2 nop mul $t1, $t1, 2 # 2b^2 nop add $v0, $t0, $t1 # $v0 = 3a^3 + 2b^2 add $v0, $v0, $a2 # $v0 = 3a^3 + 2b^2 + c .end_macro .macro terminate # konczy program li $v0, 10 syscall .end_macro .macro zad print_str("\nPodaj a: ") get add $s0, $zero, $v0 print_str("Podaj b: ") get add $s1, $zero, $v0 print_str("Podaj c: ") get add $s2, $zero, $v0 # przenosze wartosci do argumentow dla calculate add $a0, $zero, $s0 add $a1, $zero, $s1 add $a2, $zero, $s2 calculate add $s3, $zero, $v0 # wynik w $s3 # przenosze wartosci do argumentow dla max add $a0, $zero, $s0 add $a1, $zero, $s1 add $a2, $zero, $s2 print_str("\nWartosc funkcji: ") li $v0, 1 add $a0, $zero, $s3 syscall # drukuje wynik .end_macro .text main: zad print_str("\nMaksymalny parametr: ") jal max # $v0 max add $a0, $zero, $v0 li $v0, 1 syscall print_str("\nCzy powtrzyc zadanie? (1 - tak, 0 - nie): ") get beq $v0, 1, main terminate max: # wynik w $v0 add $t0, $0, $s0 bgt $s1, $t0, b_g bgt $s2, $t0, c_g j end b_g: add $t0, $0, $s1 bgt $s2, $t0, c_g j end c_g: add $t0, $0, $s2 j end end: add $v0, $0, $t0 jr $ra