Montagem - Introdução
O que é linguagem Assembly?
Cada computador pessoal possui um microprocessador que gerencia as atividades aritméticas, lógicas e de controle do computador.
Cada família de processadores tem seu próprio conjunto de instruções para lidar com várias operações, como obter dados do teclado, exibir informações na tela e realizar vários outros trabalhos. Esse conjunto de instruções é chamado de 'instruções em linguagem de máquina'.
Um processador entende apenas instruções em linguagem de máquina, que são strings de 1 e 0. No entanto, a linguagem de máquina é muito obscura e complexa para ser usada no desenvolvimento de software. Portanto, a linguagem assembly de baixo nível é projetada para uma família específica de processadores que representa várias instruções em código simbólico e de uma forma mais compreensível.
Vantagens da linguagem assembly
Ter uma compreensão da linguagem assembly torna-o ciente de -
- Como os programas fazem interface com o SO, processador e BIOS;
- Como os dados são representados na memória e outros dispositivos externos;
- Como o processador acessa e executa a instrução;
- Como as instruções acessam e processam os dados;
- Como um programa acessa dispositivos externos.
Outras vantagens de usar a linguagem assembly são -
Requer menos memória e tempo de execução;
Ele permite trabalhos complexos específicos de hardware de uma maneira mais fácil;
É adequado para trabalhos urgentes;
É mais adequado para escrever rotinas de serviço de interrupção e outros programas residentes na memória.
Recursos básicos do hardware do PC
O hardware interno principal de um PC consiste em processador, memória e registros. Os registros são componentes do processador que armazenam dados e endereços. Para executar um programa, o sistema o copia do dispositivo externo para a memória interna. O processador executa as instruções do programa.
A unidade fundamental de armazenamento do computador é um pouco; pode ser ON (1) ou OFF (0) e um grupo de 8 bits relacionados cria um byte na maioria dos computadores modernos.
Portanto, o bit de paridade é usado para tornar ímpar o número de bits em um byte. Se a paridade for uniforme, o sistema assume que houve um erro de paridade (embora raro), que pode ter sido causado devido a falha de hardware ou distúrbio elétrico.
O processador suporta os seguintes tamanhos de dados -
- Word: um item de dados de 2 bytes
- Palavra dupla: um item de dados de 4 bytes (32 bits)
- Quadword: um item de dados de 8 bytes (64 bits)
- Parágrafo: uma área de 16 bytes (128 bits)
- Quilobyte: 1024 bytes
- Megabyte: 1.048.576 bytes
Sistema de número binário
Cada sistema numérico usa notação posicional, ou seja, cada posição em que um dígito é escrito tem um valor posicional diferente. Cada posição é a potência da base, que é 2 para o sistema numérico binário, e essas potências começam em 0 e aumentam em 1.
A tabela a seguir mostra os valores posicionais para um número binário de 8 bits, onde todos os bits são definidos como ON.
Valor de bit | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
Valor da posição como uma potência de base 2 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Número de bits | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
O valor de um número binário é baseado na presença de 1 bits e seu valor posicional. Portanto, o valor de um determinado número binário é -
1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255
que é o mesmo que 2 8 - 1.
Sistema numérico hexadecimal
O sistema numérico hexadecimal usa a base 16. Os dígitos neste sistema variam de 0 a 15. Por convenção, as letras de A a F são usadas para representar os dígitos hexadecimais correspondentes aos valores decimais de 10 a 15.
Os números hexadecimais na computação são usados para abreviar representações binárias extensas. Basicamente, o sistema numérico hexadecimal representa um dado binário dividindo cada byte pela metade e expressando o valor de cada meio byte. A tabela a seguir fornece os equivalentes decimais, binários e hexadecimais -
Número decimal | Representação binária | Representação hexadecimal |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | UMA |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
Para converter um número binário em seu equivalente hexadecimal, divida-o em grupos de 4 grupos consecutivos cada, começando da direita, e escreva esses grupos sobre os dígitos correspondentes do número hexadecimal.
Example - O número binário 1000 1100 1101 0001 é equivalente a hexadecimal - 8CD1
Para converter um número hexadecimal em binário, basta escrever cada dígito hexadecimal em seu equivalente binário de 4 dígitos.
Example - O número hexadecimal FAD8 é equivalente ao binário - 1111 1010 1101 1000
Aritmética Binária
A tabela a seguir ilustra quatro regras simples para adição binária -
(Eu) | (ii) | (iii) | (iv) |
---|---|---|---|
1 | |||
0 | 1 | 1 | 1 |
+0 | +0 | +1 | +1 |
= 0 | = 1 | = 10 | = 11 |
As regras (iii) e (iv) mostram um transporte de 1 bit para a próxima posição à esquerda.
Example
Decimal | Binário |
---|---|
60 | 00111100 |
+42 | 00101010 |
102 | 01100110 |
Um valor binário negativo é expresso em two's complement notation. De acordo com essa regra, converter um número binário em seu valor negativo é reverter seus valores de bit e adicionar 1 .
Example
Número 53 | 00110101 |
Inverta os bits | 11001010 |
Adicionar 1 | 0000000 1 |
Número -53 | 11001011 |
Para subtrair um valor de outro, converta o número que está sendo subtraído para o formato de complemento de dois e some os números .
Example
Subtraia 42 de 53
Número 53 | 00110101 |
Número 42 | 00101010 |
Inverta os bits de 42 | 11010101 |
Adicionar 1 | 0000000 1 |
Número -42 | 11010110 |
53 - 42 = 11 | 00001011 |
O estouro do último 1 bit é perdido.
Endereçando dados na memória
O processo pelo qual o processador controla a execução das instruções é referido como o fetch-decode-execute cycle ou o execution cycle. Consiste em três etapas contínuas -
- Buscando a instrução da memória
- Decodificando ou identificando a instrução
- Executando a instrução
O processador pode acessar um ou mais bytes de memória por vez. Vamos considerar um número hexadecimal 0725H. Este número exigirá dois bytes de memória. O byte de ordem superior ou byte mais significativo é 07 e o byte de ordem inferior é 25.
O processador armazena dados em sequência de byte reverso, ou seja, um byte de ordem inferior é armazenado em um endereço de memória baixa e um byte de ordem alta no endereço de memória alta. Portanto, se o processador traz o valor 0725H do registro para a memória, ele transferirá 25 primeiro para o endereço de memória inferior e 07 para o próximo endereço de memória.
x: endereço de memória
Quando o processador obtém os dados numéricos da memória para registrar, ele reverte novamente os bytes. Existem dois tipos de endereços de memória -
Endereço absoluto - uma referência direta do local específico.
Endereço do segmento (ou deslocamento) - endereço inicial de um segmento de memória com o valor do deslocamento.