Ir ao conteúdo
  • Cadastre-se
HelloLuj

8051 RESOLVIDO Comparação em assembly no 8051

Recommended Posts

Olá.

Sou um estudante em um curso técnico de eltrônica e estou encontrando dificuldade para criar comparações dentro da linguagem assembly com microcontroladores da familia 8051 com o compilador ASEM-51.

Estou limitado a usar o compilador ASEM-51 (http://plit.de/asem-51/contents.htm), que é o mesmo que usamos no colégio em que estudo; com o kit M8031C da BIT9 (http://www.bit9.com.br/index.php?pag=49&sub_pag=59&conteudo=102) e é o mesmo compilador existente no proteus.

Infelizmente o manual deste compilador não oferece exemplos a respeito de como criar as sintaxes abordando as comparações "maior que", "menor que", "maior ou igual que" e "menor ou igual que" (http://plit.de/asem-51/express.htm) ou de como usar essas comparações em IF's (http://plit.de/asem-51/genifxx.htm).:mellow:

Previamente agradeço. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@HelloLuj ,

 

Seu problema não tem nada a ver com o compilador, e sim , entender bem o Assembly dos 8051.

Veja :

 

Compare instruction

The 8051 has an instruction for the compare operation. It has the following syntax:

 

CJNE destination,source,relative address

 

In the 8051, the actions of comparing and jumping are combined into a single instruction called CJNE (compare and jump if not equal). The CJNE instruction compares two operands, and jumps if they are not equal. In addition, it changes the CY flag to indicate if the destination operand is larger or smaller. It is important to notice that the operands themselves remain unchanged. For example, after the execution of the instruction “CJNE A, #67H, NEXT”, register A still has its original value. This instruction compares register A with value 67H and jumps to the target address NEXT only if register A has a value other than 67H.

 

Veja o que acontece nos flags :

 

image.png.83709a0264c641e97493523b817fa2ef.png

 

Essa instrução compara e se não for igual pula para o endereço desejado, E seta o flag Carry para você verificar se é maior ( CY=0 )  ou menor (CY=1) , simplesmente testando o Carry numa próxima instrução, ok ?

 

Não entendo nada dessa familia -ara te ajudar mais do que isso...

 

Paulo

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua solução funcionou perfeitamente para o meu problema!!!

Fiz um programa simples para alterar o padrão na saída do uC dependendo do estado do bit de Carry após uma comparação com CJNE e funcionou exatamente como esperado.

Ainda assim vou buscar entender as ferramentas de IF que sei que o compilador oferece para tentar extrair o máximo de seu potencial, mas por enquanto sua solução vai servir muito bem!!!

Obrigado!

  • Curtir 1
  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@HelloLuj ,

 

Procure como se cria MACROS nesse compilador.

 

Eu usava o M-80 ( nossa .... 1984... ) e criava várias macros para fazer os trechos de código que eram necessários, era fácil fazer essas tipo "se x > y ir para" e "se x < y ir para" e o montador substituia pelos meus trechos em Assembly.

 

Tá certo que comparar o set de instruções do Z-80 com outros microprocessadores é covardia, mas mesmo assim era muito interessante criar minhas próprias "instruções" com o M-80, pois é certeza de código testado.

 

Paulo

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×