Jump to content
buffo

assembly- ajuda num exercicio de multiplicaçao

Recommended Posts

buffo

Comecei a programar em assembly á pouco e ainda estou um noob nisto.

Num exercicio tenho que fazer um programa que calcule  f = 3*2

Pelo que ouvi nas aulas, nesta linguagem nao da para multiplicar, ou seja, tenho que desmontar isto.

Sera qualquer coisa deste genero: ?

main:

addi $t0, $0, 2

addi $t1, $0, 2

addi $t2, $0, 2

add $t3, $t0, $t1

add $t4, $t2, $t3

jr $ra

Obrigado pela a ajuda

Share this post


Link to post
Share on other sites
buffo

Boas. Convém dizeres para que arquitectura/processador tás a desenvolver o code  :cheesygrin:

mips r2000  ;)

Share this post


Link to post
Share on other sites
bubulindo

Espera até teres de fazer ciclos... LOL

Estás a programar para uma máquina de quantos bits?

Já agora, e como opinião pessoal, é este o ponto forte do Assembly. Obrigar-nos a desmontar o problema mais pequeno que podemos imaginar em problemas mais pequenos ainda... uma espécie de fusão nuclear da programacão. LOL

Qualquer um pode fazer um for(;;), ou um while() (Nem sempre, como se pode comprovar pelo fórum de C), mas fazê-lo em Assembly é muito mais complicado, ainda mais se a word da máquina for menor que o número de vezes do ciclo. :D


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
buffo

Espera até teres de fazer ciclos... LOL

Estás a programar para uma máquina de quantos bits?

Já agora, e como opinião pessoal, é este o ponto forte do Assembly. Obrigar-nos a desmontar o problema mais pequeno que podemos imaginar em problemas mais pequenos ainda... uma espécie de fusão nuclear da programacão. LOL

Qualquer um pode fazer um for(;:cheesygrin:, ou um while() (Nem sempre, como se pode comprovar pelo fórum de C), mas fazê-lo em Assembly é muito mais complicado, ainda mais se a word da máquina for menor que o número de vezes do ciclo. :D

Estou a programar para 32 bits.

E já estou a dominar isto melhor do que na altura que postei esta duvida xD

E ainda bem que falas dos ciclos, pois não estou muito bem a ver a diferença entre um ciclo while e um for.

Vou-te mostrar um exercicio:

a=0; b=0; c=5

while (a<c)

        {a=a+1;

          b=b+c; }

main:

addi $t0, $0, 0

addi $t1, $0, 0

addi $t2, $0, 5

WHILE: slt $t3, $t0, $t2

            beq $t3, 0, END

           

            addi $t0, $t0, 1

            add $t1, $t1, $t2

            j WHILE

END: jr $ra

Agora este exercicio pede-me um ciclo for

a=0; b=0;

for ( i=0; i<5; i++)

      {a=a+1;

      b=b+2; )

O que quer dizer i++?

Qual é a diferença do exercicio anterior (while) para este que me pede para fazer um ciclo for?

Share this post


Link to post
Share on other sites
thoga31

O que quer dizer i++?

i++ significa que é somada à variável i uma unidade em cada iteração. :D

Isso, dentro do ciclo for, é como se estivesse num ciclo while o seguinte: i=i+1 :cheesygrin:

Cumpz.


Knowledge is free!

Share this post


Link to post
Share on other sites
tomas.cb

Boa tarde!

Ando a tentar fazer um exercício em assembly que faz o seguinte: Multiplicação de números de 32 bits, deixando o resultado em 64 bits. Trata-se de 8085.

Para este mesmo exercício pretendo fazer fluxograma de cada rotina desenvolvida, mapa de memória e ocupação dos registos do microprocessador (indicando explicitamente onde são guardadas as variáveis usadas e listagens comentadas de todas as rotinas desenvolvidas.

Venho perguntar se alguém me pode ajudar a perceber como efectuar o código da multiplicação de dois nº's com 32 bits e apresentar o resultado em 64 bits.

Obrigado.

Share this post


Link to post
Share on other sites
bubulindo

Eu sei assembly para microcontroladores de 8 bits... e já não pratico há cerca de uma década... portanto, posso com segurança dizer que não sei os comandos em assembly.

No entanto, o ciclo for é algo que corre sempre por um número de vezes determinado à partida... se correres o programa 1000 vezes, o ciclo for executará sempre 5 passos.

Um ciclo while, poderá nunca ser executado, poderá ser executado com 1 ciclo, 2, 3, 4000...

Se calhar assim é mais simples:

Isto

a=0; b=0; 
for ( i=0; i<5; i++)
      {a=a+1;
       b=b+2; )

é equivalente a isto:

a=0; b=0, i = 0; 
while(i<5)
      {a=a+1;
       b=b+2; 
       i = i+1;}

Posto isto, tens muito pouco que alterar no exemplo anterior para fazer um ciclo for. :thumbsup:

Quanto à multiplicação de 32 bits e colocar o resultado em 64... uma thread nova sobre isso era o ideal. Não vamos juntar duas threads com assuntos completamente diferentes.


include <ai se te avio>

Mãe () {

}

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.