Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Trabalho de Arquitetura e Organização de Computadores 
 
 
 
 
 
 
 
 
 
 
Turma da noite 
Juliana Bond Oliveira Lins -20201101127 
 
 
 
 
Corpo do trabalho 
A empresa Automatic Seller Machine (ASM) desenvolveu uma máquina automática de venda de produtos e 
pretende colocar esta máquina disponível no mercado brasileiro. O hardware do equipamento já está 
desenvolvido, e sua empresa foi contratada para o desenvolvimento do software, em linguagem assembly, para 
o funcionamento do equipamento. 
O hardware é baseado na arquitetura MIPS 32 bits e conta com equipamento que aceita cédulas de 20, 10, 5 e 
2 reais, assim como moedas de 1 real e de 50, 25 e 10 centavos. 
O software que será desenvolvido receberá a quantidade de cédulas e moedas inseridas e deverá: 
• Informar no visor a quantidade de dinheiro inserida. 
• Informar no visor o preço do produto selecionado. 
• Informar no visor o valor do troco. 
• Calcular a quantidade de cada cédula e moeda que devem ser fornecidas como troco, otimizando para que a 
quantidade de cédula/moeda seja a mínima possível (sempre fornecer como troco a maior quantidade 
possível de cédulas e moedas de maior valor). 
 
Código em assembly 
.data 
msg1: .asciiz "digite um o preco:" 
msg2: .asciiz "digite o dinheiro recebido./n" 
msg3: .asciiz "troco./n" 
.text 
 .globl main 
 main: 
 li $v0,4 
 la $a0, msg1 
 syscall 
 li $v0, 5 
 syscall 
 move $t0, $v0 # Armazena dividendo em $t0 
 li $v0, 4 
 la $a0, msg2 
 syscall # Mostra mensagem solicitando divisor 
 li $v0, 5 
 syscall # Le o divisor 
 move $t1, $v0 
# DEFINIR QUANTAS NOTAS DE 2 E MOSTRAR 
 li $t2, 2 #Aloca o 20 no $t2 
 div $t5,$t2 #Divide $t5, inteiro do troco por 20 
 mfhi $t5 #Resto em $t5, continua com o resto do troco 
 mflo $s0 #Quociente da divisao, aloca o numero de notas de 20 que irao 
para o troco 
 li $v0,1 #Prepara para printar um int 
 move $a0,$s0 #Coloca o numero no registrador de argumento para printar o 
resto, o decimal do troco 
 syscall 
 li $v0, 4 #Avisa ao sistema que vai printar o enter 
 la $a0, notas #Aloca mensagem inicial no $a0 para printar 
 syscall 
 li $v0,1 #Prepara para printar um int 
 move $a0,$t2 #Coloca o numero no registrador de argumento para printar o 
numero da nota 
 syscall 
 #DEFINIR QUANTAS NOTAS DE 5 E MOSTRAR 
 li $t2, 5 #Aloca o 20 no $t2 
 div $t5,$t2 #Divide $t5, inteiro do troco por 20 
 mfhi $t5 #Resto em $t5, continua com o resto do troco 
 mflo $s0 #Quociente da divisao, aloca o numero de notas de 20 que irao 
para o troco 
 li $v0,1 #Prepara para printar um int 
 move $a0,$s0 #Coloca o numero no registrador de argumento para printar o 
resto, o decimal do troco 
 syscall 
 li $v0, 4 #Avisa ao sistema que vai printar o enter 
 la $a0, notas #Aloca mensagem inicial no $a0 para printar 
 syscall 
 li $v0,1 #Prepara para printar um int 
 move $a0,$t2 #Coloca o numero no registrador de argumento para printar o 
numero da nota 
 syscall 
 #DEFINIR QUANTAS NOTAS DE 10 E MOSTRAR 
 li $t2, 10 #Aloca o 20 no $t2 
 div $t5,$t2 #Divide $t5, inteiro do troco por 20 
 mfhi $t5 #Resto em $t5, continua com o resto do troco 
 mflo $s0 #Quociente da divisao, aloca o numero de notas de 20 que irao 
para o troco 
 li $v0,1 #Prepara para printar um int 
 move $a0,$s0 #Coloca o numero no registrador de argumento para printar o 
resto, o decimal do troco 
 syscall 
 li $v0, 4 #Avisa ao sistema que vai printar o enter 
 la $a0, notas #Aloca mensagem inicial no $a0 para printar 
 syscall 
 li $v0,1 #Prepara para printar um int 
 move $a0,$t2 #Coloca o numero no registrador de argumento para printar o 
