Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

tiagomsmslb

Criação de um programa

Mensagens Recomendadas

tiagomsmslb

Bom dia, foi-me proposto um trabalho em assembly, o qual tem que percorrer um texto e no fim apresentar o número total de caracteres que compõem esse texto; número de letras minúsculas (sem acentos, ASCII puro); e por fim, número total de caracteres ASCII não representáveis. Agradeço desde já quem puder ajudar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiagomsmslb

Sim KasterShoot usando a arquitetura mips

2 minutos atrás, KasterShoot disse:

Usas a arquitetura MIPS?

Sim KasterShoot usando a arquitetura mips

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KasterShoot

Eu utilizo o MARS , em principio isso não afeta o programa.

.data 
string1: .asciiz "Numero de caracteres: "
string2: .asciiz ", numero de minusculas: "
string3: .asciiz ", numero de nao representaveis: "
string4: .asciiz 

.text 
la $a1, string1 	#carrega o endereço onde começa a string1
la $a2, string2 	#carrega o endereço onde começa a string2
la $a3, string3 	#carrega o endereço onde começa a string3
la $t0, string4 	#carrega o endereço onde começa a string4
li $v0, 8 		#carrega em $v0 o valor imediato de 8 para a syscall
addi $a0, $t0,0 	#copia o endereço que está em $t0 para $a0 (obrigatorio pelo syscall)
syscall

 
li $t2, 97		#carrega em $t2 o valor decimal de 'a'
li $t3, 32		#carrega em $t3 o valor decimal de ' '
li $t4, 0		#inicia registo a 0
li $t5, 0		#inicia registo a 0
li $t6, 0		#inicia registo a 0
li $s0,10		#carrega em $s0 o valor decimal de '\n'
loop:			
lb $t1,0($t0)		#carrega o valor decimal guardado no endereço $t0
beq $t1,$s0,exit	#se o valor for igual a '\n' o programa salta para a label exit
addi $t4,$t4,1 		#caso contrario o contador de caracteres aumenta 1
bge $t1,$t2,add_min	#se o valor for maior ou igual que 'a' salta para a label add_min
ble $t1,$t3, add_nr	#se o valor for menor ou igual a ' ' salta para a label add_nr

addi $t0,$t0,1		#aumenta 1 a $t0 para que o endereço de memoria passe a apontar para os 8 bits seguintes
j loop


add_min:
addi $t5,$t5,1		#aumenta o contador de minuscula em 1
addi $t0,$t0,1		#aumenta 1 a $t0 para que o endereço de memoria passe a apontar para os 8 bits seguintes
j loop			#salta para o loop em ordem a continuar o processo até acabar a string

add_nr:
addi $t6,$t6,1		#aumenta o contador de ñ representaveis
addi $t0,$t0,1
j loop			

exit:
move $a0,$a1		#nesta secção são carregados os endereços de memoria das strings que aparecem no .data e os
li $v0,4		#valores dos contadores e imprime na tela
syscall			#o ultimo syscall com $v0=10 termina o programa
li $v0,1
move $a0, $t4
syscall
move $a0,$a2
li $v0,4
syscall
move $a0,$t5
li $v0,1
syscall
move $a0,$a3
li $v0,4
syscall
li $v0,1
move $a0,$t6
syscall
li $v0,10
syscall

O programa foi feito um bocado à pressa mas funciona bem
Espero ter ajudado :)

Editado por KasterShoot
Bad formatting
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiagomsmslb
4 minutos atrás, KasterShoot disse:

Eu utilizo o MARS , em principio isso não afeta o programa.

 

<

.data 
string1: .asciiz "Numero de caracteres: "
string2: .asciiz ", numero de minusculas: "
string3: .asciiz ", numero de nao representaveis: "
string4: .asciiz 

