Ir ao conteúdo
  • Cadastre-se

PIC Sabendo assembly sei programar qualquer microcontrolador?


Posts recomendados

Eu to querendo aprender assembly gosto muito dessa parte de hardware e engenharia reversa de hardware, so que eu nao sei qual arquitetura, pelo que eu entendi devo apender x86 li MUITO sobre o tema tenho algumas perguntas para fazer quem poder me ajuda vou ficar grato pois nao se acha tanta coisa sobre assembly como se acha dessas linguagens "hypadinhas" tipo python. Já sei programar em C a pricípio quero saber so porque gosto e porque quero criar um OS bem bobinho, mas futuramente quero programar PIC microcontroladores no geral  para fazer o que eu quiser tipo imprimir algo em uma telinha acender leds e tal, saber como uma placa funciona, sair da matrix 

 

1- Sabendo programar em assembly eu consigo programar desde criar OS a programar PIC independente do modelo? Obs: tirando a parte ARM

2- Sabendo assembly o "proximo passo" para eu começar mexer com hardware vai ser só eletronica? apreder a criar placas, usar capacitores, resistencia e etc?

3- Alguem conhece algum livro para prender assembly bem completo tipo até o avançado

 

Eu to muito perdido em relação a isso, e difícil encontrar livros para aprender, e eu nao confio muito em videos

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Dúvida longa, resposta rápida...

1-Com assembly você 'casa' com o mc. O assembly é exclusivo de cada mc. Até mesmo entre família não se comunicam. P.ex. pic10f,12,16,18,24,32 mal trocam palavras entre si.

2-você deve aprender eletrônica, principalmente a digital, em simultâneo

3-como disse, assembly é exclusivo de cada mc. Escolha-o primeiro. Google te ajuda com + informações sobre o assembly dele (obs:. eu não😁)

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Sua motivação para se interessar por Assembly está equivocada.

 

Existem n formas de se fazer "engenharia reversa".

 

Faz-se o caminho reverso de uma engenharia, obviamente, percorrendo o caminho contrário das "representações" no que está concretizado.

 

Em hardware

 

Desenhar por si mesmo o esquemático de uma placa de circuito impresso é fazer engenharia reversa.

 

Criar segunda placa clone a partir deste esquema é só mais uma etapa da sua reversão.

 

Em software

 

Você pode descobrir a entrada e saída de um utilitário de terminal (programa de linha de comando), e escrever outro que faça o mesmo.

 

Isso também será engenharia reversa.

 

Será engenharia reversa tanto o ato de determinar (descobrir) o comportamento da caixa preta, como o ato de aproveitar essa descoberta "finalizando" o novo programa (com as ferramentas que preferir, julgar adequadas).

 

O programa original pode ter sido escrito em Pascal. Mas você resolveu recriá-lo em Python, porque julgou que atenderá. Fazer engenharia reversa não necessariamente é "clonar".

 

Eu digo recriá-lo e não portar, porque aqui, nessa exemplificação, você não teve acesso ao código em Pascal para simplesmente traduzi-lo. Você está interessado em reproduzir uma máquina — "um ente que se comporta".

 

Onde entra o Assembly?

 

Sempre no fim da linha! Toda linguagem, seja compilada ou interpretada, chega até a máquina por linguagem de máquina. Assembly será o dialeto mais próximo para se gesticular à máquina. Num código Assembly o que existe são a meu ver gestos apontando movimentos entre as partes do corpo da máquina.

 

Nem sempre o acesso a essa camada de gestos se faz necessário; seja para interpretá-los, seja para reproduzi-los. Se você quer que alguém levante o braço, talvez você não precise comandar cada um dos seus músculos.

 

Muitas vezes um interesse por Assembly fica sendo, então, apenas um ato de "comer corda" e desperdiçar energias.

 

Os fabricantes dos microcontroladores documentam o hardware para uma "manipulação de bits" que não necessariamente vai requerer Assembly (leia-se: gestos hyper-super-detalhados).

 

Na maioria das vezes um C escrito em baixo nível será suficiente.

 

Por vezes, você pode concretizar sua engenharia reversa escrevendo em alto nível mesmo.

 

Afinal, caixas pretas continuam sendo caixas fechadas.

Link para o comentário
Compartilhar em outros sites

@.if Você só me deixou mais confuso ainda, porque se nao existe um assembly "geral" eu teria que aprender um específico? mesmo que nao exista um "geral" cada um deles é completamente diferente do outro? Ex. se eu aprender assembly do pic 16 se eu da uma olhada no manual do pic 18 eu vou conseguir usar ele so com o conhecimento previo do outro, ou eu vou ter que aprender tudo completamente do zero pois sao coisas completamentes diferentes

 

