Jump to content
dancm

Alternativa para este programa em assembly

Recommended Posts

dancm

Boas Pessoal, vejam bem tenho este trabalho feito que é o seguinte:

Programa: O programa deverá pedir ao utilizador um número inteiro. Em vez de

utilizar a chamada ao sistema de código 1 irá utilizar um ciclo e a chamada ao sistema de código

12 (leitura de um caracter1) e armazenar os caracteres digitados num array. Se o utilizador

introduzir um caracter não-válido (por exemplo, uma letra) o programa mostra uma mensagem

de erro e começa tudo de novo. O "Enter" (código ASCII 10) deve ser reconhecido como o sinal

de que o utilizador acabou de digitar o número. Não esquecer de terminar a string com um zero.

No fim o número introduzido (armazenado na string) deverá ser mostrado com a chamada ao

sistema de código 4.

Exemplo de funcionamento (as mensagens podem ser alteradas livremente):

(Computador): Introduza um número inteiro:

(Utilizador): 3425+

(Computador): Caracter inválido!

(Computador): Introduza um número inteiro:

(Utilizador): 34259 (enter)

(Computador): Número introduzido: 34259.

Ele funciona como pede o enunciado acima.

A minha duvida é existe outra maneira de fazer este programa? ( em assembly é claro!).

Agradeço a todos. :thumbsup:

.data
dmc:	  .byte 0:31
valor:    .asciiz ""
str1:    .asciiz "Por favor introduza um valor inteiro:\n"
str2:    .asciiz "\nCaracter Invalido! \n"
str3:    .asciiz "Numero Introduzido: "
strteste:	.asciiz "\n"

   .text       
 .globl main   

main: 
la $a0,str1  	   #Imprime a string "str1"
li $v0,4                #A instrução "li" é uma falsa instrução do tipo load, pois não lê nada da memória#
syscall                 # chamada ao Sistema#
li, $t0, 0
li $t3, 10

loopprimario:
	li $v0, 12
	syscall
	beq $v0, $t3 , PrepFinal #Segmentos para o o Label especificado quando o conteúdo de src igual a 1 o conteúdo da Src2, ou pode galho quando o conteúdo de SRC1 valor igual imediato.#
	bne $v0,10,pt2           #Segmentos para o o Label especificado quando o conteúdo de SRC1 não são iguais aconteúdo de Src2, ou pode filial quando o conteúdo de SRC1 não são iguais a valor imediato.#


prep:
	add $t0,$t0,1
	j loopprimario	

pt2:
	li $t4, 57
	bgt $v0, $t4, Invalido
	li $t4, 48
	blt $v0, $t4, Invalido
	sb $v0, dmc($t0)
	j prep

PrepFinal:
	la $a0, str3
	li $v0, 4
	syscall
	li $t5, 0
	j Final

Final:
	lb $a0, dmc($t5)
	li $v0, 11
	syscall
	add $t5, $t5, 1
	bgt $t5, $t0, Exit
	ble $t5, $t0, Final
Invalido:
	la $a0, str2
	li $v0, 4
	syscall

	li $v0, 10
	syscall

Exit:
	li $v0, 10
	syscall

Share this post


Link to post
Share on other sites
carlosf

Há sempre aquela tecnica de programar em C e depois ver o que ele gera para assembly =) e melhorar claro, a conversão C para Assembly tem sempre gravações à memória desnecessaria, visto podermos trabalhar apenas com registos do cpu em muitos casos.. um aparte, isso é assembly "o que"? não me parece mips, que é o unico que sei e muito mal =)

cumps, carlosf

Share this post


Link to post
Share on other sites
supermastereu

O código como está não está de acordo com o pedido.

Edited by supermastereu

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • 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.