Jump to content
tiagomsmslb

Criação de um programa

Recommended Posts

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.

Share this post


Link to post
Share on other sites
tiagomsmslb

Sim KasterShoot usando a arquitetura mips

2 minutos atrás, KasterShoot disse:

Usas a arquitetura MIPS?

Sim KasterShoot usando a arquitetura mips

Share this post


Link to post
Share on other sites
tiagomsmslb
26 minutos atrás, KasterShoot disse:

Usas a arquitetura MIPS?

E uso o spim (qtSpim) como o simulador do mips.

Share this post


Link to post
Share on other 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 :)

Edited by KasterShoot
Bad formatting
  • Vote 1

Share this post


Link to post
Share on other 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á?

Share this post


Link to post
Share on other sites
KasterShoot

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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

 

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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  

Edited by KasterShoot

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
KasterShoot
1 minuto atrás, tiagomsmslb disse:

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

De nd :)

 

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 

Edited by KasterShoot

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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. 

 

Share this post


Link to post
Share on other 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

  • Vote 1

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

Share this post


Link to post
Share on other 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 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.