.text 
la $a1, string1     #carrega o endereço onde começa a string1
la $a2, string2     #carrega o endereço onde começa a string2
la $a3, string3     #carrega o endereço onde começa a string3
la $t0, string4     #carrega o endereço onde começa a string4
li $v0, 8         #carrega em $v0 o valor imediato de 8 para a syscall
addi $a0, $t0,0     #copia o endereço que está em $t0 para $a0 (obrigatorio pelo syscall)
syscall

 
li $t2, 97        #carrega em $t2 o valor decimal de 'a'
li $t3, 32        #carrega em $t3 o valor decimal de ' '
li $t4, 0        #inicia registo a 0
li $t5, 0        #inicia registo a 0
li $t6, 0        #inicia registo a 0
li $s0,10        #carrega em $s0 o valor decimal de '\n'
loop:            
lb $t1,0($t0)        #carrega o valor decimal guardado no endereço $t0
beq $t1,$s0,exit    #se o valor for igual a '\n' o programa salta para a label exit
addi $t4,$t4,1         #caso contrario o contador de caracteres aumenta 1
bge $t1,$t2,add_min    #se o valor for maior ou igual que 'a' salta para a label add_min
ble $t1,$t3, add_nr    #se o valor for menor ou igual a ' ' salta para a label add_nr

addi $t0,$t0,1        #aumenta 1 a $t0 para que o endereço de memoria passe a apontar para os 8 bits seguintes
j loop


add_min:
addi $t5,$t5,1        #aumenta o contador de minuscula em 1
addi $t0,$t0,1        #aumenta 1 a $t0 para que o endereço de memoria passe a apontar para os 8 bits seguintes
j loop            #salta para o loop em ordem a continuar o processo até acabar a string

add_nr:
addi $t6,$t6,1        #aumenta o contador de ñ representaveis
addi $t0,$t0,1
j loop            

exit:
move $a0,$a1        #nesta secção são carregados os endereços de memoria das strings que aparecem no .data e os
li $v0,4        #valores dos contadores e imprime na tela
syscall            #o ultimo syscall com $v0=10 termina o programa
li $v0,1
move $a0, $t4
syscall
move $a0,$a2
li $v0,4
syscall
move $a0,$t5
li $v0,1
syscall
move $a0,$a3
li $v0,4
syscall
li $v0,1
move $a0,$t6
syscall
li $v0,10
syscall
 

>

O programa foi feito um bocado à pressa mas funciona bem
Espero ter ajudado :)

Agradeço imenso a sua ajuda mas no qtspim não sei porque não corre o programa tem alguma ideia do que será?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KasterShoot

Nunca usei o qtspim 
Mas experimenta com o MARS, acho este emulador muito mais simples e tem a informação bem organizada

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiagomsmslb
1 minuto atrás, KasterShoot disse:

Nunca usei o qtspim 
Mas experimenta com o MARS, acho este emulador muito mais simples e tem a informação bem organizada

Instalei agora o mars e não consigo correr já passei o codigo todo tal e qual e não me deixa correr, nem a clicar no atalho f5 nem manualmente, sabe porque?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KasterShoot

O programa está feito para que se introduza uma string depois de lançar o programa

Se o programa tiver algum erro no MARS aparece numa caixa no fundo o erro sublinhado a amarelo


Tenta fazer assim:

clicas na primeira seta verde 

depois escreves a string que quiseres numa caixa que diz Run I/0

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiagomsmslb
4 minutos atrás, KasterShoot disse:

O programa está feito para que se introduza uma string depois de lançar o programa

Se o programa tiver algum erro no MARS aparece numa caixa no fundo o erro sublinhado a amarelo


Tenta fazer assim:

clicas na primeira seta verde 

depois escreves a string que quiseres numa caixa que diz Run I/0

 

Essa seta não me aparece aí está o problema, aparecem cinzentas e nao consigo clicar nelas, ou seja, executar o programa

Pode ver aqui como está https://gyazo.com/2ac051a194b6e645c00f47b6af62ac70

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KasterShoot

Normalmente o programa para poder ser executado o programa precisa ser salvo e "assemblado", consegues "assemblar" se carregares no ícone que parece ter ferramentas.

Esse ícone só fica ativo depois de o programa ser salvo no disco