numero da nota 
 syscall 
 #DEFINIR QUANTAS NOTAS DE 20 E MOSTRAR 
 li $t2, 20 #Aloca o 20 no $t2 
 div $t5,$t2 #Divide $t5, inteiro do troco por 20 
 mfhi $t5 #Resto em $t5, continua com o resto do troco 
 mflo $s0 #Quociente da divisao, aloca o numero de notas de 20 que irao 
para o troco 
 li $v0,1 #Prepara para printar um int 
 move $a0,$s0 #Coloca o numero no registrador de argumento para printar o 
resto, o decimal do troco 
 syscall 
 li $v0, 4 #Avisa ao sistema que vai printar o enter 
 la $a0, notas #Aloca mensagem inicial no $a0 para printar 
 syscall 
 li $v0,1 #Prepara para printar um int 
 move $a0,$t2 #Coloca o numero no registrador de argumento para printar o 
numero da nota 
 syscall 
 #DEFINIR QUANTAS MOEDAS DE 1 E MOSTRAR 
 li $t2, 20 #Aloca o 20 no $t2 
 div $t5,$t2 #Divide $t5, inteiro do troco por 20 
 mfhi $t5 #Resto em $t5, continua com o resto do troco 
 mflo $s0 #Quociente da divisao, aloca o numero de notas de 20 que irao 
para o troco 
 li $v0,1 #Prepara para printar um int 
 move $a0,$s0 #Coloca o numero no registrador de argumento para printar o 
resto, o decimal do troco 
 syscall 
 li $v0, 4 #Avisa ao sistema que vai printar o enter 
 la $a0, notas #Aloca mensagem inicial no $a0 para printar 
 syscall 
 li $v0,1 #Prepara para printar um int 
 move $a0,$t2 #Coloca o numero no registrador de argumento para printar o 
numero da nota 
 syscall 
 #DEFINIR QUANTAS MOEDAS DE 10 E MOSTRAR 
 li $t2, 10 #Aloca o 20 no $t2 
 div $t5,$t2 #Divide $t5, inteiro do troco por 20 
 mfhi $t5 #Resto em $t5, continua com o resto do troco 
 mflo $s0 #Quociente da divisao, aloca o numero de notas de 20 que irao 
para o troco 
 li $v0,1 #Prepara para printar um int 
 move $a0,$s0 #Coloca o numero no registrador de argumento para printar o 
resto, o decimal do troco 
 syscall 
 li $v0, 4 #Avisa ao sistema que vai printar o enter 
 la $a0, notas #Aloca mensagem inicial no $a0 para printar 
 syscall 
 li $v0,1 #Prepara para printar um int 
 move $a0,$t2 #Coloca o numero no registrador de argumento para printar o 
numero da nota 
 syscall 
 #DEFINIR QUANTAS MOEDAS DE 25 E MOSTRAR 
 li $t2, 25 #Aloca o 20 no $t2 
 div $t5,$t2 #Divide $t5, inteiro do troco por 20 
 mfhi $t5 #Resto em $t5, continua com o resto do troco 
 mflo $s0 #Quociente da divisao, aloca o numero de notas de 20 que irao 
para o troco 
 li $v0,1 #Prepara para printar um int 
 move $a0,$s0 #Coloca o numero no registrador de argumento para printar o 
resto, o decimal do troco 
 syscall 
 li $v0, 4 #Avisa ao sistema que vai printar o enter 
 la $a0, notas #Aloca mensagem inicial no $a0 para printar 
 syscall 
 li $v0,1 #Prepara para printar um int 
 move $a0,$t2 #Coloca o numero no registrador de argumento para printar o 
numero da nota 
 syscall 
 #DEFINIR QUANTAS MOEDAS DE 50 E MOSTRAR 
 li $t2, 50 #Aloca o 20 no $t2 
 div $t5,$t2 #Divide $t5, inteiro do troco por 20 
 mfhi $t5 #Resto em $t5, continua com o resto do troco 
 mflo $s0 #Quociente da divisao, aloca o numero de notas de 20 que irao 
para o troco 
 li $v0,1 #Prepara para printar um int 
 move $a0,$s0 #Coloca o numero no registrador de argumento para printar o 
resto, o decimal do troco 
 syscall 
 
 li $v0, 4 #Avisa ao sistema que vai printar o enter 
 la $a0, moedas #Aloca mensagem inicial no $a0 para printar 
 syscall 
 
 li $v0,1 #Prepara para printar um int 
 move $a0,$t2 #Coloca o numero no registradorde argumento para printar o 
numero da nota 
 syscall 
 
 
 
 
 
T

Mais conteúdos dessa disciplina