Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Rafael Faria

Programa Assembly

Mensagens Recomendadas

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).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

 

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.