Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- estacionamento: .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- mostrarVagas: .asciiz "\nMostrar vagas: \n"
- vagasLivres: .asciiz "\nMostrar vagas livres: \n"
- estacionar: .asciiz "\nEstacionar carro na vaga: "
- remover: .asciiz "\nRemover carro da vaga: "
- resumoEstacionamento: .asciiz "\nResumo do estacionamento:"
- saida: .asciiz "Falou irmao\n"
- Menu: .asciiz "\n1. Mostrar vagas\n2. Mostrar vagas livres\n3. Estacionar carro na vaga\n4. Remover carro da vaga\n5. Resumo do estacionamento\n6. Encerrar programa\n"
- vagaLivre: .asciiz " Vaga Livre\n"
- vagaOcupada: .asciiz " Vaga Ocupada\n"
- vagaNaoOcupada: .asciiz "Vaga nao esta sendo ocupada\n"
- VagasOcupadas: .asciiz "\nVagas ocupadas: "
- VagasVazias: .asciiz "\nVagas Livres: "
- .text
- main:
- la $s1, estacionamento # $s1 registrador do vetor
- menu:
- li $t8, 0 # $t8 registrador do indice
- li $v0, 4
- la $a0, Menu
- syscall
- li $v0, 5 # lê a entrada desejada
- syscall
- move $t0, $v0
- beq $t0, 1, MostrarVagas
- beq $t0, 2, VagasLivres
- beq $t0, 3, Estacionar
- beq $t0, 4, Remover
- beq $t0, 5, Resumo
- beq $t0, 6, exit
- MostrarVagas:
- la $s1, estacionamento # inicia o endereço do vetor
- li $v0, 4
- la $a0, mostrarVagas
- syscall
- loopmv:
- beq $t8, 20, menu # for mostrar vagas
- lw $t0, 0($s1)
- addi $s1, $s1, 4
- li $v0, 1
- move $a0, $t8
- syscall
- addi $t8, $t8, 1
- li $v0, 4
- beqz $t0, VL1 # if livre
- la $a0, vagaOcupada # else ocupada
- syscall
- j loopmv
- VL1:
- la $a0, vagaLivre
- syscall
- j loopmv
- VagasLivres:
- la $s1, estacionamento # inicia o endereço do vetor
- li $v0, 4
- la $a0, vagasLivres
- syscall
- loopvl:
- beq $t8, 20, menu # for vagas livres
- lw $t0, 0($s1)
- addi $s1, $s1, 4
- addi $t8, $t8, 1
- bnez $t0, loopvl # se estiver ocupada não vai para os prints e retorna para o for
- li $v0, 1
- subi $a0, $t8, 1
- syscall
- li $v0, 4
- la $a0, vagaLivre
- syscall
- j loopvl
- Estacionar:
- la $s1, estacionamento # inicia o endereço do vetor
- li $v0, 4
- la $a0, estacionar
- syscall
- li $v0, 5
- syscall
- move $s7, $v0
- li $t0, 4
- mul $s7, $s7, $t0
- add $s1, $s1, $s7
- lw $t1, 0($s1)
- bnez $t1, VagaNaoDisponivel # se ja estiver ocupada vai para o print
- li $t6, 1
- sw $t6, 0($s1) # estaciona e registra 1 na vaga selecionada
- j menu
- VagaNaoDisponivel:
- li $v0, 4
- la $a0, vagaOcupada
- syscall
- j Estacionar # retorna para estacionar em outra vaga
- Remover:
- la $s1, estacionamento # inicia o endereço do vetor
- li $v0, 4
- la $a0, remover
- syscall
- li $v0, 5
- syscall
- move $s7, $v0
- li $t0, 4
- mul $s7, $s7, $t0 # multiplica bits
- add $s1, $s1, $s7
- lw $t1, 0($s1) # carrega na posição indicada
- beqz $t1, VagaLivre # if vaga não esteja ocupada
- sw $zero, 0($s1) # else remove o carro e registra 0 na vaga
- j menu
- VagaLivre:
- li $v0, 4
- la $a0, vagaNaoOcupada
- syscall
- j Remover
- Resumo:
- li $v0, 4
- la $a0, resumoEstacionamento
- syscall
- la $s1, estacionamento # inicia o endereço do vetor
- li $t0, 0 # $t0 = contador de ocupadas
- li $t1, 0 # $t1 = contador de livres
- li $t8, 0 # $t8 = indice
- LoopResumo:
- beq $t8, 20, ExitResumo # for resumo
- lw $t4, 0($s1)
- addi $s1, $s1, 4
- bne $t4, $zero, OcupadaResumo # if ocupada
- addi $t1, $t1, 1 # else livre
- addi $t8, $t8, 1
- j LoopResumo
- OcupadaResumo:
- addi $t0, $t0, 1
- addi $t8, $t8, 1
- j LoopResumo
- ExitResumo:
- # prints do resumo
- li $v0, 4
- la $a0, VagasOcupadas
- syscall
- li $v0, 1
- move $a0, $t0
- syscall
- li $v0, 4
- la $a0, VagasVazias
- syscall
- li $v0, 1
- move $a0, $t1
- syscall
- j menu
- exit:
- li $v0, 4
- la $a0, saida
- syscall
- li $v0, 10
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement