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

konbleck

[Resolvido] Ajuda em divisão em Assembly MARIE

Mensagens Recomendadas

konbleck

Boa tarde.

Necessito de fazer uma operação de divisão em Assembly MARIE.

Terá que ser feita pelo método de subtracções sucessivas.

Um amigo forneceu-me estes dois códigos.

Org 100
Input
Store A
Input
Store B
Input
Store C
Input
Store D
Input
Store E
Add A
Add B
Add C
Add D
Store Tmp
Store Sum
Clear
Lp, Load Tmp
Subt Nums
Store Tmp
Load Avg
Add c1
Store Avg
Clear
Load Tmp
Skipcond 800
Jump chck
Jump Lp
chck, Load Tmp
Skipcond 400
Jump fix
Jump End
fix, Load Avg
Subt c1
Store Avg
Load Tmp
Add Nums
Store Rem
End, Clear
Load A
Output
Load B
Output
Load C
Output
Load D
Output
Load E
Output
Load Sum
Output
Load Avg
Output
Load Rem
Skipcond 400
Output
Halt
A, Dec 0
B, Dec 0
C, Dec 0
D, Dec 0
E, Dec 0
Sum, Dec 0
Avg, Dec 0
Nums, Dec 5
Rem, Dec 0
Tmp, Dec 0
c1, Dec 1

e

Input
Store X
Input
Store Y
Load Zero / Poe 0 no AC
Store Z / Coloca Z a 0
If, Load Z / carrega Z
Skipcond 400 / Se AC=0 (Z=0), salta a instrucçao seguinte
Jump Endif / vai para Endif se X menor que 1
Then, Load X
Subt Y / X - Y
Store X / X= X - Y
Endif, Load Z / poe Z no AC
Add One / Adiciona 1 a Z
Store Z / Z = Z + 1
Output
Halt / Termina programa
X, Dec 0 / X tem valor inicial, nao fornecido no problema
Y, Dec 0 / Y tem valor inicial, nao fornecido no problema
Z, Dec 0
One, Dec 1 / usado como constante
Zero, Dec 0 / usado como constante
END

Como tenho muitas dúvidas na utilização dessa linguagem, gostaria de saber se algum código destes é apropriado à resolução do meu problema, ou se é apropriado para tirar ideias para resolver à minha maneira.

Cumprimentos e obrigado pela atenção.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
konbleck

Até agora tenho isto

ORG 100
Input
Store X
Input
Store Y
Load Zero
Store Z
LoopXpositive, Load X
Subt Y
Skipcond 800
Jump Finish
Store X
ElseIf, Load Z
Add One
Store Z
Jump LoopXpositive
Finish, Load Z
Output
Load X
Output
Halt
X, Dec 0
Y, Dec 0
Z, Dec 0
One, Dec 1
Zero, Dec 0
END

que segundo o que me parece, faz o que eu quero: divisão por subtracções sucessivas. Pelo menos parece-me, mas ao testar, apresenta-me algo completamente diferente :confused:

Pretendo isto:

por exemplo: 10/2

X é 10

Y é 2.

Faz a conta X-Y e enquanto esse resultado for maior que zero soma uma unidade a Z.

Ou seja, 10-2=8, e Z=1

E o X passa a 8.

8-2=6, Z=2. e X=6

e assim sucessivamente até chegar a 2-0=0 e Z=5.

E apresenta Z no output (mostra o valor 5).

Mas digamos que o código não faz nada disso. :cheesygrin:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
konbleck

não tens nenhuma mnemonica que te faça isso?

Mnemónica? Como assim?

Tenho uma parte que fiz em C para perceber o pretendido:

int divisao(int x, int y)
{
  int q=0;
  while(x>y)
  {
  x=x-y;
  q++;
  }
return q;
}

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.