Ir ao conteúdo
  • Cadastre-se

Pequena dúvida em Assembly


Ir à solução Resolvido por atlos,

Posts recomendados

Tenho um trabalho da faculdade para fazer utilizando o simulador edsim, é um simulador do microcontrolador 8051. Ele utiliza Assembly, a questão é preciso fazer uma operação somando o acumulador do carry, quando é para somar um valor em um acumulador é simples o comando é:

ADD A, #1B, por exemplo, mas minha dúvida é como faço para somar o valor do Carry (0 ou 1) ao acumulador?

Link para o comentário
Compartilhar em outros sites

Junior, obrigado pela ajuda mas é que eu nunca fiz nada em assembly só C++, poderia me dar a sintaxe deste comando? Vou explicar melhor o meu problema talvez até exista uma solução melhor. Preciso criar o seguinte programa:

 

"Desenvolver um programa em Assembly do 8051 para achar o complemento a 2 de um número de 2 bytes armazenado nos endereços de RAM 41H (byte + significativo) e 40H.  O complemento a 2 deverá ser armazenado nos endereços de RAM interna 31H (byte + significativo) e 30H."

 

Escrevi o seguinte código:

 

MOV A, 40H ;move o valor do end. 40 para o acumulador A
CPL A ;inverte os bits do valor em A
ADD A, #1B ;soma 1 ao valor em A
MOV 30H, A ;move o valor de A para o end. 30
MOV A, 41H ; move o valor do end. 41 para o acumulador A
CPL A ;inverte os bit do valor em A
ADD A, CY ;se o carry for 1 soma 1 ao valor em A
MOV 31H, A ;move o valor de A para o end. 31

 

Meu problema está na penúltima linha, o que acontece é que se o número armazenado no endereço 40 após somar 1 tiver Carry eu preciso que também seja somado 1 no número armazenado no endereço 41.

Link para o comentário
Compartilhar em outros sites

ta bom..


Meu problema está na penúltima linha, o que acontece é que se o número armazenado no endereço 40 após somar 1 tiver Carry eu preciso que também seja somado 1 no número armazenado no endereço 41.

 

SE FOI O QUE EU ENTENDI,POR EXEMPLO:

mov A,40h   ;numero em 40h passado para A add A,1       ;adiciona 1jc LABEL1        ;Testa e salta se a carry foi setada CF=1jmp  ContinuaPrograma    ;Se a carry nao estava setada então controle do programa alcança essa instrução e saltaLABEL1 : mov A,41h        ;Passa valor em 41h         add A,1           ;e adiciona 1ContinuaPrograma :

PS: Nao sei se é exatamente assim a sintax em 8051,porém o 8086 é parecido,então se nao for exatamente isso,é algo parecido

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Ficou quase certo fiz da seguinte forma:

 

 MOV A, 40H ;move o valor do end. 40 para o acumulador A
 CPL A ;inverte os bits do valor em A
 ADD A, #1B ;soma 1 ao valor em A
 MOV 30H, A ;move o valor de A para o end. 30
 MOV A, 41H ; move o valor do end. 41 para o acumulador A
 CPL A ; inverte os bit do valor em A
 JC CARRY
CARRY: ADD A, #1B

 MOV 31H, A ;move o valor de A para o end. 31

 

 

só que a instrução JC CARRY deveria somar 1 apenas se o carry fosse 1, mas ele está somando de qualquer forma?
 

Link para o comentário
Compartilhar em outros sites

  • Solução

voce teria que colocar um jmp depois do jc e mais um label depois do label CARRY

jc CARRY        ;Se a carry estiver setada então salta para o label CARRY e nao executa a instrução abaixo(jmp NCARRY)jmp NCARRY   ;Se a carry nao estava setada,a instrução acima nao vai executar o salto e o programa vai alcançar essa instrução                         ;que vai saltar para o label NCARRY,pulando o label CARRYCARRY : ADD A, #1BNCARRY: MOV 31h,A   
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...