Ir ao conteúdo

Posts recomendados

Postado

Não sei se essa é a melhor área do fórum para minha duvida, mas acho que poderão me ajudar aqui. Estou querendo usar assembly para fazer programas que rodem no meu notebook. Ele possui um processador AMD E1, e na internet não estou conseguindo achar por onde começar. Queria saber se alguém pode me ajudar a descobrir por onde começar. O máximo que consegui fazer foi criar um arquivo objeto de um código que achei na internet.
Obrigado.

Postado

Programas para Windows(PC) geralmente são escritos em Delphi,C++,java etc.

Escolha uma linguagem que se sinta mais a vontade e a estude a fundo.

Talvez você tenha encontrado,na internet,programas em Assembly 16 bits para PC,tipo o Debug,mas não tem validade como aplicativo,era mais usado para verificação no PC/Windows.

Postado

@pdanobre Já vi este sim. Seguindo esse não consegui criar o link do arquivo objeto. Apareceu os seguintes erros:

1: Error: Parser: instruction expected

2: Error: laberl or instruction expected at start of line

Imagino que esses números sejam as linhas dos erros. Mas como nunca fim um programa em assembly para processadores não sei onde errei. O código esta exatamente igual. se souber como me ajudar agradeço.

 

@vtrx Já programo em C e em java, mas essas linguagens tem funções "Lentas" para o programas que estou desenvolvendo. Então estou começando a estudar as de baixo nivel.

Postado
  Citação

 

@vtrx Já programo em C e em java, mas essas linguagens tem funções "Lentas" para o programas que estou desenvolvendo. Então estou começando a estudar as de baixo nivel.

Programei em ASM para Windows entre 2002 a 2006,dentre outras linguagens e acessava o Hardware em ASM.

Não vejo,hoje em dia,onde usar ASM no Windows,a menos que esteja programando um driver de dispositivo,mesmo assim em C ja seria suficiente.

o Java tem funções lentas,mas C não.

Poderia dar um exemplo mais preciso sobre o que pretende fazer?

Se for apenas para estudo,NASM ja é de bom tamanho,mas eu prefiro o flatassembler(FASMW),baixe a ultima versão(1.71.22).

  • Curtir 1
Postado

@Vicente Cesar,

Quando eu programei em Asm era para o Windows 3.1 ... Mesmo naquela época distante eu me lembro que as funções de I/O em disco escritas em C era muito eficientes e não compensou escrever em Asm para tentar melhorar ... Também não vejo em que conseguiria mais desempenho, pois existem tantas "amarras" hoje nas funções que eu imagino a dificuldade de escrever um programa em ASM que se comporte 100% dentro de todas as regras do S.O., a menos que seja um driver de dispositivo ( periférico ).

Paulo

Postado

@vtrx, em primeiro lugar estou programando em assembly para estudar mesmo, quero entender como uma linguagem de programação que conversa diretamente com o hardware funciona sendo que tem um sistema operacional dizendo o que você "pode ou não fazer".

Quanto aos programas que ficaram lentos, um exemplo, é um visualizador de imagem que eu fiz em C que escondia mensagens na imagem (Esteganografia). Depois ele jogava as imagens na tela para mim comparar se a distorção ficou muito grande. Só para imprimir a imagem na tela levava quase um minuto dependendo do tamanho da imagem. No caso eu lia os valores hexadecimais da imagem para fazer isso, não usava uma biblioteca que manipulava imagens daquele formato. Então comecei a estudar mais C e também assembly para ver o que poderia fazer.

Mas mesmo que tenha soluções mais simples ainda quero aprender mais sobre assembly no meu tempo livre.

Postado

Não, você não está "conversando diretamente com o hardware". O SO está fazendo muita coisa pra você. O único jeito de evitar isso é, claro, eliminar o SO da equação. Mas isso já é outra história e bem mais complicado.

A propósito, processadores mais novos - como o seu - possuem instruções que permitem processar conjuntos grandes de dados de forma consideravelmente mais eficiente. Consulte o manual de referência do seu processador, além de pesquisar sobre instruções SSE. Aqui seria bom o uso de asm (assembly) porque muitos compiladores não otimizam bem para SSE. Lembrando que, dependendo do compilador, você pode colocar elementos de asm no fonte em C.

  • 2 semanas depois...
Postado

@victhor393 Procurei sobre o que são as instruções SSE e MMX que são as que meu processador possui de acordo com umas paginas que encontrei na net, porém todos falam para procurar o manual do meu processador no site da AMD, mas não acho nada sobre o AMD E1-1500 APU. Meu problema estar em por onde começar.

@vtrx O link que você sitou não serve para meu processador mais vou dar uma olhada.

Postado

A AMD não publicou um manual de referência para esse processador (microarquitetura Bobcat/Family 14h). Mas as instruções SSE e MMX são as mesmas para todos os processadores, então se encontrar material de referência para SSE ou MMX é bem capaz que funcione.

Note que SSE é bem mais rápido que MMX.

Postado
  Citação

 

O link que você sitou não serve para meu processador mais vou dar uma olhada.

O set de instruções x86 é padrão,o que muda são algumas extensões próprias da AMD ou Intel.

Não existe Assembly x86 para AMD e X86 para Intel,x86 é x86

  • Curtir 1
Postado

@vtrx, entendi, é que sou muito iniciante na programação de baixo nível, mas vou tentar. Procurei a saber e descobri que meu Notebook é x64 e pelo que eu pesquisei isso significa 64 bits e x 86 32 bits. Então, eu poderia rodar instruções x86 em um processador x64 ?

@victhor393 Estarei tentando fazer um programa seguindo as dicas de você e ver se ele vai rodar dessa vez.

Postado