resumindo: eu entendi que existe um assembly específico para cada microcontrolador, mas eles sao estão diferentes assim? sabendo um não me ajuda para o outro?para trabalhar com programas que rode direto no meu pc por exemplo que assembly eu deveria saber?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Patrick Marins de Souza , é mais ou menos como a cultura do portugol. Cada professor vai "inventar" uma coisinha, mas é tudo português.

 

Note que arquiteturas diferentes tem conjuntos de instruções diferentes. Tem conjuntos de registradores diferentes.

 

É só isso!

 

Continuando com a analogia que comecei: você precisa de mais ou menos gestos para que a máquina lhe entenda sobre o que você quer detalhadamente ir movimentando ou acessando no corpo dela.

 

Isso para não falar a linguagem dela...

 

Veja bem, existem muitos gestos universais, mas alguns gestos fazem parte da cultura.

Link para o comentário
Compartilhar em outros sites

@Patrick Marins de Souza ,

 

Vou tentar explicar pelo lado do hardware.

 

Um microcontrolador tem muita eletrônica especializada dentro dele.

 

Existem , além de um microprocessador, timers, conversores A/D, comparador analógico, controlador de interrupções, interfaces seriais , etc, etc ....

 

Os manuais de cada microcontrolador fornecem detalhes de como usar esse hardware.

 

E também fornecem uma listagem das instruções (comandos) que o microprocessador reconhece, e o resultado de cada uma dessas instruções.

 

Usando essas instruções, você consegue controlar todos esses hardwares, para fazer com que sirvam ao seu objetivo ( seu “programa” ).

 

Sugiro você primeiro entender como funcionam esses hardwares, que de maneira geral tem funcionamento muito parecido em todas as famílias, e após entender por exemplo o funcionamento de um Atmega328A veja qual a sequência de instruções necessárias para fazer ele funcionar a seu contento.

 

A linguagem Assembly é exatamente isso, usar os comandos existentes dentro de cada microprocessador ( e microcontrolador ) para fazer o que você quer.

 

As linguagens de alto nível simplificam muito o seu trabalho, pois você não precisa compreender a fundo como o hardware todo se interliga.

 

Uma vez você sabendo como fazer um programa em Assembly para um Atmega328A, você consegue migrar para outras famílias sem dificuldades.

 

Mas já lhe adianto que fazer algo grandioso em Assembly não é tarefa fácil....

 

A grande maioria dos SOs usam apenas um núcleo de controle em Assembly, e quase todo o resto é feito em linguagem de alto nível.

 

Até o MSDOS 2.0 que eu tive acesso em 1985 era escrito em C, com algumas rotinas mais críticas em Assembly.

 

O Windows 3.x tinha o kernel em Assembly puro, o resto era um mix de C e Assembly. Era o último SO da Microsoft que manteve várias partes em Assembly, e por isso era considerado bem pequeno para os padrões de hoje.

 

Quando você vê um Windows 10 usar gigabytes de espaço em disco e de memória RAM, pense que se fosse tudo escrito em Assembly poderia usar 100 vezes menos recursos de disco e de RAM, mas iria demorar 1000 vezes mais tempo para ser escrito kkkkkkk

 

Eu usei muito Assembler entre 1985 e 1998, várias famílias de microprocessadores ,  e hoje uso Basic mais Assembler quando preciso de algo muito complicado em termos de timing.

 

Hoje todo mundo usa C e suas variantes, ninguém mais se aprofunda no hardware. Se você pretende se aprofundar em hardware, então acho que deve sim aprender Assembler ok ?

 

Paulo

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

  • Membro VIP
3 minutos atrás, aphawk disse:

fazer algo grandioso em Assembly não é tarefa fácil

 

4 minutos atrás, aphawk disse:

iria demorar 1000 vezes mais tempo para ser escrito

 

Oportunidades de bug também aumentam.

 

"É árduo se comunicar por gestos."

Link para o comentário
Compartilhar em outros sites

@alexandre.mbm ,

 

Já imaginou centenas de programadores cada um desenvolvendo um código, quando juntar todos os módulos poderia dar uma confusão enorme de uso de memória, Interrupção,  etc, por isso que o tempo de desenvolvimento aumenta muito mesmo. Fica impraticável.

 

Mas se fosse possível , a velocidade do programa em geral também ficaria umas 10x mais rápido.

 

No início do C havia muita discussão, muitos benchmarks mostravam a superioridade enorme do Assembly, mas o C permitiu que “macacos com luva de box” ( essa era a expressão utilizada

mesmo kkk ) fizessem programas, sem ser necessário 20% do conhecimento técnico para se programar em Assembly.

A impressão que ficou para sempre é que só se deve usar assembly quando precisa tratar com o hardware....

 

O pior é que acho que estavam corretos ...

 

Paulo

 

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

  • Membro VIP

