Pesquisar neste blog

Mostrando postagens com marcador Microprocessadores. Mostrar todas as postagens
Mostrando postagens com marcador Microprocessadores. Mostrar todas as postagens

17/10/2021

Soma, subtração, divisão e multiplicação com MIPS Assembly

.data
#soma
num1: .asciiz "Digite o primeiro numero: "
num2: .asciiz "Digite o segundo numero: "
Resultado: .asciiz "Soma = "

#subtração
n1: .asciiz "\n\nDigite o 1° num: "
n2: .asciiz "Digite o 2° num: "
result: .asciiz "Subração = "

#divisão
x1: .asciiz "\n\nDigite o 1° número: "
x2: .asciiz "Digite o 2° número: "
Rdiv: .asciiz "Divisão = "

#multiplicação
k1: .asciiz "\n\nDigite o 1° número: "
k2: .asciiz "Digite o 2° número: "
Mult: .asciiz "Multiplicação = "
.text
li $v0, 4
la $a0, num1
syscall

li $v0, 5
syscall
move $t0, $v0

li $v0, 4
la $a0, num2
syscall

li $v0, 5
syscall
move $t1, $v0

#tendo os dois valores 
add $t2, $t0, $t1
li $v0, 4
la $a0, Resultado
syscall

li $v0, 1
move $a0, $t2
syscall

#subtração
li $v0, 4
la $a0, n1
syscall

li $v0, 5
syscall

move $t0, $v0 #move para o registrador

li $v0, 4
la $a0, n2
syscall

li $v0, 5
syscall

move $t1, $v0

sub $t2, $t0, $t1

li $v0, 4
la $a0, result
syscall

li $v0, 1
move $a0, $t2
syscall

#bloco da divisão
li $v0, 4
la $a0, x1
syscall

li $v0, 5
syscall

move $t0, $v0

li $v0, 4
la $a0, x2
syscall

li $v0, 5
syscall

move $t1, $v0
div $t0, $t1

mflo $s3 #pega o valor menor
li $v0, 4
la $a0, Rdiv
syscall

li $v0, 1
move $a0, $s3
syscall

#multiplicação
li $v0, 4
la $a0, k1
syscall

li $v0, 5
syscall

move $t0, $v0

li $v0, 4
la $a0, k2
syscall

li $v0, 5
syscall

move $t1, $v0

mult $t0, $t1

mflo $s3

li $v0, 4
la $a0, Mult
syscall

li $v0, 1
move $a0, $s3
syscall

Saída gerada




31/12/2020

Projeto saldo de conta bancária em Linguagem MIPS Assembly

# PROJETO DO GERENCIADOR DE DEPÓSITOS E SAQUES

.data # diretiva de dados
sal: .asciiz "Informe o sado Inicial: "
menu: .asciiz "\n### MENU ###\n1 - Mostrar o saldo\n2 - Depositar\n3 - Efeturar o saque\n0 - Sair\nOpção: "
outsal: .asciiz "SALDO = "
outdep: .asciiz "Seu NOVO SALDO após o Depósito é: "
outdep2: .asciiz "Informe seu Depósito: "
outsaq: .asciiz "Seu NOVO SALDO após o Saque é: "
outsaq2: .asciiz "Informe seu Saque: "
out: .asciiz "Sistema Finalizado!\n"

.text # Diretiva de texto
.globl main # Diretiva global
main: # bloco main
li $v0, 4 # Imprimi uma string
la $a0, sal # Carrega sal no registrador a0
syscall
li $v0, 5 # le um número inteiro
syscall # Executa
move $t0, $v0 # Salva o número digitado em t0

rep: # bloco rep
li $v0, 4 # Imprimi uma string
la $a0, menu # Carrega o menu no registrador a0
syscall # executa
li $v0, 5 # le um numero inteiro
syscall
move $t1, $v0 # salv ao número digitado em t1
beq $t1, 0, sair # se t0 for 0, executa o bloco sair
jal opmenu # chama a função opmenu
j rep # cria o laço chamando rep

opmenu: # bloco menu
beq $t1, 1, saldo # se t1 for igual a 1, executa saldo
beq $t1, 2, deposito # se t1 for igual a 2, executado deposito
beq $t1, 3, saque # se t1 for igual a 3, execta saque

