Alguem possui boas apostilas para aprendizado da Linguagem Assembly, ou video aulas,
Onde aprender a programar em Assembly?
Alguem possui boas apostilas para aprendizado da Linguagem Assembly, ou video aulas,
Onde aprender a programar em Assembly?
Masoquismo?
Procure livros de eletrônica digital, e do assembly do 8086. Talvez se procurar por Turbo Assembly (TASM), você também ache material.
Não é masoquismo! Minha idéia ter melhor conhecimento sobre operações com linguagem de baixo nível pois é assim que posso ler os programas que estão rodando em memória RAN, uma pessoa com esses conhecimentos é capaz de operar da forma mais específica possível, além de possuir total controle sobre o computador.
Para fazer alteração em programas é necessário conhecer bem linguagem de baixo nível
Está afim de fazer cracking?
Bem, uma linguagem de mais baixo nível que te dará um bom conhecimento sobre o funcionamento da máquina é o C. Hoje em dia, são pouquíssimos os casos onde não se usa C no lugar de assembly, mesmo no desenvolvimento de hardware. Fora que você poderá brincar com diversas bibliotecas interessantes, como o CUDA, da NVidia.
é uma boa mais quero ter um básico conhecimento de Assembly
Tenho um 3 tutos de Assembly, mais são horríveis, queria uma esplicação melhor sobre a definição de Registradores, como é essa localização em cordenadas de bytes
Olá
Localização, arquitetura e número de registradores tem mais a ver com o processador. Você precisa procurar por livros que abordam o PC e vai achar com mais facilidade para os processadores antigos como o 8086.
O Google em http://www.google.com.br/search?hl=pt-BR&q=8086+programming me indicou este link: http://www.pdf-search-engine.com/assembly-8086-pdf.html
Sobre assembler para PC há alguns excelente livros clássicos tais como:
Advanced M. S.-DOS Programming
MS-DOS Encyclopedia ou http://www.torrentreactor.net/find/ms-dos-encyclopedia
Ainda há um tutorial básico de assembler em http://www.xs4all.nl/~smit/asm01001.htm
Os processadores mais novos tem diferenças nos registradores. Há outros. Mas se entender os básicos fica fácil entender os mais avançados.
PORÉM…
É como o Vini falou. Não se usa mais assembler. Virou um conhecimento inútil. Eu, que já programei muito em assembler, garanto a você que aprender assembler é perda de tempo a menos que vá programar micro controladores. Mesmo o Daniel Quadros http://dqsoft.blogspot.com/ que já escreveu vários livros de assembler usa mais. Os “novos” sistemas operacionais não permitem acesso direto aos registradores sem um monte de trabalho para obter permissão (novos entre aspas porque isto já é assim desde o Windows NT).
Conhecer assembler a fundo não dá melhor conhecimento sobre como um programa é processado porque atualmente uma única linha de Java pode significar milhares de linhas de assembler. Mas se quer conhecer só o básico, então leia o PDF em http://www.csi.ucd.ie/staff/jcarthy/home/alp/alp1.pdf
[]s
Luca
OláLocalização, arquitetura e número de registradores tem mais a ver com o processador. Você precisa procurar por livros que abordam o PC e vai achar com mais facilidade para os processadores antigos como o 8086.
O Google em http://www.google.com.br/search?hl=pt-BR&q=8086+programming me indicou este link: http://www.pdf-search-engine.com/assembly-8086-pdf.html
Sobre assembler para PC há alguns excelente livros clássicos tais como:
Advanced M. S.-DOS Programming
MS-DOS Encyclopedia ou http://www.torrentreactor.net/find/ms-dos-encyclopedia
Ainda há um tutorial básico de assembler em http://www.xs4all.nl/~smit/asm01001.htm
Os processadores mais novos tem diferenças nos registradores. Há outros. Mas se entender os básicos fica fácil entender os mais avançados.
PORÉM…
É como o Vini falou. Não se usa mais assembler. Virou um conhecimento inútil. Eu, que já programei muito em assembler, garanto a você que aprender assembler é perda de tempo a menos que vá programar micro controladores. Mesmo o Daniel Quadros http://dqsoft.blogspot.com/ que já escreveu vários livros de assembler usa mais. Os “novos” sistemas operacionais não permitem acesso direto aos registradores sem um monte de trabalho para obter permissão (novos entre aspas porque isto já é assim desde o Windows NT).
Conhecer assembler a fundo não dá melhor conhecimento sobre como um programa é processado porque atualmente uma única linha de Java pode significar milhares de linhas de assembler. Mas se quer conhecer só o básico, então leia o PDF em http://www.csi.ucd.ie/staff/jcarthy/home/alp/alp1.pdf
[]s
Luca
Vou discordar quanto ao conhecimento inútil. Muitos microcontroladores ainda são programados em assembly, e, para otimização, usar assembly inline em pascal ou c também.
A sintaxe at&t é mais usada em sistemas unix, em conjunto com gcc.
http://sig9.com/articles/att-syntax.
Assembly não é linguagem de programação.
Este livro é muito bom, e é de graça. Pode te dar uma idéia de como usar asm:
http://webster.cs.ucr.edu/AoA/DOS/pdf/0_AoAPDF.html
Detalhe, é inviável utilizar somente assembly. Um intel pentium possui milhares de instruções, então o fato de usar inline ser muito importante.
puxe o microcontrole simulator… e uma ferramenta didatica para auxiliar no aprendizado de assembly…
só depois que vc tiver bem fera no microcontroler simulator passe para o assembly de verdade senão vc vai se bater bastante se começar a estuda-lo direto…
aqui vc puxa o microcrontroler simulator:
http://www.samphire.demon.co.uk/
o help e os exemplos deste são muito bons… procure ver os exemplos e fazer algo parecido de sua maneira…
o bom e vc pegar bem as operações basicas e como trabalhar de forma correta com a memoria e com os registradores…
dai sim passar pro assembly de verdade…
Uma coisa interessante para aprender um pouco de Assembly é tentar entender uma listagem gerada pelo compilador C (o C++ é mais distante da máquina e o compilador gera código muito mais obscuro).
Você vai ver que o compilador aparenta ser mais estúpido que um programador Assembly normal, se você não usar as opções de otimização (principalmente se você usar um compilador antigo e ingênuo como o do Microsoft Visual C++ 6.0).
Mas se você ligar as opções de compilação no máximo, não vai entender quase nada, porque ele começa a usar técnicas complexas de alocação de registros e começa a provar que certas áreas do código nunca serão usadas, portanto nem as compila, ou então gera código equivalente em termos de resultados.
int j = 0;
for (int i = 0; i < 100; ++i) {
j++;
}
O compilador C, se usarmos as opções de compilação adequadas, transforma o código acima para algo semelhante a:
j = 100;
eu utilizei o compilador picc por muito tempo escrevendo programas para o PIC 18F452.
Vou discordar quanto ao conhecimento inútil. Muitos microcontroladores ainda são programados em assembly, e, para otimização, usar assembly inline em pascal ou c também.
Vou discordar quanto ao conhecimento inútil. Muitos microcontroladores ainda são programados em assembly, e, para otimização, usar assembly inline em pascal ou c também.
isso de otimização é lenda. para gerar o código assembly, o próprio compilador c faz estratégias, e avalia as melhores hipóteses. compiladores fazem esse trabalho duro melhor do que pessoas.
Não faz não. O melhor exemplo disso é a função da própria api do windows memcpy. Conseguimos reproduzir uma, duas vezes mais rápida com assembler, no delphi.
Essa função foi escrita inline, no delphi. Conseguiu suprir problemas de performance nesse produto.
http://www.planetapc.com.br/index.asp?secao=2&categoria=15&subcategoria=0&id=403
Vou discordar quanto ao conhecimento inútil. Muitos microcontroladores ainda são programados em assembly, e, para otimização, usar assembly inline em pascal ou c também.
isso de otimização é lenda. para gerar o código assembly, o próprio compilador c faz estratégias, e avalia as melhores hipóteses. compiladores fazem esse trabalho duro melhor do que pessoas.Não faz não. O melhor exemplo disso é a função da própria api do windows memcpy. Conseguimos reproduzir uma, duas vezes mais rápida com assembler, no delphi.

