Jump to content
Rafael Faria

Programa Assembly

Recommended Posts

Rafael Faria

Olá, tenho de resolver dois exercícios de assembly, mas não percebo nada. Ainda só tive uma aula e foi teórica. Se alguém me pudesse ajudar:

escreva um programa em ASM P3 (ou altere o programa anterior) que tenha numa variável em memória o lado de um quadrado e calcule o respetivo perímetro e área, colocando o resultado em R1 e R2, respetivamente.

escreva um programa em ASM P3 que calcule: x = 20 – m + (n + 40). Onde x, m e n são registos do processador P3 (por exemplo, R1, R2, e R3).

Share this post


Link to post
Share on other sites
Boflawok

Eu nunca utilizai ASM P3, mas encontrei um documento útil.

Primeiro programa:

Para calcular o perímetro de um quadrado, deve-se multiplicar o comprimento do lado deste por 4.

Para calcular a área de um quadrado, deve-se multiplicar o comprimento do lado deste por si próprio.

Sabendo isto, vamos-nos focar em calcular o perímetro.

Os passos para esta possível solução são:

1) Ter o comprimento do lado do quadrado em memória(podemos utilizar a pseudo-instrução WORD para isto:

ComprimentoLadoQuadrado WORD 5

).

2) Mover o comprimento do quadrado para R2 e mover 4 para R1(podemos utilizar a instrução MOV para isto:

MOV R2, M[ComprimentoLadoQuadrado]
MOV R1, 4

(ComprimentoLadoQuadrado é o endereço do comprimento do lado do quadrado, enquanto M[ComprimentoLadoQuadrado] é o que está quardado lá(o comprimento do lado do quadrado).).).

3) Multiplicar R1 por R2 (ou seja, multiplicar o comprimento do lado do quadrado por 4) (podemos utilizar a instrução MUL para isto:

MUL R2, R1

(o resultado é guardado em R1 e R2, sendo que R2 tem os bits mais significantes e R1 os menos significantes(vamos só utilizar o conteúdo de R1. Se o comprimento for grande demais, o nosso programa vai dar um resultado errado.).).).

 

Agora que temos o perímetro do quadrado em R1, vamos calcular a área do quadrado:

1) Mover o comprimento do quadrado para R2 e R3(

MOV R2, M[ComprimentoLadoQuadrado]
MOV R3, R2

).

2) Multiplicar R2 por R3(ou seja, calcular o Comprimento do Lado do Quadrado ao quadrado)(

MUL R3, R2

).

 

Agora temos o perímetro do quadrado em R1 e a área do quadrado em R2 (R3 não interessa aqui.)!

 

Segundo programa:

Aqui podes utilizar as instruções já referidas anteriormente e as instruções ADD e SUB.

ADD recebe dois operadores e somas os e guarda os no primeiro operador(este obviamente não pode ser endereçado de forma imediata.).

SUB faz a mesma coisa só que subtrai em vez de adicionar.

Eu penso que lendo a solução do primeiro programa já te permite escrever o segundo programa. Se isso não for o caso, diga.

 

Nota: Eu posso estar completamente errado acerca o que eu disse.

 

Edited by Boflawok
Esqueci-me de mudar a língua em alguns blocos de código.

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.