saldo: # bloco saldo
li $v0, 4 # Imprimi uma string
la $a0, outsal # Carrega outsal no registrador a0
syscall
li $v0, 1 # Imprimi um inteiro
move $a0, $t0 # Carrega a0 com o registrador t0
syscall
jr $ra # Volta para que o chamou (ja1)

deposito: # bloco deposito
li $v0, 4 # Imprimi uma string
la $a0, outdep2 # Carrega outdep2 no registrador a0
syscall
li $v0, 5 # le um número inteiro
syscall
move $t2, $v0 # Salva o número digitado em t2
add $t0, $t0, $t2 # SOMA t0 = t0 + t2
li $v0, 4 # Imprimi uma string
la $a0, outdep # Carrega otdep no registrador a0
syscall
li $v0, 1
move $a0, $t0 # Carrega o registrador a0 com t0
syscall
jr $ra # volta para que o chamou (ja1)

saque:
li $v0, 4 # Imprimi uma string
la $a0, outsaq2 # Carrega outdsaq2 no registrador a0
syscall
li $v0, 5 # le um número inteiro
syscall
move $t4, $v0 # Salva o número digitado em t4
sub $t0, $t0, $t4 # SUBTRAI t0 = t0 - t4
li $v0, 4 # Imprimi uma string
la $a0, outsaq # Carrega otdep no registrador a0
syscall
li $v0, 1
move $a0, $t0 # Carrega o registrador a0 com t0
syscall
jr $ra # volta para que o chamou

sair: # bloco sair
li $v0, 4
la $a0, out
syscall
li $v0, 10 # Sair do programa
syscall

Simulador: MARS 4.5


Calculadora em linguagem MIPS Assembly

.data
menu: .asciiz "***** MENU *****\n1 - Somar\n2 - Subtrair\n3 - Multiplicar\n4 - Dividir\n0 - SAIR\nOpção: "
n1: .asciiz "Entre com o primeiro número: "
n2: .asciiz "Entre com o segundo número: "
r: .asciiz "Resultado = "
pula: .asciiz "\n\n"

.macro pula_linha # Macro pula linha
li $v0, 4
la $a0, pula # Carrega a string de pula em $a0
li $v0, 4
la $a0, pula
syscall
.end_macro

.macro menu
li $v0, 4
la $a0, menu
syscall
li $v0, 5 # Prepara para ler um número inteiro
syscall
move $t0, $v0 # Salva o número digitado em $t0
.end_macro

.text # Diretiva de dados
.globl principal # Diretiva global

principal: # Função principal
menu # Chama a macro menu
# Condições
beq $t0, 1, somar # se $t0 for digitado 1 vai para o bloco somar
# Bloco somar
beq $t0, 2, subtrair
# bloco subtrair
beq $t0, 3, multiplicar
# bloco multiplicar
beq $t0, 4, dividir

beq $t0, 0, sair
# bloco sair

somar:
# pede o primeiro número
li $v0, 4
la $a0, n1 # Carrega n1 no registrador $a0
syscall
li $v0, 5
syscall
move $t1, $v0 
# pede o segundo número
li $v0, 4
la $a0, n2 # Carregga n2 no registrador
syscall
li $v0, 5
syscall
move $t2, $v0 # Salva o número digitado
add $t3, $t1 $t2 # SOMA: $t3 = t1 + t2
# Mostra o resultado na tela
li $v0, 4
la $a0, r # Carrega r no registrador $a0
syscall
li $v0, 1 # Imprimi m número
la $a0, ($t3) # Carrega o inteiro de $t3 em $a0
syscall
pula_linha # Executa a macro
j principal # Executa o bloco principal

subtrair: # Bloco subtrair
# pede o primeiro número
li $v0, 4 # Imprimi uma string
la $a0, n1 # Carrega n1 no registrador a0
syscall
li $v0, 5 # Lê um número inteiro
syscall
move $t1, $v0 # Salva o número digitado em $t1
# pede o segundo número
li $v0, 4 # Imprimir uma string
la $a0, n2 # Carrega n2 no registrador
syscall
li $v0, 5
syscall
move $t2, $v0 # Salva o número digitado em $t2
sub $t3, $t1, $t2 # SUBTRAI: t3 = t1 - t2
#MOSTRA o resultado na tela
li $v0, 4 # Imprimi uma string
la $a0, r # Carrega no registrador a0
syscall
li $v0, 1 # Imprimi um número
la $a0, ($t3) # Carrega o inteiro 
syscall
pula_linha # Executa a macro pula linha
j principal # Executa o bloco principal

