Jump to content
Sign in to follow this  
ViGisP

Assembly MIPS: guardar valores intermédios

Recommended Posts

ViGisP

Boa tarde.

Nunca programei em assembly, e precisava de uma ajuda , se for possível :cheesygrin:

Tenho que fazer um programa que consiga inserir o codigo ISBN e tenho que fazer um programa de detecte o erro no codigo, para fazer tenho que multiplicar cada numero do isbn pelo seu peso.

A minha questao é como é que guardo o resultado de 4*1 e depois o some por 7*2? ou seja 4x1+7x2

Ja fiz um programa que multiplica e soma . Como e que junto os dois resultados e depois some?

Obrigado

Programa da soma e multiplicaçao

.data

ler1: 		.asciiz "\nIntroduza o primeiro número inteiro: "

ler2: 		.asciiz "\nIntroduza o segundo número inteiro: "

resultado: 	.asciiz "O resultado da soma dos dois números e: "

n_linha: 	.asciiz "\n"

.text

.globl main

main:

soma:


la $a0, ler1

li $v0, 4

syscall


li $v0, 5

syscall

move $t0, $v0


la $a0, ler2

li $v0, 4

syscall


li $v0, 5

syscall

move $t1, $v0



la $a0, resultado

li $v0, 4

syscall




add $a0, $t0, $t1


li $v0, 1

syscall
la $a0, n_linha


li $v0, 4

syscall

li $v0, 5

syscall

jal soma





.data

ler1: 		.asciiz "\nIntroduza o primeiro número inteiro: "
ler2: 		.asciiz "\nIntroduza o segundo número inteiro: "
resultado: 	.asciiz "O resultado da multiplicação dos dois números e: "

n_linha: 		.asciiz "\n"


	.text


	.globl main


main:



multiplicacao:


la $a0, ler1 

li $v0, 4

syscall


li $v0, 5

syscall

move $t1, $v0


la $a0, ler2   
li $v0, 4
syscall


li $v0, 5

syscall

move $t2, $v0    #copia o  valor 




la $a0, resultado   	 # imprime a string

li $v0, 4

syscall


mul $a0 $t1, $t2	 # multiplica o resultado 1 pelo o resultado 2


li $v0, 1

syscall


la $a0, n_linha         # muda de linha

li $v0, 4

syscall


li $v0, 5

syscall

jal multiplicacao

fim_prg:

li $v0, 10

syscall

Share this post


Link to post
Share on other sites
Rui Carlos

Assembly não é a minha especialidade, mas diria que guardas os valores das somas em registos ou na stack. Isto em x86, que ainda não percebi se é exactamente esse o assembly que estás a usar.

Share this post


Link to post
Share on other sites
ViGisP

Assembly não é a minha especialidade, mas diria que guardas os valores das somas em registos ou na stack. Isto em x86, que ainda não percebi se é exactamente esse o assembly que estás a usar.

A linguagem que estou a falar é o assembly MIPS.

Obrigado

Share this post


Link to post
Share on other sites
Rui Carlos

Nunca trabalhei com assembly MIPS, mas pelo que vi, tens os registo $t0-$t7 para guardares valores dentro funções (se bem que como vais chamar outras funções, é provável que os valores não sejam preservados). E também há stack pointer, por isso podes sempre meter os valores no topo da stack.

Share this post


Link to post
Share on other sites
ViGisP

Ok, Obrigado só mais uma coisa , tentei fazer um programa que faz 1*2+2*3+...+10*11 o meu problema e tentar fazer a multiplicaçao e a adiçao, e guardar o resultado.

Neste codigo este guarda tudo e vai dar 440, como e que consigo so fazer 1*2+2*3 .....3*4+4*5 por ai.......

		.data				

out_string:	.asciiz	"O resultado é"	

	.text	

main:						
	li	$t0, 1			
	li	$t1, 0			
	li	$t2, 3		

loop_top:	bgt	$t0,$t2,loop_end	
	addi	$t3,$t0,1		
	mult	$t0,$t3			

	mflo	$t3			
	add	$t1,$t1,$t3		
	addi	$t0, 1			
	b	loop_top		

loop_end:	# print out the result string
	li	$v0, 4			
	la	$a0, out_string		
	syscall				


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


	li	$v0, 10			
	syscall				

Share this post


Link to post
Share on other sites
Rui Carlos

Acabei de referir a hipótese de guardar os valores na stack.

Colocas o valor zero na stack, e depois de fazeres uma multiplicação, adicionas o resultado ao valor que está na stack.

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
Sign in to follow this  

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