Files
IPS_G-assignment/tests/filter.asm
NikolajDanger e46e002e9f
2022-06-01 15:53:24 +02:00

319 lines
4.8 KiB
NASM

.text 0x00400000
.globl main
la $28, _heap_
la $4, _true
ori $3, $0, 4
sw $3, 0($4)
la $3, _false
ori $4, $0, 5
sw $4, 0($3)
jal main
_stop_:
ori $2, $0, 10
syscall
write_int:
sw $31, -4($29)
sw $16, -8($29)
addi $29, $29, -12
ori $16, $2, 0
ori $2, $16, 0
jal putint
ori $2, $16, 0
addi $29, $29, 12
lw $16, -8($29)
lw $31, -4($29)
jr $31
write_int_arr:
sw $31, -4($29)
sw $20, -24($29)
sw $19, -20($29)
sw $18, -16($29)
sw $17, -12($29)
sw $16, -8($29)
addi $29, $29, -28
lw $16, 0($2)
ori $17, $28, 0
sll $3, $16, 2
addi $3, $3, 4
add $28, $28, $3
sw $16, 0($17)
addi $18, $17, 4
ori $19, $0, 0
addi $20, $2, 4
_loop_beg_12_:
sub $2, $19, $16
bgez $2, _loop_end_13_
lw $2, 0($20)
addi $20, $20, 4
jal write_int
sw $2, 0($18)
addi $18, $18, 4
addi $19, $19, 1
j _loop_beg_12_
_loop_end_13_:
ori $2, $17, 0
addi $29, $29, 28
lw $20, -24($29)
lw $19, -20($29)
lw $18, -16($29)
lw $17, -12($29)
lw $16, -8($29)
lw $31, -4($29)
jr $31
isMul16:
sw $31, -4($29)
addi $29, $29, -8
ori $3, $0, 16
div $4, $2, $3
ori $3, $0, 16
mul $3, $4, $3
ori $4, $0, 0
bne $3, $2, _false_25_
ori $4, $0, 1
_false_25_:
ori $2, $4, 0
addi $29, $29, 8
lw $31, -4($29)
jr $31
main:
sw $31, -4($29)
sw $22, -32($29)
sw $21, -28($29)
sw $20, -24($29)
sw $19, -20($29)
sw $18, -16($29)
sw $17, -12($29)
sw $16, -8($29)
addi $29, $29, -36
jal getint
bgez $2, _safe_lab_35_
ori $5, $0, 10
la $6, _Msg_IllegalArraySize_
j _RuntimeError_
_safe_lab_35_:
ori $7, $28, 0
sll $3, $2, 2
addi $3, $3, 4
add $28, $28, $3
sw $2, 0($7)
addi $3, $7, 4
ori $5, $0, 0
_loop_beg_38_:
sub $4, $5, $2
bgez $4, _loop_end_39_
sw $5, 0($3)
addi $3, $3, 4
addi $5, $5, 1
j _loop_beg_38_
_loop_end_39_:
lw $3, 0($7)
ori $2, $28, 0
sll $4, $3, 2
addi $4, $4, 4
add $28, $28, $4
sw $3, 0($2)
addi $4, $2, 4
ori $6, $0, 0
ori $5, $0, 0
addi $7, $7, 4
_loop_beg_45_:
sub $8, $6, $3
bgez $8, _loop_end_46_
lw $10, 0($7)
addi $7, $7, 4
ori $9, $10, 0
ori $8, $0, 2
div $8, $9, $8
ori $9, $0, 2
mul $9, $8, $9
ori $8, $0, 0
bne $10, $9, _false_56_
ori $8, $0, 1
_false_56_:
beq $8, $0, _not_true_47_
sw $10, 0($4)
addi $5, $5, 1
addi $4, $4, 4
_not_true_47_:
addi $6, $6, 1
j _loop_beg_45_
_loop_end_46_:
sw $5, 0($2)
lw $5, 0($2)
ori $4, $28, 0
sll $3, $5, 2
addi $3, $3, 4
add $28, $28, $3
sw $5, 0($4)
addi $7, $4, 4
ori $6, $0, 0
addi $3, $2, 4
_loop_beg_65_:
sub $2, $6, $5
bgez $2, _loop_end_66_
lw $2, 0($3)
addi $3, $3, 4
ori $8, $2, 0
mul $2, $8, $2
sw $2, 0($7)
addi $7, $7, 4
addi $6, $6, 1
j _loop_beg_65_
_loop_end_66_:
lw $17, 0($4)
ori $16, $28, 0
sll $2, $17, 2
addi $2, $2, 4
add $28, $28, $2
sw $17, 0($16)
addi $19, $16, 4
ori $18, $0, 0
ori $20, $0, 0
addi $21, $4, 4
_loop_beg_81_:
sub $2, $18, $17
bgez $2, _loop_end_82_
lw $22, 0($21)
addi $21, $21, 4
ori $2, $22, 0
jal isMul16
beq $2, $0, _not_true_83_
sw $22, 0($19)
addi $20, $20, 1
addi $19, $19, 4
_not_true_83_:
addi $18, $18, 1
j _loop_beg_81_
_loop_end_82_:
sw $20, 0($16)
ori $2, $16, 0
jal write_int_arr
addi $29, $29, 36
lw $22, -32($29)
lw $21, -28($29)
lw $20, -24($29)
lw $19, -20($29)
lw $18, -16($29)
lw $17, -12($29)
lw $16, -8($29)
lw $31, -4($29)
jr $31
ord:
jr $31
chr:
andi $2, $2, 255
jr $31
putint:
addi $29, $29, -8
sw $2, 0($29)
sw $4, 4($29)
ori $4, $2, 0
ori $2, $0, 1
syscall
ori $2, $0, 4
la $4, _space_
syscall
lw $2, 0($29)
lw $4, 4($29)
addi $29, $29, 8
jr $31
getint:
ori $2, $0, 5
syscall
jr $31
putchar:
addi $29, $29, -8
sw $2, 0($29)
sw $4, 4($29)
ori $4, $2, 0
ori $2, $0, 11
syscall
ori $2, $0, 4
la $4, _space_
syscall
lw $2, 0($29)
lw $4, 4($29)
addi $29, $29, 8
jr $31
getchar:
addi $29, $29, -8
sw $4, 0($29)
sw $5, 4($29)
ori $2, $0, 12
syscall
ori $5, $2, 0
ori $2, $0, 4
la $4, _cr_
syscall
ori $2, $5, 0
lw $4, 0($29)
lw $5, 4($29)
addi $29, $29, 8
jr $31
putstring:
addi $29, $29, -16
sw $2, 0($29)
sw $4, 4($29)
sw $5, 8($29)
sw $6, 12($29)
lw $4, 0($2)
addi $5, $2, 4
add $6, $5, $4
ori $2, $0, 11
putstring_begin:
sub $4, $5, $6
bgez $4, putstring_done
lb $4, 0($5)
syscall
addi $5, $5, 1
j putstring_begin
putstring_done:
lw $2, 0($29)
lw $4, 4($29)
lw $5, 8($29)
lw $6, 12($29)
addi $29, $29, 16
jr $31
_RuntimeError_:
la $4, _ErrMsg_
ori $2, $0, 4
syscall
ori $4, $5, 0
ori $2, $0, 1
syscall
la $4, _colon_space_
ori $2, $0, 4
syscall
ori $4, $6, 0
ori $2, $0, 4
syscall
la $4, _cr_
ori $2, $0, 4
syscall
j _stop_
.data
_ErrMsg_:
.asciiz "Runtime error at line "
_colon_space_:
.asciiz ": "
_cr_:
.asciiz "\n"
_space_:
.asciiz " "
_Msg_IllegalArraySize_:
.asciiz "negative array size"
_Msg_IllegalIndex_:
.asciiz "array index out of bounds"
_Msg_DivZero_:
.asciiz "division by zero"
.align 2
_true:
.space 4
.asciiz "true"
.align 2
_false:
.space 4
.asciiz "false"
.align 2
_heap_:
.space 100000