@Vicente Cesar,

 

Isso mesmo. Nada te impede de rodar as instruções de 32 em um processador de 64, mas ......  se o seu sistema operacional é de 64 bits, e voce vai escrever algo tipo um driver, o Windows tem muitas limitações para aceitar esse seu driver. Cansei de ver drivers de 32 bits serem recusados pelo Windows 64 bits, mas muitos drivers de 32 bits são aceitos, voce teria de pesquisar a estrutura recomendada para os drivers no ambiente Windows e sua compatibilidade entre X86 e X64.

 

Se voce vai fazer tudo funcionar sem um sistema operacional, aí já é outra história.... a menos que sua aplicação não precise ler nem escrever dados em algum tipo de mídia, voce vai ter de implementar algum tipo de FAT, e isso em assembly é algo meio complicado... eu tive de estudar isso em 1984 para alterar um sistema CP-M no Z80 para aceitar outros formatos de mídias que estavam surgindo, como disquetes de 360K, 720K e 1.44 Mb ( kkkkkkkkk essa é pros saudosistas... ), e demorei quase um mês para implementar as Fats alteradas, e olha que eu tava afiado naquela época.... Hoje tem FAT, FAT32, NTFS, sei lá mais o que ..... 

 

Paulo

 

Paulo

  • Curtir 1
  • 4 meses depois...
Postado

@aphawk, @vtrx, @victhor393.

Fiquei um bom tempo sem responder o tópico , mas neste tempo continuei o estudo da linguagem Assembly (Principalmente para rodar em um computador sem um sistema operacional). Porém acabei me deparando com um problema que espero que possam me ajudar. Eu programei um BootLoader para carregar um programa em C, ao invés de um em Assembly, porém descobri que precisaria de um Biblioteca Runtime, pois quando compilo um programa em C ou C++ no windows, o programa em C ou C++ tem fortes dependências com o windows, mesmo não usando nenhuma biblioteca. Queria saber se vocês saberiam como eu posso desenvolver programas em C sem nenhuma dependência com o windows. Também quero saber se seria mais difícil desenvolver esse tipo de programa em C ou C++. Agradeceria se dessem preferência a materiais que não são desenvolvidos com o Microsoft Visual C++, pois a sintaxe que ele usa sempre gera erros nos compiladores que uso, e não consigo resolver estes problemas.
Obrigado.

Postado

Seria interessante para você,aprender a programar no Linux,e fazer uma distribuição 'custom',assim você poderia compilar desde o kernel até os aplicativos.

Seria como se você tivesse programando seu próprio sistema operacional.

Para começar do zero e em assembly,você teria que estudar as rotinas e inicializações geradas pela BIOS de sua máquina.

  • Curtir 1
Postado

@vtrx,

 

Isso só vai mudar a dependência , do Windows para o Linux. Mas pelo menos seria o "Linux dele" kkkk !

 

Não existe uma linguagem real que seja ANSI C , realmente padronizada em qualquer ambiente ?

 

Paulo

Postado

@vtrx, eu já comecei estudar a BIOS e suas interrupções, e já fiz o carregamento do 'kernel' do sistema que eu programei em assembly. Ele está em modo de 32 Bits. O que quero mesmo é só integrar uma linguagem de alto nível no sistema. Estou procurando algo como o @aphawk falou, um C sem dependências do ambiente em tempo de execução. Ouvi falar em algo chamado "Crosscompiler", que é um compilador para gerar o código para uma plataforma diferente da que ele está, mas não consegui fazer funcionar ainda.

Obrigado.

Postado

Talvez encontre material em C no site da AMD.

 

 

  Citação

 

Não existe uma linguagem real que seja ANSI C , realmente padronizada em qualquer ambiente ?

 

Que eu saiba não.

Mas como citei,o Linux/Unix  compila vários módulos que dependem da API Unix/Linux,mas são módulos 'independentes'.

Um exemplo são os drivers.

Sabe aquele ditado de reinventar a roda?

Então,no final vai descobrir que aprendeu a programar um módulo Linux-like :)

Postado

Mas isso não importa, porque você aprendeu como um SO funciona e isso vai te ajudar muito a diagnosticar problemas de software em algum projeto seu mais complexo, além de poder melhor entender o que modificar em um SO já existente para te atender em algum sistema embarcado (drivers, por exemplo) em um projeto mais complexo. Pode não ser algo "viável" ou "melhor que algo já existente", mas será um ótimo aprendizado, e é isso que importa, porque trabalhar com coisas que outros já fizeram só te leva até certo ponto.

Se "reinventar a roda" fosse ruim não teríamos uma variedade de SOs, ou de software em geral, como temos hoje. Muitas vezes o melhor não é o primeiro a fazer algo...

 

Tem um SO escrito em asm com interface gráfica e tudo, MenuetOS, open source. Talvez poderia ser útil.

Postado

@victhor393,

 

Oba ... Bios de PC .... que saudades !!!!

 

Eu ainda tenho os livros originais da IBM sobre isso, eu tive de reescrever o Bios ( maldita SEI ) em 1986 para aprovar um projeto da empresa.... Depois de 8 meses de trabalho, reinventamos a roda toda, usamos os chips que eles falaram que tinha de usar ( panelinha ) e depois que fizemos tudo o que eles pediram, tive de escutar de um figurão de Brasília que o nosso projeto só receberia aprovação da SEI se usássemos a placa que era fabricada por duas empresas enormes aqui..... como podem ver, a roubalheira é bem antiga....

 

Tem um livro muito bom também, explica todas as interrupções do Bios e também do MS-DOS, tudo em assembly, é uma leitura muito legal, se precisar eu passo o nome dos livros que tenho.

 

Paulo

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!