Na Siemens também comprovamos que é possível e mais fácil gerar código otimizado em C do que em assembly. E geralmente, o compilador é muito mais eficiente e disciplinado do que um bom programador.
Claro que exige bastante conhecimento do compilador e a criação de um manual de “boas práticas”, além de sempre trabalhar com as otimizações ligadas.
Na Siemens também comprovamos que é possível e mais fácil gerar código otimizado em C do que em assembly. E geralmente, o compilador é muito mais eficiente e disciplinado do que um bom programador.Claro que exige bastante conhecimento do compilador e a criação de um manual de “boas práticas”, além de sempre trabalhar com as otimizações ligadas.
Mas e se a api do windows não suprir o que você precisa?
Essa função é mais rápida que a da própria api do windows.
Eu não gosto de codificar em assmbly, mas algumas vezes não temos escolha.
function FastAllocMem(ASize: Cardinal): Pointer;
asm
push ebx
lea ebx, [eax - 1]
and ebx, -4
call FastGetMem
cmp eax, 1
sbb ecx, ecx
lea edx, [eax + ebx]
or ebx, ecx
cmp ebx, MaximumMediumBlockSize - BlockHeaderSize
jae @Done
neg ebx
fldz
@FillLoop:
fst qword ptr [edx + ebx]
add ebx, 8
js @FillLoop
mov [edx], ecx
ffree st(0)
@Done:
pop ebx
db $f3
end;
Hum… você está usando “fst” que usa o coprocessador aritmético, que por si só é muito lento (mesmo a JVM evita usar o coprocessador e usa, em seu lugar, as instruções SSE2 / SSE3 se for fazer contas com double.
Se for adequar seu código para um processador mais moderno (64 bits), use rep stosq.
É, talvez para pequenas otimizações assim deva valer a pena. Para software no geral, como era o caso dos softwares do telefone, não valia. Até pq nenhum programador consegue manter disciplina sempre. Fora que lá tinhamos bastante controle do hardware pela API do telefone.
Hum… você está usando “fst” que usa o coprocessador aritmético, que por si só é muito lento (mesmo a JVM evita usar o coprocessador e usa, em seu lugar, as instruções SSE2 / SSE3 se for fazer contas com double.
Se for adequar seu código para um processador mais moderno (64 bits), use rep stosq.
Se a jvm usa sse2, então vê-se que é necessário fazer assembly inline em partes críticas. Esse código postado acima tem uns 10 anos, e funciona bem até hoje.
Olá
Só para esclarecer: já programei muito em assembler. E vários assemblers diferentes desde o IBM 1130, IBM /360, /370, mod. 30, mod. 50, 4341 e PCs. Ah, já programei também direto em linguagem de máquina em várias computadores diferentes.
Continuo com a mesma opinião que escrevi e alguns não leram: assembler só para micro controladores.
Já otimizei sistemas usando assembler inclusive para aproveitar as instruções de 80 bits do coprocessador aritmético. Hoje em dia isto não tem mais nenhum sentido.
Troco tudo que sei de Assembler por qualquer 10 mil réis.
[]s
Luca
para casos em uso de microcontroladores, utilizar assembly me pareceu mais eficaz, mas na maioria das vezes utilizava pelo editor a conversão de código escrito em c para assembly, posteriormente checando como foi a lanbança de conversão.
é preciso ter muito saco para ver todas aquelas intruções em assembly. não podíamos fazer tudo em c, por questões do tamanho da memória do microcontrolador.
postei um tópico tempão atrás aqui no guj, onde estava implementando c com assembly para microcontrolador 8051. utilizei o proteus neste projeto para antecipar algumas simulações, ambiente de comunicação e testes, antes da efetuar fabricação da placa. me ajudou a economizar e antecipar compra de peças não planejadas!
havia também, um outro conversor bem melhor, mas se lembrar, posto aqui!
o assembly inline realmente é muito útil e simples de usar. É muito difícil, haver situações onde se precisa fazer isso, mas as vezes é a única carta que possuimos.
Um exemplo, é que a maioria dos compiladores não suportam instruções mmx. Salvo o freepascal, e alguns c++. Como boa parte dos nossos softwares são delphi, nos deparamos com esse problema. A solução foi utilizar mmx diretamente em assembly, e pudemos somar duas matrizes(imagens digitais) assim:
C=A+B;
Curso em Portugues, Assembly para PC
8086 para DOS/Windows