Linguagem assembly: diferenças entre revisões
Conteúdo apagado Conteúdo adicionado
m Desfeita(s) uma ou mais edições de LF337 (Remoção de conteúdo válido e referenciado), com Reversão e avisos. |
Correção e melhoramento do conteúdo. |
||
Linha 1:
{{Ver desambig}}
'''''Assembly'''''(sigla '''ASM''') ou '''linguagem de montagem''' é uma [[linguagem de baixo nível]] que utiliza de [[mnemónico]]s como instruções<ref>[http://knol.google.com/k/assembly# Assembly - Knol]</ref>.
== Arquitetura ==
Cada instrução Assembly é montada em [[opcodes]] gerando um [[código de máquina]].
O processo de montagem é feito por um montador(ou ''Assembler''), que é o programa de computador responsável por montar o código Assembly em código de máquina.
Um exemplo de código montado para a arquitetura x8086.<br>
Assembly: <code>mov ah, 0Eh</code><br>
Código de máquina: <code>B4 0E</code>
Onde o opcode B4 é o responsável por atribuir um valor ao [[registrador (informática)|registrador]] AH.
Apesar de muitos pensarem em código de máquina como uma sequência de valores [[binário]]s, ele é comumente representado em valores [[hexadecimal|hexadecimais]].
Cada arquitetura de computador tem seu próprio código de máquina. Logo necessitará de um montador específico para sua [[arquitetura de computadores|arquitetura de computador]].
Apesar do resultado final ser o mesmo, existem diferenças entre os opcodes de cada arquitetura<ref>[http://www.ic.uff.br/~loques/orgcomp/cap7-assembler.pdf Linguagem de montagem - UFF]</ref>.
== Registradores ==
Os registradores são pequenas e rápidas áreas de memória utilizada para diversos fins.
Alguns desses registradores são utilizados para designar o locais da memória em que o processador vai executar ou pegar informações.
=== Registradores de segmento ===
Segmento é uma área da memória usada para armazenar instruções, dados ou usado pela [[pilha (informática)|pilha]]<ref>[http://www.fhenriques.uac.pt/AC/documentos/Memoria.pdf [PDF] Memória Segmentos.</ref>.
Os seguintes registradores são usados para designar estas área:
* CS - Code Segment, segmento de código em execução.
*
* SS - Stack Segment, segmento de pilha.
* ES - Extra Segment, segmento extra para armazenamento de dados.
=== Registradores ponteiros ===
Esses registradores são utilizados para indicar posições da memória de instruções e dados.
* BP - Base Pointer, indica o início da pilha.
* IP - Instruction Pointer, instrução atualmente executada.
* SP - Stack Pointer, posição atual da pilha.
* SI - Source Index, usado em operações com strings para apontar o índice da string fonte.
* DI - Destination Index, aponta o índice da string destino.
=== Registradores de dados ===
Usado de forma geral no programa, para várias operações. Embora possam ser utilizados em outras ocasiões, cada um desses registradores foram feitos para tarefas específicas.
* AX - Registrador Acumulador, usado para operações aritméticas.
* BX - Registrador de Base, usado para indexar endereços na memória.
* CX - Registrador Contador, usado para contagem usando a instrução de loop.
* DX - Registrador de Dados, usado para armazenar dados de forma geral. Seja para cálculos ou operações de [I/O].
Esses registradores na verdade são uma junção de dois registradores de 8bits, somando ao todo 16bits.
Eles são <code>AH, AL, BH, BL, CH, CL, DH, DL</code>.
Também existem versões de 32 e 64bits desses registradores. Onde eles são:
* 32 bits - '''EAX, EBX, ECX, EDX'''
* 64 bits - '''RAX, RBX, RCX, RDX'''
== Exemplos de código Assembly ==
Um exemplo de código [[Programa Olá Mundo|Olá Mundo]] feito para arquitetura x8086:
<syntaxhighlight LANG="asm">
lea si, string
call printf
hlt
string db "Ola mundo!", 0
printf PROC
mov AL, [SI]
cmp AL, 0
je pfend
mov AH, 0Eh
int 10h
inc SI
jmp printf
pfend:
ret
printf ENDP
</syntaxhighlight>
== Ver também ==
Linha 189 ⟶ 98:
[[Categoria:Linguagens de programação]]
[[Categoria:Software em linguagem de montagem]]
|