No teu caso como não tens o programa salvo ele não te deixa nem assemblar nem executar

Também  é uma cena que me acontece muitas vezes xD  

Editado por KasterShoot

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiagomsmslb
3 minutos atrás, KasterShoot disse:

Normalmente o programa para poder ser executado o programa precisa ser salvo e "assemblado", consegues "assemblar" se carregares no ícone que parece ter ferramentas.

Esse ícone só fica ativo depois de o programa ser salvo no disco

No teu caso como não tens o programa salvo ele não te deixa nem assemblar nem executar

Também  é uma cena que me acontece muitas vezes xD  

Muito obrigado mesmo, já consegui! Estou muito grato pela sua ajuda, muito obrigado! :D

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KasterShoot
1 minuto atrás, tiagomsmslb disse:

Muito obrigado mesmo, já consegui! Estou muito grato pela sua ajuda, muito obrigado! :D

De nd :)

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
On ‎14‎/‎01‎/‎2017 at 4:37 PM, tiagomsmslb said:

Muito obrigado mesmo, já consegui! Estou muito grato pela sua ajuda, muito obrigado! :D

eu tenho certas retcencias a este tipo de ajuda... Normalmente, quando pretendo uma solução final a um problema, contacto um indiano.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KasterShoot

Eu ajudei da melhor maneira que sei 

Se não está satisfeito tente ajudar você e deixe-se de comentários que não trazem nenhuma informação útil.

Quando realmente se quer aprender não se faz copy-paste do código, entende-se o código.

No entanto não posso proibir que apenas façam o mais fácil 

Editado por KasterShoot

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
49 minutes ago, KasterShoot said:

Eu ajudei da melhor maneira que sei 

Se não está satisfeito tente ajudar você e deixe-se de comentários que não trazem nenhuma informação útil.

Quando realmente se quer aprender não se faz copy-paste do código, entende-se o código.

No entanto não posso proibir que apenas façam o mais fácil 

eu não disse que não ajudaste o melhor que sabes, eu simplesmente disse que não deverá ser a melhor maneira de o fazer.

se achas que o comentário não tem informação útil, é incoerente com o resto da tua resposta onde assumes que existe problemas em respostas com soluções completas.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KasterShoot
6 minutos atrás, HappyHippyHippo disse:

eu não disse que não ajudaste o melhor que sabes, eu simplesmente disse que não deverá ser a melhor maneira de o fazer.

se achas que o comentário não tem informação útil, é incoerente com o resto da tua resposta onde assumes que existe problemas em respostas com soluções completas.

O problema é a preguiça, lá por teres as soluções de um exercício não implica diretamente que não o vais tentar fazer sozinho mas caso tenhas alguma dúvida tens a solução para te ajudar.

Toma como exemplo as soluções dos livros dos exames nacionais nas respostas de construção, elas são completas, bem documentadas para os alunos entenderem o que devem ou não fazer nessas situações, na programação vai dar ao mesmo.

Claro que vai haver gente que vai simplesmente copiar as soluções, isso nunca é problema das soluções mas sim da maneira que são usadas. 

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

e eu disse o contrario?

a única coisa que estou a indicar e que, pela expericiencia que tenho neste forum, a pessoa vai simplesmente copiar a solucao. E isso para mim e pior do que não receber a solucao e trabalhar para a ter

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
julio a
Em Saturday, January 14, 2017 às 12:22, tiagomsmslb disse:

Bom dia, foi-me proposto um trabalho em assembly, o qual tem que percorrer um texto e no fim apresentar o número total de caracteres que compõem esse texto; número de letras minúsculas (sem acentos, ASCII puro); e por fim, número total de caracteres ASCII não representáveis. Agradeço desde já quem puder ajudar.

Boa noite a todos. Nao sei se esse é o sitio certo. Sera que algum colega tem o disquete que acompanha o livro -- assembly puro e simples de vasco correia veloso. Qual o conteudo desse disco ?? Julio praiaclube@msn.com 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.