multiplicar: # Bloco multiplicar:
# Pede o primeiro número
li $v0, 4 # Imprimi uma string
la $a0, n1 # Carrega n1 no registrador 
syscall
li $v0, 5 # Le um número inteiro
syscall
la $a0, ($t3) # Carrega o inteiro 
# Pede o segundo número
move $t1, $v0 # Salva o número digitado em $t1
la $a0, n2 # Carrega n2 no registrador 
syscall
li $v0, 5 # Lê um número inteiro
syscall
move $t2, $v0 # Salva o número digitado em $t2
mul $t3, $t1, $t2 # MULTIPLICA: t3 = t1 * t2
#Mostra o resultado na tela
li $v0, 4 # Imprimi uma string
la $a0, r # Carrega r no registrador $a0
syscall
li $v0, 1 # Imprimi um número inteiro
la $a0, ($t3) # Carrega o número inteiro de $t3 em $a0
syscall # Executa
pula_linha # Executa a macro pula_linha
j principal # Executa o bloco principal

dividir: # bloco dividir
# Pede o primeiro número
li $v0, 4 # Imprimi uma string
la $a0, n1 # Carrega n1 no registrador $a0
syscall
li $v0, 5 # Lê um número inteiro
syscall
move $t1, $v0 # Salva o número digitado em t1
# pede o segundo número
li $v0, 4 # Imprimi uma string
la $a0, n2 # Carrega n2 no registrador $a0
syscall
li $v0, 5 # Le um número inteiro
syscall
move $t2, $v0 # Salva o número digitado em t2
div $t3, $t1, $t2 # DIVIDE: t3 = t1 / t2
# Mostra o resultado
li $v0, 4 # Imprimi uma string
la $a0, r # Carrega no registrador a0
syscall
li $v0, 1 # Imprimi uma string
la $a0, ($t3) # Carrega um inteiro em a0
syscall
pula_linha
j principal
# bloco para sair
sair:
li $v0, 10
syscall



Simulador: MARS 4.5


23/12/2020

Número positivo ou negativo com loop em MIPS Assembly

Faca um programa que solicita do usuário um número inteiro. O programa deverá dizer se este número é positivo ou negativo se for zero.

Resolução:

.data
msgpositivo: .asciiz "Este número é positivo\n"
msgnegativo: .asciiz "Este número é negativo\n"
msg1: .asciiz "Digite um número: "
fim: .asciiz "Fim do programa!\n"
.text
li $v0 ,4 # prepara o registrador
la $a0, msg1 # a0 = msg1
syscall
li $v0, 5 # recebe um número inteiro
syscall
move $t0, $v0 # t0 = v0
beq $t0, $a0,sair #se t0 == 0, vai sair
jal verifica # vai para verificação

verifica: # função de verificação
bgt $t0, $0, maior # se t0 > 0, vai para maior
blt $t0, $a0, menor # se t0 < 0, vai para menor

maior:
li $v0, 4
la $a0, msgpositivo # a0 = msgpositivo
syscall
j sair # bloco de codigo, vai para sair

menor:
li $v0, 4
la $a0, msgnegativo # a0 = msgnegativo
syscall
j sair

sair: # bloco para sair
li $v0, 4 # imprime uma string
la $a0, fim # a0 = fim
syscall
li $v0, 10
syscall

Simulador: MARS 4.5


Condicional if em Linguagem MIPS Assembly

Faça um programa em MIPS Assembly que receba uma idade e identifique se ele é maior ou de menor idade.

Resolução:

.data
pergunta: .asciiz "Digite a sua idade: "
msg1: .asciiz "Você é menor de idade"
msg2: .asciiz "Você é maior de idade"

