Assembly, o básico

12 Junho 2009

Assembly é um linguagem da programação, estritamente relacionada com a arquitetura do computador, nesse artigo falarei sobre arquitetura CISC da intel em 16 e 32 bits, a maioria dos programas escritor para a arquitetura intel devem funcionar em AMDs.

A grande vantagem dessa linguagem de programação esta no controle que ela oferece sobre a máquina, a velocidade e o tamanho final do programa. Porem mesmo com todas essas vantagem ela é de forma alguma recomendada para ser usada em projetos grandes por causa do número grande de variavés ( muito mais além do espaço de memoria alocado) que tem que se manter controle, o que torna o desnvolvimento estremamente lerdo e penoso, porem eu acho extremamente interessante compreender o funcionamento de algo baixo nivel o que traz uma base sobre o que realmente acontece nos programas.

O primeiro fato a ser mencionado é a diferença entre as notação disponibilizadas, vou chama-las de notação da intel e notação da AT&T, mas qual seria essa diferença? bem as mnemônicas são basicamente identicas – podendo ter alguma variação dependendo do compilador – mas a grande diferença esta em como é determiado a origem e o destino dos dados, a arquitetura da intel segue esse padrão “mnemonico destino origem” já a notação da AT&T faz o oposto “mnemonico origem destino”, como base desse artigo vou usar o nasm – network assembler – que usa a notação da intel.

O segundo fato a ser mencionado são o registradores da cpu, eles são pequenos espaços de memória usados para fazer as operações matemáticas, para um processador 32 bits da intel nós temos os registradores mais importantes: eax(extended accumulator), ebx(extended base), ecx(exetended counter), edx(extended data), ebp(extende base pointer), esp(extented source pointer) esi(source index, edi(destination index)) para 16 bits temos, ah al(accumulator high/low), bh bl, ch cl, dh dl,  além dos registradores de 8 bits e nos processadores modernos 64 bits.

Tem que se ter em mente que os registradores compartilham o espaço, ou seja, a parte ‘baixa’ do eax, é na verdade ah e al, de tal foram que se você modificar ah ou al eax também vai ser alterado:

[----------------[---ah---|---al---]]eax

Isso é verdade para os registradores ‘a’, ‘b’, ‘c’ e ‘d’, lembre-se que os registradores de 8 bits também estão dentro dos de 16 bit e os de 32 bit estão dentro dos de 64 bits.

Terceiro fato, a estrutura de um arquivo de código em assembly:

label: mnemonico [valor1(destino)] [valor2(orgiem)] ;comentário

nenhuma parte é obrigatoria, de forma que você pode ter apenas uma label na linha, ou um mnemonico com seus argumentos, ou um comentário, ou todos juntos. Importante notar que nem sempre vão ser dois argumentos para o mnemonico, podendo ter 0, 1, 2 ou mais em instruções mais especificas.

Quarto fato, mnemonicos são nomes dados a instruções do processador, e em muitos casos são fáceis de se compreender, como `MOV eax, ecx` que move o conteúdo de ecx para eax na notação da intel `ADD` `SUB` `MUL` são outros exemplos, outro fato sobre os mnemonicos é que eles não são case-senstive, então `MOV` e `mov` são equivalentes, a lista dos mnemonicos é extensa, para uma listagem completa

Entry Filed under: assembly. .

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


 

Junho 2009
S T Q Q S S D
« Mai    
1234567
891011121314
15161718192021
22232425262728
2930  

Principais mensagens

Tópicos recentes

Feeds