Notas de estudo da linguagem de montagem 01 - conhecimento básico de montagem

introdução

A linguagem assembly é a linguagem de programação de nível mais baixo, além da linguagem de máquina. Como a máquina só pode ler 0 e 1, ela precisa ser convertida em uma linguagem que seja mais fácil de operar pelos humanos (na verdade, o design de linguagens de alto nível como c também inclui isso).

Ao mesmo tempo, a linguagem assembly também é uma ponte para muitas outras linguagens de alto nível para a máquina.Por exemplo, a linguagem C precisa ser escrita e então compilada em linguagem assembly e então convertida em linguagem de máquina.

Nesse caso, posso pensar naturalmente, posso usar alguns métodos de descompilação para quebrar um ou outro software (engenharia reversa)?

Na verdade, esse não é o caso. Apenas a linguagem de máquina e a linguagem assembly têm uma correspondência um a um, e as linguagens de alto nível provavelmente representam muitas operações em linguagem assembly em uma frase, então a direção para a frente é fácil e a direção reversa é fácil de cometer erros. Por exemplo, um programa escrito em linguagem C não pode ser quebrado diretamente pelo código-fonte. Neste momento, você precisa usar a linguagem assembly (favorita dos hackers)

Resumindo, como a montagem e as máquinas estão intimamente relacionadas, aprender a linguagem assembly nos permite entender melhor a operação do hardware e como fazer o hardware funcionar de maneira mais eficiente.

Este blog é baseado principalmente na quarta edição da linguagem assembly e tecnologia de interface, bem como na classe Little Turtle Net (endereço: fishc.com). Eu sou um júnior em ciência da computação e estou aprendendo a linguagem assembly pela primeira vez. As notas são adequadas apenas para iniciantes.

1.1 A produção de linguagem assembly

A linguagem de máquina é uma coleção de instruções de máquina;
o corpo principal da linguagem de montagem também são as instruções de montagem.

A diferença entre as duas instruções está na forma de expressão: em geral, as instruções de montagem são escritas em um formato que é fácil de lembrar com base nas instruções da máquina. Por definição, as instruções de montagem são chamadas de mnemônicos para instruções de máquina.

Aqui está um exemplo: Por exemplo,
o conteúdo de uma operação é: mover o conteúdo do registro AX para o registro BX.

Está escrito em linguagem de máquina assim: 1000100111011000

Você não entende? Em seguida, as instruções de montagem são formatadas e escritas em linguagem de montagem:
MOV BX, AX

O significado de mov é mover. Geralmente, três letras são usadas, o que é fácil de entender. É importante notar que este último será movido para a frente e a operação específica será discutida posteriormente.

registro

Acabamos de mencionar os registradores AX BX. O que são?

Simplificando, ele pode ser entendido como a memória na cpu (observe que ele é diferente do primeiro e do segundo cache). Existem vários registradores em uma cpu, como registradores de sinalizadores, registradores de dados e assim por diante.Cada um tem sua própria tarefa. No momento, só precisamos saber o que eles estão armazenando dados e instruções.
E AX e BX são temporariamente entendidos como o codinome do registro (assim disse a tartaruga)

1.2 A composição da linguagem assembly

A linguagem assembly é composta principalmente pelas seguintes três partes:

  1. As instruções de montagem (ou seja, mnemônicos em linguagem de máquina) também são o núcleo da linguagem de montagem . Por exemplo, MOV add, os operandos subsequentes também são colocados juntos.
    Primeiro coloque uma imagem do formato de instrução 8086, e você poderá entendê-lo lentamente.
    Insira a descrição da imagem aqui

  2. Pseudo instruções.
    As pseudo-instruções devem ser diferenciadas das instruções de montagem.As instruções de montagem podem produzir o código de máquina correspondente para a execução da máquina, mas as pseudo-instruções não. Elas são usadas principalmente para auxiliar na montagem de programas-fonte. Por exemplo, especifique o endereço de armazenamento de dados e assim por diante. Essas instruções não são reconhecidas pela máquina e são reconhecidas e executadas pelo compilador.
    Exemplos específicos podem se referir a este https://blog.csdn.net/houyichaochao/article/details/80686076

  3. Outros símbolos.
    Por exemplo, adição, subtração, multiplicação e divisão são iguais às pseudo-instruções, que exigem que o compilador as reconheça e execute.

1.3 Memória

A maioria dos componentes do computador tem sua própria memória. A principal coisa que aprendemos aqui é a memória .

A CPU é responsável por controlar a operação e o cálculo de todo o computador, mas não podemos colocar dados diretamente na CPU (porque são muitos e a CPU é muito cara), então geralmente escolhemos o armazenamento em disco rígido. Mas a CPU não consegue ler os dados diretamente do disco rígido.Neste momento, a memória é necessária .

A memória precisa armazenar instruções e dados que a CPU precisa para processar. As instruções significam dizer à CPU o que fazer e os dados dizem à CPU o que fazer.

Na memória ou no disco rígido, não há diferença entre dados e instruções, todos são códigos binários.
Por exemplo:
1000100111011000 -> 89D8H (dados)
1000100111011000 -> MOV AX, BX (instrução)
qual está realmente representado é artificial.

1.4 Unidade de armazenamento

A memória é dividida em várias unidades de armazenamento e cada unidade de armazenamento é numerada a partir de 0. Por exemplo, se uma memória possui 128 unidades de armazenamento, seus números são 0 ~ 127.

