quinta-feira, 4 de dezembro de 2014

Assembly

Assembly ou linguagem de montagem é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa, utilizada para programar dispositivos computacionais, como microprocessadores e microcontroladores. A linguagem de máquina, que é um mero padrão de bits, torna-se legível pela substituição dos valores em bruto por símbolos chamados mnemónicos (palavras reservadas da linguagem). Enquanto um computador sabe o que a instrução - máquina IA-21 (10110000 01100001) faz, para os programadores é mais fácil recordar a representação equivalente em instruções mnemónicas MOV AL, 61h. Tal instrução ordena que o valor hexadecimal 61 (97, em decimal) seja movido para o registrador 'AL'.

Cada arquitetura de computador tem a sua própria linguagem de máquina e, portanto, a sua própria linguagem de montagem. Essas linguagens de montagem diferem no número e tipo de operações que suportam. Também têm diferentes tamanhos e números de registradores, e diferentes representações dos tipos de dados armazenados. Enquanto todos os computadores de utilização genérica são capazes de desempenhar essencialmente as mesmas funções, o modo como o fazem é diferente.

 A seguir temos alguns exemplos de códigos utilizando a linguagem montadora assembly do 8086. A sintaxe dessa linguagem não é case sensitive (não diferencia letras maiúsculas de minúsculas). Portanto para facilitar a compreensão do texto do código sugere-se uso de letras MAIÚSCULAS para o código e minúsculas para comentários que iniciam com ponto e vírgula (;):
____________________________________________________________________
MOV AX,WORD1         ;movimenta o conteúdo da posição de memória WORD1
                                          ;para o registrador AX
 ___________________________________________________________________

Esse é um exemplo simples de comando em Assembly 8086. O mnemónico MOV, permite movimentar valores. No exemplo, o conteúdo da posição na memória WORD1 foi movido para o registrador AX.

Outro exemplo usando  mnemónico MOV:
____________________________________________________________
MOV AH,’A’                         ;transfere o caracter ASCII ‘A’ para AH
 ___________________________________________________________________


Abaixo teremos um programa completo e bem simples: a versão Assembly 8086 do famoso "Hello World":
__________________________________________________________
.MODEL SMALL
.STACK 100H
.DATA
Str1 db “HELLO WORLD”,13,10,’$’
.CODE

;atualiza o DS com o segmento que guarda STR1
    MOV AX,SEG Str1
    MOV DS, AX

;chama a INT 21 para printar a str na tela
    MOV DX, OFFSET Str1
    MOV AH, 09
    INT 21H


;encerra o programa
    MOV AX, 4c00H
    INT 21 H
END

_________________________________________________________