código de máquina que uma arquitetura de computador específica usa. 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.
Assembly ou linguagem de montagem é uma notação legível por humanos para o
Por exemplo, 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'.Arquitetura
Ao contrário do que acontece nas linguagens de alto nível,
existe (até certo ponto) uma correspondência de 1 para 1 entre a
linguagem de montagem simples e a linguagem de máquina. Por isso a
tradução do código de montagem em código de máquina não é chamada compilação, mas montagem. Consegue-se transformar a linguagem de montagem em linguagem de máquina recorrendo a um montador (também chamado assembler, originado do termo asemblé em francês), e a transformação inversa faz-se recorrendo a um desmontador (também chamado disassembler).
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 registos, 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.
Além disso, podem existir conjuntos múltiplos de mnemónicas, ou
sintaxes de linguagem de montagem, para um único conjunto de instruções.
Nestes casos, o conjunto mais popular é aquele que é utilizado pelo
fabricante na sua documentação.
A maioria dos processadores
só consegue manipular os dados que estão em registradores e a linguagem
de montagem facilita o trabalho direto com os registradores.
No mercado de PCs, dominado por processadores Intel e AMD, atualmente existem duas arquiteturas. Primeiro a IA32 (genericamente chamada de i386, x86 ou x86-32), criada pela Intel em 1985 e primeiramente utilizada pelo processadores i386 e segundo a IA32-EM64T (ou IA32-AMD64 ) criada em 2002 pela AMD (Mas também utilizada pela Intel hoje). O IA32 utiliza o grupo de instruções chamado x86, e o IA32-EM64T utiliza o grupo chamado x86-64. As duas arquiteturas usam números diferentes de registradores gerais e tamanho. Enquanto os registradores do x86 são 32 bits os da x86-64 são 64 bits.
Os registradores de uso geral da arquitetura x86 são:
- %EAX - registrador acumulador
- %EBX - registrador base
- %ECX - registrador contador
- %EDX - registrador de dados
- %ESI - registrador de índice da fonte dos dados
- %EDI - registrador de índice do destino dos dados
- %EBP - registrador ponteiro para a moldura de chamada de função
- %ESP - registrador ponteiro para a pilha de execução
- %RAX - registrador valor de retorno
- %RBX - registrador base
- %RCX - registrador contador
- %RDX - registrador de dados
- %RSI - registrador de índice da fonte dos dados
- %RDI - registrador de índice do destino dos dados
- %RBP - registrador ponteiro para a moldura de chamada de função
- %RSP - registrador ponteiro para a pilha de execução
- %R8 - registrador de dados
- %R9 - registrador de dados
- %R10 - registrador ponteiro para a moldura de chamada de função
- %R11 - registrador de linking
- %R12 - registrador de base
- %R13 - registrador de base
- %R14 - registrador de base
- %R15 - registrador de base
Esses nomes derivam da forma como eram utilizados nas arquiteturas anteriores a IA32 (8086, 80286…), em que cada registrador desempenhava um papel específico. Na arquitetura i386, todos eles são de uso geral, embora eles continuem a poder ser utilizados em seus papéis tradicionais.
A arquitetura IA32 ainda apresenta os registradores de segmento CS, DS, ES, SS, FS e GS, um contador de programa EIP, um registro de sinalizadores EFLAGS, 8 registradores de vírgula flutuante e seus sinalizadores associados. Existem também registradores utilizados pelo sistema operacional para controle da execução em modo protegido, bem como outros registradores de uso específico (depuração, controle de desempenho, etc.).
- Instruções Aritméticas
- Adição: ADD, ADC, INC, XADD, AAA e DAA;
- Subtracção: SUB, SBB, DEC, AAS e DAS;
- Multiplicação: MUL, IMUL e AAM;
- Divisão: DIV, IDIV e AAD.
Exemplos de código de montagem
Arquitetura Intel
Decimal Endereço OPcode Operandos
2089872304 7C90EBB0 sub esp, 2D0h
2089872310 7C90EBB6 mov dword ptr [ebp+FFFFFDDCh], eax
2089872316 7C90EBBC mov dword ptr [ebp+FFFFFDD8h], ecx
2089872322 7C90EBC2 mov eax, dword ptr [ebp+8]
2089872325 7C90EBC5 mov ecx, dword ptr [ebp+4]
2089872328 7C90EBC8 mov dword ptr [eax+0Ch], ecx
2089872331 7C90EBCB lea eax, [ebp+FFFFFD2Ch]
2089872337 7C90EBD1 mov dword ptr [eax+000000B8h], ecx
2089872343 7C90EBD7 mov dword ptr [eax+000000A4h], ebx
2089872349 7C90EBDD mov dword ptr [eax+000000A8h], edx
2089872355 7C90EBE3 mov dword ptr [eax+000000A0h], esi
2089872361 7C90EBE9 mov dword ptr [eax+0000009Ch], edi
2089872367 7C90EBEF lea ecx, [ebp+0Ch]
2089872370 7C90EBF2 mov dword ptr [eax+000000C4h], ecx
2089872376 7C90EBF8 mov ecx, dword ptr [ebp]
2089872379 7C90EBFB mov dword ptr [eax+000000B4h], ecx
2089872385 7C90EC01 mov ecx, dword ptr [ebp-4]
2089872388 7C90EC04 mov dword ptr [eax+000000C0h], ecx
2089872394 7C90EC0A mov word ptr [eax+000000BCh], cs
2089872400 7C90EC10 mov word ptr [eax+00000098h], ds
2089872406 7C90EC16 mov word ptr [eax+00000094h], es
2089872412 7C90EC1C mov word ptr [eax+00000090h], fs
2089872418 7C90EC22 mov word ptr [eax+0000008Ch], gs
2089872424 7C90EC28 mov word ptr [eax+000000C8h], ss
2089872430 7C90EC2E mov dword ptr [eax], 10007h
2089872436 7C90EC34 push 1
2089872438 7C90EC36 push eax
2089872439 7C90EC37 push dword ptr [ebp+8]
2089872442 7C90EC3A call 7C90E252
2089872447 7C90EC3F sub esp, 20h
2089872450 7C90EC42 mov dword ptr [esp], eax
2089872453 7C90EC45 mov dword ptr [esp+4], 1
2089872461 7C90EC4D mov dword ptr [esp+10h], 0
2089872469 7C90EC55 mov eax, dword ptr [ebp+8]
2089872472 7C90EC58 mov dword ptr [esp+8], eax
2089872476 7C90EC5C mov eax, esp
2089872478 7C90EC5E push eax
2089872479 7C90EC5F call 7C90EBAC
Microprocessador Texas Instruments TMS320C2x
LOOP:
LARP AR1
LRLK AR1, apontador
ADRK TAMANHO_CONSTANTE
ADRK fimcon_rx
LAC *
BZ NAOPASSARAM10MS
ZAC
SACL *
LARP AR1
LRLK AR1,apontador+CONSTANTE_A
ADRK controle
LAC *
BZ LOOP ;Não decorrido tempo: fica no loop
NAOPASSARAM10MS:
SACL *
LARP AR1
B LOOP
Microprocessador Texas Instruments TMS320C5x
LOOP:
mvmm ar1, ar3 ;move conteúdo de ar1 para ar3
rpt #10 ;repete
mvdd *ar3+, *ar5+ ;move word endereçada por ar1 para pos. end. por ar6
;Instruçoes com acumulador:
STM #1000h, AR1 ;carrega ar1 com a constante 1000h
LD #0, A ;zera o acumulador
STL A, *AR1 ;armazena no acumulador mínimo
LD #1, A ;carrega o acumulador com a constante mínima "1"
STL A, *AR1 ;armazena o acumulador mínimo no endereço de ar1
LD #65535, A ;carrega acumulador com a constante "65535"
STL A, 10 ;armazena o acumulador mínimo no endereço 10
STH A, 10 ;armazena o acumulador máximo no endereço 10
STL A, *AR1 ;armazena o acumulador mínimo no endereço de ar1
STH A, *AR1 ;armazena o acumulador máximo no endereço de ar1
;Instruções com registradores auxiliares:
STM #1, AR1 ;carrega ar1 com a constante "1"
STM #2, AR0 ;carrega ar0 com a constante "2"
MAR *AR1+0 ;adiciona o conteúdo de ar0 to ar appointed by arp (1)
MVDK 256, *(AR2) ;carrega ar2 with content of address 256
MAR *AR1+ ;incrementa ar apontado por arp (1)
MVKD *(AR2), 256 ;aloja conteúdo de ar2 no endereço 256
MAR *AR1- ;decrementa ar appointed by arp (1)
;Instruções de teste de bit:
BITF *AR1, #128 ;TESTA BIT D7
BC ptr, NTC ;vai para ptr se bit for igual a 0
MAR *AR1+ ;incrementa ar apontado por arp (1)
ptr:
MAR *+AR4(-128) ;sbrk 80h
;Instruções de uso de ponteiros:
mvdm *(VETORAL), ar1 ;move conteúdo da memória apontada para o ar (transforma arn em ponteiro)
mvmd ar1, *(VETORAL) ;mvmd restaura ponteiro(VETORAL) de acordo com arn
b LOOP
0 comentários:
Postar um comentário