Amigo como o asm do pic 10,12,16 prega que são only 36 instructions to learning (ou algo assim), dá uma olhadela rápida nesses e sinta você mesmo. Dá uma youtubada em pic instruction set. Talvez você ache até em português.

Quanto aos d+ mc's e uC's, de fato são bem diferentes. Alguns têm operações especializadas que outros não tem e etc.

 

Numa comparação tosca, piscar um led em c pra virtualmente qualquer mc, algo como...


 

//depende um pouco do compilador mas geralmente...
//...ele respeita a nomenclatura do datasheet
#define led RB0  //PIC
//#define led PB0_0 //51's
//#define led PORTB_Bit0 //AVR
//#define PB_ODR_bit.ODR0 //STM8

void delay(unsigned int dl)
	{
	while (dl--);
	}

void main(void)
{
//setar o hw: vai ter que passar os olhos pelo datasheet
for(;;)
	{
	led^=1;
	delay(10000);
	}
}

Perceba que digitei em minutos. Agora fazer um pisca led pra cada um dos mc's citados em assembly de cada um provavelmente iria levar um pouco + de tempo. Por isso que digo que terias que se casar com o mc pra fazê-lo funcionar a contento em assembly.

Mas pra profissão (perigo) da engenharia reversa (vulgo hacker, cracker e afins) de fato hás de conhecer não só o assembly específico do produto bem como como o sistema funciona.

O que me fez lembrar...(não clique...😁)

Spoiler

A long time ago consegui a ajudar um compilador a sair do modo demo. Usei um disassembly proibidíssimo wdasm32 e um editor também proibido hiew32... Brunão pode apagar 😁

 

Link para o comentário
Compartilhar em outros sites

@aphawk Sem querer parecer chato fazendo varias perguntas, mas é possivel eu aprender assembly sem necessariamente programar para um microcontrolador? tipo rodar direto no meu pc como eu faco em C (e nessas linguagems de alto nivel) para crar programas e OS pelo menos pra eu aprender o "esqueleto do assembly" como ele funciona pra assim quando eu for programar um pic eu so ter que estudar sobre ele apenas? e pelo que voce disse eu teria  que aprender um assembly especifico da minha maquina, logo assembly nao seria muito portatil pois ele seria apenas para aquele hardware em específico, venho pesquisando sobre assembly desde que comecei a programar antes de aprender C mas toda vez que eu acho que eu to entendendo eu vejo que nao sei de nada como eu disse aprincípio eu quero saber so para isso, mas eu pretendo programar mc mais para frente sempre gostei dessa parte de hardware

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 hora atrás, .if disse:

Mas pra profissão (perigo) da engenharia reversa (vulgo hacker, cracker e afins) de fato hás de conhecer não só o assembly específico do produto bem como como o sistema funciona.

 

Esses termos são muito flexíveis. Não implicam em crime.

 

"Hack" pode ser apenas um estudo ou solução de inteligência destacável.

 

"Cracking" pode ser ofício de homens a serviço do Estado.

 

"Engenharia reversa" pode ser a minha mãe tentando reformular uma cadeira que o projeto original não presta.

 

@Patrick Marins de Souza

@.if

 

Leiam isto: Cultura Hacker – Uma verdade escondida

 

1 hora atrás, Patrick Marins de Souza disse:

venho pesquisando sobre assembly desde que comecei a programar antes de aprender C

 

E quando foi isso?

 

Suas perguntas não testemunham que foi assim. São perguntas de quem leu a palavra "assembly" hoje pela primeira vez.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
5 minutos atrás, Patrick Marins de Souza disse:

aprender assembly sem necessariamente programar para um microcontrolador? tipo rodar direto no meu pc

Permita responder pelo Paulão.

Sim amigo. É exatamente isso que faz o assembler do MPLAB p.ex. você roda na tela, ve registradores, portas e etc. Essa é uma das graças do assembly... além disso ele é de graça. A maioria dos mc's além do assembly vem com simuladores junto. Há também simuladores pagos como p.ex. proteus. Há versão demo (vá te reto) dele também.

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@Patrick Marins de Souza ,

 

Vou complementar a resposta acima :

 

Eu fiz vários programas tipo TSR ( Terminate and Stay Resident ) que rodavam em cima do DOS 2.0 em diante, todos em Assembly do 8086.

Eles interceptavam várias chamadas do BIOS do computador, e assim criava várias novas funções de teclas, sequências que faziam funções novas.

 

Claro que você pode simular um programa em Assembly em seu computador, basta achar o simulador para o microcontrolador  desejado.

 

Se você conseguir o Proteus, vai ter uma diversão enorme pois ele simula tanto o hardware como o software rodando !

 

Mas nada supera você usar um hardware de verdade ... a adrenalina é muito melhor !

 

Paulo

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...