.text
li $v0, 4 # imprimir uma string
la $a0, pergunta # a0 = pergunta
syscall # Executar
li $v0, 5 # Faz a leitura de um número inteiro
syscall # Executa
move $t1, $v0 # t1 = v0
li $t0, 18 # t0 = 18
blt $t1, $t0, menor # Desvie se $t1 for menor do que 18 para o bloco menor
bge $t1, $t0, maior # Devie se $t1 for maior ou igual a 18 para o bloco maior

menor: 
li $v0, 4 # Imprimi uma string
la $a0, msg1 # a0 = msg1
syscall
li $v0, 10 # Finaliza o programa

maior:
li $v0, 4
la $a0, msg2 # a0 = msg2
syscall
li $v0, 10
syscall

Simulador: MARS 4.5


22/12/2020

Fração em linguagem MIPS Assembly

.data
x: .asciiz "Digie o valor de X: "
y: .asciiz "Digite o valor de Y: "
z: .asciiz "O resultado de X/Y = "
.text
li $v0, 4 # imprime uma string
la $a0, x # a0 = x
syscall # Executa
li $v0, 5 # Recebe um numero inteiro
syscall
move $t1, $v0 # t1 = v0
li $v0, 4
la $a0, y # a0 = y
syscall
li $v0, 5 # Imprime uma string
syscall
move $t2, $v0 # t2 = v0
div $t3, $t1, $t2 # t3 = t1/t2
li $v0, 4 #imprime um númeor inteiro
la $a0, z # a0 = z
syscall # executa
li $v0, 1 # Imprime um número inteiro
la $a0, ($t3) # a0 = t3
syscall
li $v0, 10 # prepara para finalizar
syscall

Simulador MARS 4.5


Cubo de um número usando MIPS Assebly

.data
numero: .asciiz "Digite um número: "
cubo: .asciiz "O cubo é = "
.text
li $v0, 4 # Imprimi uma string
la $a0, numero # a0 = numero
syscall # executa
li $v0, 5 # eitura de um número inteiro
syscall
move $t1, $v0 # t1 = v0
mul $t2, $t1, $t1 # t2 = t1 * t1
mul $t3, $t1, $t2 # t3 = t1 * t2
li $v0, 4 # imprimi uma string
la $a0, cubo # a0 = cubo
syscall
li $v0, 1 # imprime um número inteiro
la $a0, ($t3) # a0 = t3
syscall
li $v0, 10 # Finalizar o programa
syscall

Simulador MARS 4.5


20/12/2020

Corrida de São Silvestre em Linguagem Assembly

Construa um programa para ser colocado no relógio que utiliza um recurso GPS que ao ser pressionado um botão aparece no display quantos quilômetros já foram percorridos. A posição da largada sabendo que o percurso da corrida possui 15 Km, o display também deverá calcular quantos Km falta para concluir a corrida.

Resolução:

.data
kp: .asciiz "Digite o Km percorrido: "
kf: .asciiz "Km finais = "

.text
li $v0, 4 # imprimir uma string
la $a0, kp # a0 = kp
syscall # Execute
li $v0, 5 # Ler um número inteiro
syscall # Executa
move $t0, $v0 # t0 = v0
li $t1, 15 # t1 = 15
sub $t2, $t1, $t0 # t2 = t1 - t0

li $v0, 4 # Imprima uma string
la $a0, kf # a0 = kf
syscall
li $v0, 1
la $a0, ($t2) #a0 = t2
syscall # Executa


Soma com MIPS usando Linguagem Assembly

Soma de 2 números com leitura em MIPS Assembly.

Resolução:

.data
num1: .asciiz "Digite o primeiro numero: "
num2: .asciiz "Digite o segundo numero: "
Resultado: .asciiz "Soma = "
.text
li $v0, 4
la $a0, num1
syscall

li $v0, 5
syscall
move $t0, $v0

li $v0, 4
la $a0, num2
syscall

li $v0, 5
syscall
move $t1, $v0

#tendo os dois valores 
add $t2, $t1, $t0
li $v0, 4
la $a0, Resultado
syscall

li $v0, 4
la $a0, Resultado
syscall

li $v0, 1
move $a0, $t2
syscall


Simulador: MARS 4.5






19/12/2020

Olá Mundo no MARS em Linguagem MIPS Assembly #03

.data # diretiva data