Uma unidade de armazenamento pode armazenar 1Byte. A memória de 1 KB tem 1024 células de memória de 0 a 1023.

1.5 CPU lê e grava no barramento de memória

Como dissemos antes, a própria CPU não armazena tantos dados, mas os obtém da memória. Existem três tipos principais de coisas que ela obtém:

  • Endereço da unidade de armazenamento (informações de endereço)
  • Seleção de dispositivo e comandos de leitura e gravação (informações de controle)
  • Ler e gravar dados (informações de dados)

Então, como exatamente essa informação é transmitida?

Todos nós devemos ter ouvido falar de sinais elétricos, da seguinte forma:

Pulso de nível

Os sinais que um computador eletrônico pode processar e transmitir são todos sinais elétricos, portanto, devem ser transmitidos por fios.

Se você já teve a experiência de instalar um computador sozinho, o mais impressionante deve ser o processo de plug-in (é muito problemático ...). Os fios que você conecta fazem parte do barramento .

O ônibus é logicamente dividido em:

  • Endereço de ônibus
  • Barramento de Dados
  • Ônibus de controle

Também corresponde aos três tipos de informação mencionados acima.

Imagem da lição Little Turtle Net

ler

Observe com atenção, na linha de endereço, a CPU envia para a memória o endereço do objeto de que precisa para operar, informando à memória que preciso de algo neste endereço.

ler
Então, na linha de controle, a CPU envia a informação de leitura da memória, informando que a operação que eu preciso fazer agora é lida.

ler

Então a memória sabe o que precisa fazer e passa os dados com o número de endereço 3 para a CPU.

Já a instrução de escrita é igual à leitura, exceto que os dados são da CPU para a memória.
escrever

Você se lembra do que mencionei acima, dizendo que as instruções e os dados na memória não podem ser distinguidos.Dois códigos de máquina idênticos podem representar uma operação ou uma sequência de dados. Naquela época, dizíamos apenas que podemos identificar artificialmente o que ela representa, mas agora sabemos qual linha ela representa e qual categoria ela representa.

Se você viu um chip da CPU, deve ter visto os pinos amarelos (também pinos cruzados), que estão conectados ao barramento. Também pode-se dizer que esses pinos levam ao barramento.

A largura dos três barramentos que uma CPU pode desenhar representa seu desempenho em três aspectos:

  • A largura do barramento de endereço determina a capacidade de endereçamento da CPU
  • A largura do barramento de dados determina a quantidade de dados transferidos de uma vez
  • A largura do barramento de controle determina sua capacidade de controlar outros componentes

1.5.1 Barramento de endereços

Pela figura acima, podemos saber que o barramento de endereços é uma linha usada para transmitir endereços, aqui falamos um pouco mais.

Todos vocês devem saber que os computadores de hoje são geralmente de 64 ou 32 bits, mas isso pode ser entendido como um conceito dual, ou seja, o número de bits do sistema operacional e o número de bits da CPU. Os dois estão relacionados. Simplificando, se a CPU for de 64 bits e o sistema operacional for inferior, o desempenho da CPU não pode ser totalmente utilizado.

Para este parâmetro da CPU, ele representa a capacidade de endereçamento. Por exemplo, um processador de 64 bits pode endereçar 2 a 64 endereços. Em teoria, há um fio por linha de endereço, então parece que há 64 em processadores de 64 bits, mas na realidade pode não ser.

Para ser mais preciso, se uma CPU tem N linhas de endereço, pode-se dizer que a largura do barramento de endereço dessa CPU é N, e ela pode procurar 2 elevado a enésima potência das unidades de memória. Quantas informações diferentes podem ser transmitidas no barramento de endereço , a CPU pode endereçar quantas células de memória.

1.5.2 Barramento de Dados

O barramento de dados também possui uma largura, que determina a velocidade de transmissão dos dados.

Assim como uma rodovia, quanto mais larga a rodovia, mais carros serão dirigidos por unidade de tempo (porque a velocidade é a mesma, parece ser chamada de frequência de oscilação).

Também pode ser entendido em termos de dígitos.

Como o processador 8086, é um barramento de dados de 16 bits.
Se quisermos transmitir alguns dados, seu código binário é 1101100010001001 exatamente 16 bits, podemos transmitir tudo de uma vez:

8086

Se for um processador 8088, por se tratar de uma CPU de 8 bits, é necessário passar duas vezes. A atenção vai de baixo para cima.

Este é também o motivo pelo qual a velocidade de cálculo é mais rápida quando o número de bits aumenta. Pense na CPU de 64 bits atual

1.5.3 Barramento de Controle

O barramento de controle é um termo geral para linhas de controle, que são usadas principalmente pela CPU para controlar outros dispositivos.

Portanto, quantas linhas de controle existem significa quantos tipos de controle a CPU pode controlar outros dispositivos.

O que você precisa saber é que os comandos de leitura e escrita mencionados anteriormente são emitidos por várias linhas de controle.Os materiais de ensino específicos não parecem exigir domínio, então não os repetirei.


No final deste capítulo, observe que o conteúdo acima é todo teórico e não discutirá a situação real.

Acho que você gosta

Origin blog.csdn.net/qq_44899247/article/details/108737468
Recomendado
Clasificación