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.