.macro finalizarprograma
li $v0, 10 # prepara o programa para finalizar programa
syscall # executa
.end_macro

.macro printf(%str)
.data
# o conteúdo dessa variável mensagem será enviada por essa função print
msg: .asciiz %str # recebe uma string de fora
.text
li $v0, 4 # prepara o registrador para receber (imprimir) uma string
la $a0, msg # envia essa string para o registrador
syscall # executa executa
.end_macro # diretiva de finalização macro

.text
.globl principal

principal:
# será executada dentro da diretiva global
printf("Olá Mundo!\n") #chama a macro e passa uma string
finalizarprograma



Olá Mundo no MARS em Linguagem MIPS Assembly #02

# 2° exemplo com diretiva global
.data
msg: .ascii "Olá Mundo!"

.text
.globl principal # diretiva global

principal:
li $v0, 4 # prepara para receber uma string (v0 = 4
la $a0, msg # a0 = msg
syscall # executa
li $v0, 10 # finaliza o programa

Simulador MARS 4.5


Olá Mundo no MARS em linguagem MIPS Assembly #01

.data #faz as variáveis
msg: .asciiz "Ola Mundo!" #asciiz = tipo de variável
.text #diretiva de texto

#instrução para o registrador
li $v0, 4 #prepara o registrador para imprimir uma string
# a0 = msg
la $a0, msg #la = leitura do endereço de memória onde está o texto e inserir dentro do registrador a0
syscall #executa o procedimento
li $v0, 10 #prepara o processador para finalizar
syscall






16/09/2019

Divisão binária no Logisim

Objetivo:
Fazer um circuito de divisão binária, onde para fazer a divisão é subtraído n vezes o divisor até chegar no resultado. Se n vezes subtraído e o resto = 0 então divisão binária OK.
Divisão no Logisim 2.7


04/09/2019

Fluxo de dados

Fluxo de dados no Logisim 2.7




























Palavras chave:

Logisim data flow
זרימת נתונים של לוגיסים
Ροή δεδομένων Logisim
Data est in fluxus Logisim
Logisim data diherike
Потік даних Logisim
Логисим поток данных
Aliran data logisim

02/09/2019

Registradores via barramento

Esta é uma atividade sobre interligação e operação inter-registradores via barramento (DCE).

Objetivo: Fazer operações posteriormente através de leitura de dados por  entrada, troca de dados inter-registradores e escrever dados dos registradores.



























Palavras chave:

बस रेकॉर्डर
Registratori di autobus
Bussinspelare
बस रेकर्डरहरू
د بس ریکارډر
Rikodin bas
Rikodin bas
公交車記錄儀
Linja-autojen nauhurit
Zolemba mabasi
Máy ghi âm xe buýt
Busopnemers

27/08/2019

Registrador de deslocamento 8 bits

CIRCUITO TRANSMISSÃO DE DADOS SERIAL/PARALELO POR DESLOCAMENTO

Objetivo:
Pegar os dados de R0 para RTX em paralelo, depois transferir para RRX em série e transferir em paralelo para R1.
Registrador de deslocamento no Logisim 2.7



























Clique aqui para fazer o download do arquivo feito no Logisim

Créditos para o aluno "João Vitor do IFMT - Instituto Federal de Mato Grosso"

Palavras chave:

SERIAL / PARALLEL DATA TRANSMISSION CIRCUIT
CIRCUITO DE TRANSMISIÓN DE DATOS SERIE / PARALELO
अनुभवात्मक / पार्सल डेटा ट्रान्समिशन सर्कीट
IṣẸ / PARALLEL DATA TRANSMISSION CIRCUIT
SERIES / PARALLEL DATA TRANSMISJONSCIRCUIT
串行/并行数据传输电路
CIRCUIT SERAT / PARALLEL DATA TRANSMISSION
OBVOD SERIAL / PARALLEL DATA
SERIEN / PARALLEL DATA TRANSMISSJONSKRING
SERIALK / PARALLEL DATYARAN KIRANGIRTIN
SERIEN / PARALLEL DATA TRANSMISSION CIRCUIT
СЕРІЙНИЙ / ПАРАЛЕЛЬНИЙ ПРОДАЖ ДЛЯ ДАНИХ