Montador de linguagens de programação de baixo nível. Quando foi o montador (montador) e a linguagem da máquina? Identificadores, inteiros, símbolos, comentários, equivalência

Linguagem de programação

O Assembler é uma linguagem de programação de baixo nível, que é um formato para registrar comandos da máquina, conveniente para a percepção humana.

Os comandos da linguagem montadora são um em um em um deles correspondem às equipes do processador e, de fato, são uma forma simbólica conveniente de gravação (mnemokode) de comandos e seus argumentos. Além disso, a linguagem montadora fornece abstrações básicas de software: vinculando as partes do programa e dados após tags com nomes e diretiva simbólicos.

Directivas montador permitem incluir blocos de dados no programa (descrito explicitamente ou ler do arquivo); Repita um certo fragmento do número especificado de vezes; Compile um fragmento por condição; Defina o endereço de execução do fragmento, altere os valores dos rótulos durante o processo de compilação; Use as definições de macro com parâmetros e outros.

Cada modelo de processador, em princípio, tem seu próprio conjunto de comandos e a linguagem apropriada (ou dialeto) do montador.

Vantagens e desvantagens

  • a quantidade mínima de código redundante (o uso de um número menor de comandos e referências à memória). Como resultado - alta velocidade e menor tamanho do programa
  • grandes volumes de código, um grande número de tarefas menores adicionais
  • mau legibilidade de código, dificuldade de suporte (depuração, adicionando oportunidades)
  • a dificuldade de implementar paradigmas de programação e quaisquer outras convenções complexas, a complexidade do desenvolvimento conjunto
  • menos bibliotecas disponíveis, sua pequena compatibilidade
  • acesso direto ao equipamento: portas de E / S, registros especiais de processadores
  • a capacidade de escrever um código auto-modificador (isto é, metaProgramming, e sem a necessidade de intérprete de software)
  • máximo "ajuste" para a plataforma desejada (Uso de instruções especiais, características técnicas de "ferro")
  • a intolerância a outras plataformas (exceto compatível com binário).

Sintaxe

O padrão geralmente aceito para a sintaxe das linguagens montador não existe. No entanto, existem padrões de fato - abordagens tradicionais que os desenvolvedores da maioria dos montadores estão aderindo. Os principais padrões de informações são a Intel-Syntax e a Sintaxe da AT & T.

O formato geral para obter instruções de gravação é o mesmo para ambos os padrões:

`[Tag:] opcode [operands] [; comentário]`

A aparência é diretamente mnemonic instruções para o processador. Prefixos (repetições, alterações como endereçamento, etc.) podem ser adicionadas a ela. À medida que os operandos, constantes, nomes de registro, endereços na RAM, etc. As diferenças entre a preocupação dos padrões da Intel e da AT & T são principalmente a ordem de transferência de operandos e sua sintaxe com diferentes métodos de endereçamento.

Os mnemônicos usados \u200b\u200bsão geralmente os mesmos para todos os processadores de uma arquitetura ou família de arquitetos (entre bem conhecidos - mnemônicos de processadores e controladores Motorola, braço, x86). Eles são descritos em especificações do processador.

Por exemplo, o processador Zilog Z80 herdou o sistema de comando Intel i8080, expandiu-o e alterou as mnemônicas (e registram designações) para o seu próprio caminho. Por exemplo, eu mudei Intel mov em ld. Os processadores Motorola Fireball herdaram o sistema de comando Z80, cortando-o. Ao mesmo tempo, a Motorola oficialmente retornou a Intel Mnemonics. e B. este momento Metade dos montadores para a bola de fogo funciona com Intel Mnemonics e metade com Zilog Mnemonics.

Diretiva

Além das instruções, o programa pode conter diretivas: comandos que não são enviados diretamente para as instruções da máquina e os gerenciadores do compilador. O conjunto e a sintaxe diferem significativamente e não dependerão da plataforma de hardware, mas do compilador usado (gerando dialetos de idiomas dentro de uma família de arquiteturas). Como conjunto, as diretrizes podem ser alocadas:

  • definindo dados (constantes e variáveis)
  • gestão da organização da organização em parâmetros do arquivo de memória e saída
  • modo de operação do compilador
  • todos os tipos de abstrações (isto é, elementos de linguagens de alto nível) - de registo de procedimentos e funções (para simplificar a implementação do paradigma de programação de procedimentos) para estruturas e ciclos condicionais (para a estrutura de programação estrutural)
  • macros.

Origem e críticas do termo "linguagem assembler"

Este tipo de idioma recebeu seu nome no nome do tradutor (compilador) desses idiomas - montador (Eng. Montador - colecionador). O nome do último é devido ao fato de que não havia idiomas de nível superior nos primeiros computadores, e a única alternativa à criação de programas usando o assembler foi a programação diretamente em códigos.

A linguagem de montagem em russo é frequentemente chamada de "montador" (e algo relacionado com ele é "montador"), que, de acordo com a tradução inglesa da palavra, está incorreta, mas se encaixa nas regras da língua russa. No entanto, o próprio montador (programa) também é chamado de simplesmente "montador", e não o "compilador de idioma assembler", etc.

O uso do termo "idioma assembler" também pode causar uma opinião incorreta sobre a existência de uma única linguagem de baixo nível, ou pelo menos um padrão para tais idiomas. Quando nomeou o idioma no qual um programa específico é escrito, é aconselhável especificar, para qual arquitetura se destina e em qual dialeto do idioma é escrito.

Elementos de sintaxe:

Exemplos:

Olá Mundo!

Exemplo para versões da Intel X86 (IA32)

mOV AX, CS MOV DS, AX MOV AH, 9 MOV DX, Offset Hello Int 21h XOR AX, AX INT 21H Olá: DB "Olá mundo!", 13, 10, "$"

Olá Mundo!

Exemplo para versões da Amiga

mover. L #dos movo-se. L 4. W, A6 JSR - US $ 0198 (A6); Movimento oldopenlibrary. L d0, A6 BEQ. s. Sair. L #Helloworld, D1 a) Moveq # 13, D2 JSR - $ 03AE (A6); Writechards b) JSR - $ 03B4; Putstr. L A6, A1 move-se. L 4. W, A6 JSR - $ 019E (A6); Closibrary. Fora RTS DOS DC. b "Dos.Library", 0 HelloWorld DC. B "Olá mundo!" $ A, 0

Olá Mundo!

Exemplo para versões do atarista

mover. L #Helloworld, - (A7) Mover # 9, - (A7) TRAP # 1 Addq. L # 6, A7 Mover # 0, - (A7) Armadilha # 1 helloworld: DC. B "Olá mundo!", $ 0d, $ 0a, 0

Olá Mundo!

Exemplo para versões da Intel X86 (IA32)

O NASM Linux é usado pela Intel Syntax. Compilação e vinculação:

  • nasm -f elfo -o hello.o hello.asm
  • ld -o hello hello.o

Seção. Dados MSG DB "Olá, mundo!", 0xa Len Equ $ - Secção MSG. Texto global _start _start :; Ponto de entrada MOV EAX, 4; "Escrever" System Call Mov EBX, 1 MOV ECX, MSG; Ponteiro para Data Mov Edx, Len; Quantidade de dados int 0x80; Chame Core Mov EAX, 1; "_Exit" System Call Mov EBX, 0; Return 0 (tudo bem) int 0x80; Ligue para o kernel.

Olá Mundo!

Exemplo para versões do PDP-8

/ - Comentários.

/ Hello World em Assembler para Dec PDP - 8 * 200 Olá, CLA CLL TLS / TLS define o sinalizador de impressão. Tad Charac / Cria um registro de índice DCA IR1 / para receber caracteres TAD M6 / configure o medidor para contar DCA / aprimorar caracteres. Em seguida, tad i ir1 / obter um símbolo. Jms tipo / seu tipo. Ist contagem / fazer outra coisa? JMP Next / Não, insira outro personagem Tipo HLT, 0 / Digite TSF JMP SubRoutine. - 1 TLS CLA JMP I Digite Charac ,. / Usado como o valor inicial IR1. 310 / H 305 / E 314 / L 314 / L 317 / O 254 /, 240/327 / W 317 / O 322 / R 314 / L 304 / d 241 /! M6, - 15 Contagem, 0 IR1 \u003d $ 10

Olá Mundo!

Exemplo para versões do PDP-11

O programa é escrito no macroassembler macro-11 para compilar e executar este programa no comando RT-11 OS:

Macro olá.

Erros detectados: 0

Link Hello - Link. Correr olá - corrida

Título Olá mundo; Nome. Mcall. Ttyout ,. Sair Olá :: MOV #MSG, R1; O endereço inicial da string é de US $ 1: MOVB (R1) +, R0; Recebemos o seguinte símbolo feito por beq; Se zero, sair do ciclo. Ttyout; Caso contrário, imprima o símbolo BR 1 $; Repetir o ciclo feito :. Saia MSG :. Asciz / Olá, mundo! /; String Olá, mundo! . Final olá; End of Hello Program

Olá Mundo!

Exemplo para versões do System / 360, System / 370

IBM System / 360/360/390 Língua básica do montador.

// EXEC Assembly Start Balr 2, 0 Usando *, 2 Aberto Print MVC BUF, HW Coloque Imprimir Fechar Imprimir EOJ HW DC CL132 "Hello World" BUF DS CL132 Imprimir DTFPR ioarea1 \u003d BUF, DevAddr \u003d Syslst, Blksize \u003d 132, * Dispositivo \u003d 3203, Control \u003d Sim, Printov \u003d Yes End Main / * // Exec Lnkedt // Exec / * / &

Olá Mundo!

Exemplo para versões da Apple II

* Olá mundo para 6502 Apple] [* ******************************** Strout Equ $ DB3A Ldy #\u003e Olá Lda #< HELLO JMP STROUT HELLO ASC "HELLO WORLD !", 00

Olá Mundo!

Exemplo para versões do PDP-10

Chttyo - Todas as entradas / saída são realizadas usando canais de E / S. É melhor fazer nomes simbólicos para esses canais que você usa e iniciá-los com CH. Defina esses nomes usando o operador MIDAS \u003d\u003d.

A chamada é uma designação simbólica para chamar uma chamada de sistema. Seu formato: .CALL.

Abra o canal de entrada / saída de abre para uso. Requer dois parâmetros - Número do canal e nome do dispositivo em sixbit.

Perder% lsfil é uma chamada de sistema que imprime uma mensagem de erro de entrada / saída se de repente aconteceu.

O IOT é uma chamada de sistema que está realmente engajada na entrada / saída. Como parâmetro, você precisa especificar o canal e o endereço contendo o código de símbolos para a saída. Por exemplo, "H representa h.

Título Printhello a \u003d 1 Chttyo \u003d\u003d 1; Canal para saída. Começar:; Abrindo o canal TTY. . Ligue para [Setz? Sixbit / Aberto / [. Uao, chttyo]? [Sixbit / Tty /] ((Setz))]. Perder% lsfil. IOT Chttyo, ["" H]; Imprimir Olá Símbolo Mundial. IOT Chttyo, ["E]. IoT Chttyo, ["L]. IoT Chttyo, [" L]. IoT Chttyo, [O]. IoT Chttyo, [^ m]; símbolo de uma nova linha. IoT Chttyo, [W]. IoT Chttyo, [O]. IoT Chttyo, ["R]. IoT Chttyo, ["L]. IoT Chttyo, [" D]. Valor; Programa, pare :)

Números de Fibonacci:

Exemplo para versões do MIPS32

Emulador de Marte. Conclusão Mars Console:

Os números de Fibonacci são: 1 1 2 3 5 8 13 21 35 55 89 144 - O programa é concluído

O programa exibe 15 números de Fibonacci. O número de números pode ser alterado na seção.data.

Espaço de Dados: .asciiz "" Cabeça: .asciiz "Os números de Fibonacci são: \\ n" FIB: .word 0: 15 Tamanho: .word 15 .Text Main: la $ T0, FIB LA $ T5, tamanho LW $ T5, 0 ($ T5) Li $ T2, 1 add.d $ F0, $ F2, $ F2, $ F2, $ F2 F4 SW $ T2, 0 ($ T0) SW $ T2, 4 ($ t0) Addi $ T1, $ t5, - 2 loop: lw $ t3, 0 ($ t0) lw $ t4, 4 ($ t0) adicionar $ T2, $ T3, $ T4 SW $ T2, 8 ($ T0) addi $ t0, $ t0, 4 addi $ t1, $ t1, - 1 bgtz $ t1, loop la $ a0, fib mover $ a1, $ t5 jal Imprimir Li $ v0, 10 Syscall Imprimir: Adicionar $ T0, $ zero, $ a0 Adicionar $ T1, $ zero, $ A1 la $ A0, cabeça li $ v0, 4 syscall out: lw $ A0, 0 ($ t0) li $ V0, 1 syscall la $ a0, espacial li $ v0, 4 syscall addi li $ v0, 1 la $ a0, ($ t2) syscall la $ a0, string1 li $ v0, 4 syscall MULTO $ T1, $ T2 mflo $ T1 li $ v0, 1 la $ a0, ($ t1) syscall la $ a0, string2 li $ v0, 4 syscall addiu $ t2, $ t2, 1 beq $ t2, 16, endloop j loop endloop: li $ v0, 10 Syscall.



Montador

Montador - linguagem de programação de baixo nível. A linguagem recebeu seu nome da palavra montador - um colecionador. Havia outro 50º. como um análogo simbólico da linguagem da máquina.
Os comandos do Assembler são um a um para um correspondem aos comandos do processador e, de fato, representam uma forma simbólica conveniente de comandos de gravação e argumentos. Além disso, o montador garante a ligação das partes do programa e dos dados das tags realizadas durante a montagem (para cada tag, o endereço é calculado, após o qual cada entrada do rótulo é substituída por este endereço).
Como os sistemas de comando do microprocessador diferem, cada processador tem seu próprio conjunto de comandos na linguagem montadora.
Com a ajuda de um montador, você pode escrever esses programas impossíveis, ou é muito difícil escrever em outros idiomas. Por exemplo: geradores de chave (keygen), monitores do sistema, drivers para equipamentos ou até mesmo oS..
Idiomas de alto nível ("C", "Pascal", "Delphi", etc.) Não fornecem controle confiável sobre fluxos de dados, endereços de memória ou registros de processadores, bem como todos eles foram desenvolvidos sob um tipo específico de Sistema operacional, o montador pode se tornar o mesmo montador, mas trabalhando em uma plataforma de ciência desconhecida e fazendo programas sob esta plataforma.
Os programas no montador, em contraste com os programas escritos em linguagens de alto nível, são realizados em dezenas de vezes menos, e eles trabalham dez vezes mais rápido. Um exemplo pode servir como sistema operacional Menuetos, que é escrito em montador plana e ajuste em um disquete (1,44 MB), e o kit inclui programas de aplicativo, como: um editor de código de montagem com backlit, trabalhar com um sistema de arquivos, 3D Screensaver, alguns jogos, imagens de fotos, compilador plana montador, terminal, cd player e muito mais. A vantagem é que ela pode ser rapidamente baixada da Internet (mesmo com uma pequena velocidade de conexão).
No momento, a maioria dos especialistas em software está desenvolvendo em linguagens de alto nível, como Pascal ou C, o que é mais fácil ao escrever programas, mas os mais poderosos e eficientes programas Escrito total ou parcialmente na linguagem montadora.

Literatura
1. Peter Abel - montador. Linguagem e programação para o IBM PC - M., 1999.

Montador

Montador(Do inglês. Montador - um colecionador) - o compilador de texto de origem do programa escrito na linguagem montadora, no idioma da máquina.
Como a própria língua, os montadores são geralmente específicos para uma arquitetura específica, sistema operacional e a versão de sintaxe do idioma. Ao mesmo tempo, há multiplataforma ou universal (mais precisamente, limitada-universal, porque na linguagem de baixo nível você não pode escrever programas independentes de hardware) que podem funcionar em diferentes plataformas e sistemas operacionais. Entre os últimos, você também pode destacar um grupo de montador cruzado capaz de coletar código de máquina e módulos executáveis \u200b\u200b(arquivos) para outras arquiteturas e OS.
A montagem pode não ser o primeiro e não último passo a caminho de obter um módulo executivo do programa. Assim, muitos compiladores de linguagens de programação de alto nível distribuem o resultado na forma de um programa na linguagem montadora, que os processos montadores no futuro. Além disso, a montagem resultante não pode ser executada, e o módulo de objeto contendo os blocos dispersos do código da máquina e os dados do programa (ou de vários módulos de objeto) no futuro usando o editor de link podem ser obtidos por um arquivo executável.
Células de memória especiais localizadas diretamente no processador. Trabalhar com registros é realizado muito mais rápido do que com as células RAM, para que os registros sejam usados \u200b\u200bativamente tanto nos programas na linguagem montadora quanto nos compiladores de linguagens de alto nível.
Os nomes dos registros se originam do seu propósito:

EAX / AX / AH / AL (registro de acumulador) - Bateria;
EBX / BX / BH / BL (registro base) -Registre banco de dados;
ECX / CX / CH / CL (Counter Register) - Contador;
EDX / DX / DH / DL (registro de dados) - registro de dados;
ESI / SI (registro de índice de origem) - Índice de origem;
EDI / DI (registro de destinação) - Índice do receptor (destinatário);
ESP / SP (Pilhado Registro de Ponteiro) - Cadastro de Ponteiro de Pilha;
EBP / BP (Registro de Ponteiro Base) - Registro de Ponteiro Base de Frame Stack.

Comandos de processamento de linha
Para trabalhar com linhas, ou correntes de símbolos ou números (isto é, simplesmente falando, com a matriz de dados arbitrários) no MP há um número de comandos especiais:
movimentos - enviando cordas;
cMPS - Comparação de duas linhas;
mares - Pesquise na string de um determinado elemento;
lods - Carregamento de bateria (Al ou AH Registros) da linha;
sTOS - Gravar elemento de uma string de uma bateria (registros ah ou al).

Dignidade

· A linguagem montadora permite que você escreva o código mais rápido e compacto, que é geralmente possível para este processador.
· A velocidade de operação - otimizando o algoritmo de computação e / ou mais acesso ao racional à RAM (por exemplo, se todos os dados de origem forem armazenados nos registros do processador, você pode excluir acesso desnecessário ao OP), redistribuição de dados, funções de computação de tabela ;
· Volume de código (incluindo uso eficiente resultados intermediários). A redução no volume de código também aumenta frequentemente a velocidade de execução do programa.
· Garantir o uso máximo de capacidades específicas de uma plataforma específica, que também permite criar programas mais eficientes, incluindo menos recursos intensivos.
· A programação na linguagem montadora é possível acesso direto ao equipamento, e, em particular, portas de E / S, registros de processadores, etc. Em muitos sistemas operacionais, o contato direto dos programas de aplicativos para registros para registros equipamento periférico Bloqueado para confiabilidade do sistema e exceções "congela".
· A linguagem montadora é frequentemente usada para criar drivers de hardware e kernels do sistema operacional quando o contrato temporário de trabalho é importante. dispositivos periféricos a partir de processador central.
· A linguagem montadora é usada para criar "firmware do BIOS".
· Com a ajuda da linguagem montadora, os subprogramas dependentes da máquina de compiladores e intérpretes de alto nível são frequentemente criados, e a compatibilidade das plataformas é implementada.
· Com a ajuda do programa desmontável, você pode entender os algoritmos operacionais do programa em estudo na ausência de listagem em uma linguagem de alto nível, estudando apenas códigos de máquina, mas em programas intrometidos complexos, é muito, muito trabalhoso.

Desvantagens
· Em virtude de uma orientação da máquina (nível "baixo") da linguagem montadora, uma pessoa é mais difícil de ler e entender o programa em comparação com linguagens de programação de alto nível; O programa consiste em elementos "pequenos" - comandos de máquina, respectivamente, programação e depuração são complicados, a complexidade e a probabilidade de fazer a criação estão crescendo.
· Aumento da qualificação do programador é necessária para obter um código de qualidade: o código escrito pelo programador médio na linguagem montadora geralmente não é melhor ou ainda pior que o código gerado pelo compilador de otimização para programas comparáveis \u200b\u200bescritos em linguagem de alto nível.
· Um programa de alto nível pode ser recompilado com otimização automática para os recursos da nova plataforma de destino, o programa no idioma da montadora na nova plataforma pode perder sua vantagem à velocidade sem o código de reescrita manual.
· Como regra, menos bibliotecas disponíveis em comparação com as modernas linguagens industriais de programação.
· Não há portabilidade de programas em computadores com outro sistema de arquitetura e comando.

Compatibilidade
Um programa destinado a um tipo de montador não pode ser compilado em outro sem alteração radical ou conversão automática! Mas mesmo entre os montadores de "seu" tipo há um lote, desagenação e muitas diferenças: em palavras-chave, nas regras para o desenho da listagem, nas bibliotecas e arquivos de cabeçalho fornecidos, etc. Se apenas a compatibilidade não for explicitamente, é necessário transmitir o programa com o mesmo que um montador para o qual se destina. Caso contrário, prepare-se para alterações (isto é, a adoção). As diferenças são muitas vezes manifestadas nos lugares mais inesperados. Alguns montadores entendem que "Mov EAx, X" é o mesmo que "Mov Eax, [x]", alguns - não. Eles tropeçam e emitem um erro. Mas nada mais! Muito pior quando o tradutor interpreta silenciosamente este design como "Mov EAx, offset X", que não é exatamente a mesma coisa! Então, ao transferir o programa, você tem que ser muito e muito cuidadoso.

Compatibilidade dos sistemas operacionais. Programas orientados pelo MS-DOS sem não apenas não são transportáveis, mas também intolerâncias. Para eles é característico interação direta Com o equipamento disponível em NT apenas do nível nuclear, sem mencionar que o código de 16 bits é chamado de aplicativos de 32 bits apenas através do DPMI e, em seguida, não sem trusão.

Assim, antes de transmitir um programa montador, é necessário identificar para o qual o tradutor e o sistema operacional se destinam! Com fragmentos montadores, capturados a partir do contexto "nativo", são ainda piores. Suponha, em algum artigo, uma interessante recepção anti-loop é descrita e um código montador é dado, mas como incorporá-lo em seu programa - não diz. Uma situação familiar, não é? A transmissão direta não é possível - o tradutor é selvagem fissil, mas nada diz.

Montagem suave.

O texto preparado é os dados de origem para programas especiais chamados de montadores. A tarefa do montador é converter o texto do programa para a forma de comandos binários que podem ser executados por um microprocessador. Se os erros de sintaxe forem detectados, o código resultante não será criado. O processo de criação de um arquivo executável ocorre em duas etapas:

ASM -\u003e .OBJ -\u003e .exe / .dll / .com

No primeiro estágio (.asm -\u003e .obj) do arquivo montador por compilação, os arquivos de código de objeto intermediário possuem uma extensão de extensão são obtidos (arquivos Inc adicionais podem ser usados). Arquivo com extension.obj contém código de máquina otimizado, desde que os erros sintáticos e semânticos não sejam atendidos. Se os erros forem detectados no arquivo de origem com o programa no idioma do Assembler, o programador fornece uma lista de erros detectados nos quais os erros são especificados com o número da linha em que são detectados. O programador realiza ciclicamente as ações de edição e compilação até que todos os erros sejam eliminados no arquivo de origem. Nesta fase, já é possível obter um programa pronto, mas na maioria das vezes não tem alguns componentes. Se o compilador por qualquer motivo (registrado incorretamente o caminho para tal arquivo ou o arquivo estiver faltando) não puder localizar um arquivo INC, então um aviso é emitido e o arquivo OBJ é recebido.

A montagem, por via de regra, ocorre em duas recepções. No primeiro passe, os comandos mnemônicos, números semanais e símbolos nos códigos de máquina apropriados são traduzidos, calculados quanto o comando é ocupado pelo local, nomes detectados inseridos pelo usuário (constantes, tags, variáveis) seu tipo e valor numérico é escrito para a mesa. Na mesma tabela, é registrado, a partir do qual aborda os procedimentos, endereço dos rótulos, os endereços do início / fim dos segmentos, etc., são substituídos, os endereços do início dos procedimentos são substituídos pela segunda passagem , os nomes dos rótulos são substituídos.

Como resultado da montagem, o chamado "arquivo de objeto" é obtido. Como um recurso adicional, o montador pode criar um arquivo de listagem de programas.

Normalmente, para obter arquivos de código de objeto, você deve executar o programa montador apropriado (Microsoft Ml.exe e Tasm.exe programas da empresa Borland), indicando em linha de comando Nome do arquivo com texto de programa.

Este desafio é minimamente necessário. Exceto nome arquivo de textoVocê deve especificar as opções para montagem. Mais informações sobre as opções do programa de montagem devem ser procuradas na documentação para esses programas.

Programa de Layout.

O próximo estágio (.obj -\u003e .exe / .dll / .com) é chamado de ligação ou layout e serve para substituir os nomes de caracteres usados \u200b\u200bpor um programador para endereços reais.

Comparar conteúdo hexadecimal obj e Arquivo exe.que você tem. O arquivo EXE tem a mesma seqüência de bytes como no arquivo OBJ. Mas além disso ainda está presente: o nome do arquivo montado, a versão montadora, o segmento "próprio" e assim por diante.

Esta informação de "serviço" destinada a esses casos em que seu arquivo executável que você deseja coletar de vários. Ao desenvolver grandes aplicações. O texto da origem consiste, como regra, de vários módulos (arquivos com textos de origem), porque é inconveniente para armazenar todos os textos em um arquivo - eles são difíceis de navegar.

Cada módulo é compilado em um arquivo separado com o código do objeto. Cada um desses arquivos é prescrito seus segmentos de código / dados / pilha, que precisam ser combinados em um. E o arquivo executável que precisamos obter apenas um - com um único segmento de código / dados / pilha. É esse link e faz: conclui a definição de links de endereços e units se for necessário, vários módulos de software em um. E este conosco é realizado.

Além disso, é necessário adicionar código de máquina aos nossos módulos que implementam várias funções padrão (por exemplo, computar as funções matemáticas do pecado ou da LN). Essas funções estão contidas em bibliotecas (arquivos com extensão padrão. Lib), que são fornecidos com o compilador ou são criados de forma independente. Portanto, o processo de preparação inclui necessariamente o estágio de layout quando todas as incógnitas são definidas quando o endereço das variáveis \u200b\u200bou funções colapsadas é determinado.

O processo de combinação de módulos de objeto para um arquivo é realizado por um programa de vítulos especiais ou um programa de coletor (link.exe da empresa da Microsoft e Tlink.exe Borland), que executa a ligação de módulos de objeto e código de máquina de funções padrão, nas bibliotecas e gera o aplicativo trabalhável é um código executável para uma plataforma específica.

O código executável é um programa completo com a extensão COM, DLL ou EXE, que pode ser executada em um computador com um sistema operacional instalado para o qual este programa foi criado. O nome do arquivo executável será definido pelo primeiro arquivo .obj. Para vincular você precisa discar no prompt de comando:

link prog1.obj prog2.obj ou tlink prog1.obj prog2.obj

O conteúdo do arquivo de objeto é analisado por um vinculador. Determina se existe um programa links externosOu seja, se o programa de comando de chamada de programa contém em uma das bibliotecas de módulos de objeto (Link Library). O linker encontra esses links no arquivo de objeto, copia os procedimentos necessários das bibliotecas, combina-os com o arquivo de objeto e cria um arquivo executável (arquivo executável). Como características adicionais O linker pode criar um arquivo de links contendo o plano do arquivo executável recebido.

Fontes usadas
1. https://ru.wikipedia.org/
2. http://natalia.appmat.ru/
3. http://www.codenet.ru/
4. http://wasm.ru/
5. Norton P., Language D. Montable para o IBM PC. M.: Computador, 1992.

1. Quando e quem foi inventado contando máquinas de perfuração? Quais tarefas foram resolvidas nelas?

2. O que é um relé eletromecânico? Quando as máquinas de computação de relé criadas? Que velocidade eles possuíam?
3. Onde e quando foi construído o primeiro computador? Como se chamava?
4. Qual é o papel de John Von Neuman na criação de um computador?
5. Quem foi o designer do primeiro computador doméstico?
6. No que base de elemento. Criado máquinas de primeira geração? Quais foram suas principais características?
7. Em qual banco de dados elementar criou as máquinas de segunda geração? Quais são as suas vantagens em comparação com a primeira geração de computador?
8. O que é um circuito integrado? Quando foram os primeiros computadores em circuitos integrados? O que eles foram chamados?
9. Quais são as novas áreas de aplicação do computador com a aparência de máquinas de terceira geração?
10. O que é um microprocessador? Quando e onde foi criado o primeiro microprocessador?
11. O que é um microevm e computador pessoal?
12. Que tipos de PC são mais comuns no mundo?
13. O que é um supercomputador?
14. O que é sistemas de PC em cluster?
15. Qual é a característica dos computadores da quinta geração?

Nomeie o primeiro dispositivo de computação. Aback Calculator Aritmometer Escores Russian Que ideia apresentada no meio

Matemático inglês do século XIX Charles Babbage?

A ideia de criar software gerenciado contando máquinaTer um dispositivo aritmético, dispositivo de controle, bem como um dispositivo de entrada e impressão

A ideia de criar celular

A ideia de criar robôs gerenciados por um computador

Em que ano e onde foi o primeiro computador com base em lâmpadas eletrônicas?

1945, EUA.

1944, Inglaterra

1946, França

Qual base os computadores de terceira geração foram criados?

Esquemas integrados

semicondutores

lâmpadas eletrônicas

circuitos integrados soberbound.

Qual foi o nome do primeiro computador pessoal?

Nomeie o dispositivo central do computador.

CPU

Unidade de sistema

Fonte de energia

Placa-mãe

O processador processa as informações apresentadas:

DENTRO sistema decimal Observação

Em inglês

Em russo

Na linguagem do motor (em código binário)

Para inserir informações numéricas e de texto usadas

Teclado

O scanner é usado para ...

Para inserir imagens de imagens e documentos de texto

Para desenhar uma alça especial

Movendo o cursor na tela do monitor

Imagens holográficas

10. Que tipo de impressora é aconselhável usar documentos financeiros para imprimir?

Impressora matricial.

Impressora a jato

Impressora a laser

Que tipo de impressora é aconselhável usar para imprimir ensaios?

Impressora matricial.

Impressora a jato

Impressora a laser

Que tipo de impressora é aconselhável usar fotos para imprimir?

Impressora matricial.

Impressora a jato

Impressora a laser

Com não conformidade com os requisitos sanitários e higiênicos do computador, o efeito prejudicial na saúde humana pode ser fornecido ...

Monitorar em um tubo de radiação eletrônica

Monitorar em cristais líquidos

Painéis de plasma.

Quando o computador estiver desligado, todas as informações são apagadas de ...

Memória de acesso aleatório

Disco rígido

Disco laser.

Em qual computador é armazenado no computador?

Memória externa;

cPU;

Faixas ópticas têm uma espessura menor e colocadas mais firmemente ...

Motor de vídeo digital (disco de DVD)

Disco Compacto (CD - Disk)

Dispositivos de entrada entrar ...

O dispositivo de saída inclui ...

Teclado, mouse, joystick, penas leves, scanner, câmera digitalMicrofone

Colunas de som, monitor, impressora, fone de ouvido

HDD., processador, módulos de memória, placa-mãedisquete

O programa é chamado ...

Programa de computador pode gerenciar o trabalho do computador se for ...

Na ram

Em um disco flexível

No disco rígido

Em CD - disco

Os dados são ...

A sequência de comandos que o computador realiza durante o processamento de dados

Informações apresentadas em forma digital e processadas no computador

Dados com um nome e armazenados em memória de longo prazo

Arquivo é ...

Texto impresso em um computador

Informações apresentadas em forma digital e processadas no computador

Programa ou dados com um nome e armazenado em memória de longo prazo

Com formatação rápida de um disco flexível ...

Diretório de disco limpo

Todos os dados são apagados

Desfragmentação do disco é realizada

Verificação da superfície do disco

Com a formatação completa de um disco flexível ...

todos os dados são apagados

uma verificação completa do disco é executada.

diretório de disco limpo

o disco se torna sistêmico

Em um sistema de arquivos hierárquicos multi-nível ...

Os arquivos são armazenados em um sistema de pastas aninhadas.

Os arquivos são armazenados em um sistema que é uma sequência linear

A história do desenvolvimento de equipamentos de computação:

1. Nomeie o primeiro dispositivo de computação.
1) Abak.
2) calculadora
3) aritmômetro
4) pontuações russas

2. Que ideia foi apresentada em meados do século XIX Inglês Mathematician Charles Babbage?
1) A ideia de criar uma máquina contável controlada por software com um dispositivo aritmético, um dispositivo de controle, bem como um dispositivo de entrada e impressão
2) a ideia de criar um celular
3) A ideia de criar robôs gerenciados por um computador
3. Nomeie as primeiras máquinas de computação programador.
1) inferno lavey
2) Sergey Lebedev
3) Bill Gates
4) Sophia Kovalevskaya

4. Em que ano e onde foi o primeiro computador com base em lâmpadas eletrônicas?
1) 1945, EUA
2) 1950, URSS
3) 1944, Inglaterra
4) 1946, França

5. Que base foi criada o computador de terceira geração?
1) circuitos integrados
2) semicondutores
3) lâmpadas eletrônicas
4) circuitos integrados super alta

6. Qual foi o primeiro computador pessoal chamado?
1) Apple II
2) IBM PC
3) Dell.
4) Corvette.
Dispositivo de computador ......................... 15
1. Nomeie o dispositivo central do computador.
1) Processador.
2) bloco de sistema
3) fonte de alimentação
4) placa-mãe
2. Como as informações físicas no computador são registradas e transmitidas?
1) figuras;
2) usando programas;
3) aparece na forma de sinais elétricos.

3. O processador processa as informações apresentadas:
1) No sistema de números decimais
2) em inglês
3) em russo
4) na máquina (em código binário)
4. Para inserir informações numéricas e de texto usadas
1) Teclado
2) Mouse.
3) trekball.
4) alça
5. A característica mais importante Os dispositivos de entrada de coordenadas é a resolução, que é geralmente 500 dpi (ponto por polegada - pontos por polegada (1 polegada \u003d 2,54 cm)), o que significa ...
1) Ao mover o mouse para uma polegada, o ponteiro do mouse se move por 500 pontos
2) Ao mover o mouse por 500 pontos, o ponteiro do mouse move uma polegada
6. O scanner é usado para ...
1) Para inserir imagens e documentos de texto
2) Para desenhar uma alça especial
3) Movendo o cursor na tela do monitor
4) Obtendo imagens holográficas
Dispositivos de saída de informação ................. 21
1. Qual tipo de impressora é apropriada para usar documentos financeiros para impressão?
1) impressora matricial
2) Impressora a jato de tinta
3) Impressora a laser
2. Que tipo de impressora é aconselhável usar para imprimir resumos?
1) impressora matricial
2) Impressora a jato de tinta
3) Impressora a laser

1. Que tipo de impressora é aconselhável usar fotos para imprimir?
1) impressora matricial
2) Impressora a jato de tinta
3) Impressora a laser
2. Em caso de não conformidade com os requisitos sanitários e higiênicos do computador, o efeito prejudicial na saúde humana pode ser fornecido ...
1) monitor em um tubo de radiação eletrônica
2) monitorar em cristais líquidos
4) painéis de plasma
3. Um dispositivo que fornece uma entrada e leitura de informações é chamado ...
1) dirigir ou dirigir

4. Quando o computador estiver desligado, todas as informações são apagadas de ...
4) RAM.
5) disco rígido
6) disco laser
7) dietas
13. Em qual computador é armazenado para informações?
1) Memória externa;
2) monitor;
3) processador;
2. As faixas ópticas têm uma espessura menor e colocadas mais firmemente ...
1) Motor de vídeo digital (DVD - disco)
2) disco compacto (CD - Disk)
3) disquete
3. Em que as informações do disco são armazenadas em caminhos concêntricos, na qual as seções magnetizadas e não-vitradas alternam
1) em um disquete
2) em um disco compacto
3) em DVD - disco

4. Nos dispositivos de entrada incluídos ...

1) disco rígido, processador, módulos de memória, placa-mãe, disquete
5. No dispositivo de saída incluído ...
1) teclado, mouse, joystick, penas de luz, scanner, câmera digital, microfone
2) colunas de som, monitor, impressora, fone de ouvido
3) disco rígido, processador, módulos de memória, placa-mãe, disquete
6. O programa é chamado ...

7. Programa de computador pode gerenciar o trabalho do computador se for ...
1) em RAM
2) em um disco flexível
3) no disco rígido
4) Em CD - disco
8. Dados é ...
1) A sequência de comandos que o computador executa durante o processo de processamento de dados
2) informações apresentadas em forma digital e processadas no computador
3) dados com um nome e armazenados em memória de longo prazo
9. O arquivo é ...
1) texto impresso em um computador
2) informações apresentadas em forma digital e processadas no computador
3) Programa ou dados com um nome e armazenado em memória de longo prazo

10. Com a formatação rápida do disco flexível ...
1) Limpe o diretório de disco é limpo.
2) Todos os dados são apagados
3) desfragmentação de disco
4) Verifique


Para começar, entendemos a terminologia.

Código da máquina - O sistema de comandos de uma determinada máquina de computação (processador), que é interpretado diretamente ao processador. A equipe, como regra, é um inteiro que é gravado no registro do processador. O processador lê esse número e executa uma operação que corresponda a este comando. Popularmente isso é descrito no livro como se tornar um programador.

Linguagem de programação de baixo nível (Linguagem de programação de baixo nível) é uma linguagem de programação, o mais próximo possível de programação em códigos de máquina. Ao contrário dos códigos de máquina, no idioma de baixo nível, cada comando corresponde a um número não, mas o nome abreviado do comando (mnemônico). Por exemplo, o comando Adicionar é uma redução da adição da palavra. Portanto, o uso de uma linguagem de baixo nível simplificará significativamente os programas de escrita e leitura (em comparação com a programação em códigos de máquina). A linguagem de baixo nível é vinculada a um processador específico. Por exemplo, se você escreveu um programa em uma linguagem de baixo nível para o processador PIC, poderá ter certeza de que não funcionará com o processador AVR.

Linguagem de programação de alto nível - Esta é uma linguagem de programação, o mais próximo possível da língua humana (geralmente para o inglês, mas há linguagens de programação nas línguas nacionais, por exemplo, a linguagem 1C é baseada em russo). A linguagem de alto nível não está praticamente vinculada a um processador específico ou ao sistema operacional (se diretrizes específicas não forem usadas).

Linguagem montadora - Esta é uma linguagem de programação de baixo nível em que você escreve seus programas. Para cada processador, há sua própria linguagem montadora.

Montador - Este é um programa especial que converte (compila) os textos de origem do seu programa escrito na linguagem montadora no arquivo executável (arquivo com a extensão EXE ou COM). Para ser preciso, são necessários programas adicionais para criar um arquivo executável e não apenas um montador. Mas sobre isso depois ...

Na maioria dos casos, diz o montador, e implica "linguagem assembler". Agora você sabe que estas são coisas diferentes e então diga não bem. Embora todos os programadores te entendam.

IMPORTANTE!
Ao contrário dos idiomas de alto nível, como Pascal, Beyysik, etc., há sua própria linguagem de montagem para cada montador. Esta regra é radicalmente distinta pela linguagem montadora de linguagens de alto nível. Os textos de origem do programa (ou simplesmente "fontes") escritos em uma linguagem de alto nível, você na maioria dos casos pode compilar diferentes compiladores para diferentes processadores e diferentes sistemas operacionais. Com fontes montador para fazer isso muito mais difícil. Claro, essa diferença quase não é tangível para diferentes montadores, que são destinados aos mesmos processadores. Mas o fato é que para cada processador há seu próprio montador e sua linguagem montadora. Nesse sentido, é muito mais fácil programar em linguagens de alto nível. No entanto, todos os prazeres devem ser pagos. No caso de linguagens de alto nível, podemos encontrar coisas como maior Arquivo executável, pior velocidade, etc.


Neste livro, falaremos apenas sobre programação para computadores com processadores Intel (ou compatíveis). Para praticar a prática, verifique os exemplos dados no livro, você precisará dos seguintes programas (ou pelo menos alguns deles):

  1. . Bom programaespecialmente para iniciantes. Inclui editor de origem e algumas outras coisas úteis. Funciona no Windows, embora os programas sejam escritos sob DOS. Infelizmente, o programa custa dinheiro (mas vale a pena))). Para detalhes, consulte o site http://www.emu8086.com.
  2. - Turbo montador de Borland. Você pode criar programas para DOS e para Windows. Também vale a pena o dinheiro e no momento não é mais suportado (e Borland não existe). Em geral, a coisa é boa.
  3. - Montador da Microsoft (decifrado como montador macro, e não Microsoft Assembler, tantos não iniciados). Talvez o montador mais popular para processadores Intel. Apoiado até agora. Programa condicionalmente livre. Ou seja, se você comprá-lo separadamente, isso custará dinheiro. Mas está disponível assinantes de MSDN gratuitos e entra no pacote do Visual Studio Software da Microsoft.
  4. - Assembler do WATCOM. Como todos os outros, tem vantagens e desvantagens.
  5. - Tem possibilidades modestas, mas tem uma grande vantagem - entra no conjunto padrão do Windows. Procure por ele na pasta Windows \\ Command ou Windows \\ System32. Se você não encontrar, em outras pastas de diretório do Windows.
  6. Também é desejável ter qualquer. Um gerenciador de filmes de Dission, como Wolves Commander (VC) ou Norton Commander (NC), não impede. Com sua ajuda, você também pode ver os códigos de arquivos hexadecimais, mas não podem ser editados. Os editores hexadecimais gratuitos na internet são bastante. Aqui é um deles: McAfee fileinsight v2.1. O mesmo editor pode ser usado para trabalhar com os textos de origem dos programas. No entanto, gosto mais de fazer isso com o seguinte editor:
  7. Editor de texto. Estamos interessados \u200b\u200bem escrever os textos de origem dos seus programas. Eu posso recomendar editor livre PSPAD, que suporta muitos idiomas de programação, incluindo a linguagem montadora.
Todos os programas apresentados neste livro (e exemplos de programa) são testados para desempenho. E são esses programas que são usados \u200b\u200bpara implementar exemplos dos programas dados neste livro.

E ainda - o código-fonte escrito, por exemplo, para o EMU8086, será ligeiramente diferente do código escrito, por exemplo, para provocar. Essas diferenças serão especificadas.

A maioria dos programas mostrados no livro são escritos. Primeiro, porque este montador é mais popular e ainda suportado. Em segundo lugar, porque vem com o MSDN e com o pacote de software do Visual Studio da Microsoft. Bem, em terceiro, porque sou feliz proprietário de uma cópia licenciada do MASM.

Se você já tiver qualquer montador que não tenha sido incluído na lista listada acima, você terá que lidar de forma independente com sua sintaxe e ler o manual do usuário para aprender a trabalhar com ele. Mas as recomendações gerais dadas neste livro serão justas para qualquer (bem, ou quase para qualquer) montador.

Para que a máquina realize as equipes de uma pessoa no nível de hardware, é necessário especificar uma certa seqüência de ações na linguagem de "nolikov e unidades". Assistente neste negócio será um montador. Este é um utilitário que funciona com a transferência de comandos para a linguagem da máquina. No entanto, a escrita do programa é um processo muito demorado e complexo. Esta linguagem não se destina a criar pulmões e ações simples. No momento, qualquer linguagem de programação usada (Assembler funciona bem) permite que você escreva tarefas eficazes especiais que afetam fortemente a operação do hardware. O objetivo principal é criar uma microcomando e pequenos códigos. Esta linguagem dá mais oportunidades do que, por exemplo, Pascal ou C.

Breve descrição das linguagens montador

Todas as linguagens de programação são divididas de níveis: baixa e alta. Qualquer um dos sistemas sintáticos da "família" do montador é diferente, pois une imediatamente algumas vantagens das linguagens mais comuns e modernas. Com os outros, seus parentes e o fato de que o sistema de computador pode ser totalmente utilizado.

Uma característica distintiva do compilador é a simplicidade de usar. Difere daqueles que funcionam apenas com altos níveis. Se você levar em conta qualquer linguagem de programação, o montador funciona duas vezes mais rápido e melhor. Para escrever um programa de luz, muito tempo não precisará.

Brevemente sobre a estrutura da linguagem

Se conversamos em geral sobre o trabalho e estrutura do funcionamento do idioma, você pode dizer com certeza de que seus comandos correspondem plenamente às equipes do processador. Ou seja, o montador usa mnemokodes, a pessoa mais conveniente para gravar.

Ao contrário de outras linguagens de programação, o montador usa certas tags para registrar as células de memória em vez de endereços. Eles são traduzidos para as chamadas diretivas. Estes são endereços relativos que não afetam a operação do processador (não traduzido para o idioma da máquina), e necessário para reconhecer o próprio ambiente de programação.

Para cada linha do processador, há sua própria situação correta será qualquer processo, incluindo traduzido

A linguagem assembler tem várias sintaxas que serão discutidas no artigo.

Vantagens de linguagem

A mais importante e conveniente adaptação da linguagem montadora será que é possível escrever qualquer programa para um processador que seja muito compacto. Se o código acabar por ser enorme, alguns processos redirecionam rAM. Ao mesmo tempo, eles fazem tudo depressa e sem falhas, a menos que controlem um programador qualificado.

Drivers, sistemas operacionais, BIOS, compiladores, intérpretes, etc. - Este é todo o programa da linguagem montadora.

Ao usar um desmontador, o que faz com que uma tradução seja a partir da máquina, é possível entender facilmente como uma ou outra tarefa do sistema funciona, mesmo que não haja explicação. No entanto, isso só é possível se os programas são leves. Infelizmente, em códigos não triviais, é bastante difícil entender.

Idiomas de contras.

Infelizmente, os programadores iniciantes (e muitas vezes profissionais) são difíceis de desmontar a linguagem. Assembler requer. descrição detalhada A equipe necessária. Devido ao fato de que você precisa usar comandos da máquina, a probabilidade de ações erradas e a complexidade da execução está crescendo.

Para escrever até mesmo programa simplesO programador deve ser qualificado e seu nível de conhecimento é bastante alto. O especialista médio, infelizmente, muitas vezes escreve códigos ruins.

Se a plataforma para a qual o programa é criado for atualizado, todos os comandos devem ser copiados manualmente - isso requer a própria linguagem. O montador não suporta a função da regulação automática da operação dos processos e substitui quaisquer elementos.

Equipes de linguagem

Como já mencionado acima, cada processador tem seu próprio conjunto de comandos. Os elementos mais simples que são reconhecidos por qualquer tipo são os seguintes códigos:


Uso de diretivas

Microcontroladores de programação na linguagem (montador isso permite e perfeitamente lidam com o funcionamento) do nível mais baixo na maioria dos casos, é termina com sucesso. É melhor usar processadores com um recurso limitado. Para equipamentos de 32 bits essa lingua Se encaixa perfeitamente. Muitas vezes em códigos você pode ver diretrizes. O que é isso? E o que é usado para?

Para começar, é necessário enfatizar o fato de que as diretrizes não são transferidas para a linguagem da máquina. Eles regulam o desempenho do compilador. Ao contrário das equipes, estes parâmetros, tendo várias funçõesDiferentes graças a diferentes processadores, mas à custa de outro tradutor. Entre as principais diretrizes podem ser alocadas da seguinte forma:


Origem do nome

Devido ao nome da linguagem - "montador"? Estamos falando sobre o tradutor e o compilador, que também produzem criptografia de dados. Do Assemblério Inglês não significa nada além de um colecionador. O programa não foi coletado manualmente, foi utilizada uma estrutura automática. Além disso, no momento, usuários e especialistas apagaram a diferença entre os termos. Muitas vezes, as linguagens de programação de chamadas assembler, embora seja apenas uma utilidade.

Devido ao nome de coleta geralmente aceito, alguns têm uma solução errada que há uma única linguagem de baixo nível (ou normas padrão para ele). Para que o programador entenda qual é a estrutura, é necessário especificar, para qual plataforma uma ou outra linguagem montadora é usada.

Macrofs.

Linguagens montador que são criadas relativamente recentemente têm macrossas. Eles facilitam a ortografia e a execução do programa. Graças à sua presença, o tradutor executa o código escrito às vezes mais rápido. Ao criar uma escolha condicional, você pode escrever um grande bloco de equipes, e é mais fácil usar macros. Eles mudarão rapidamente entre ações, se a condição ou a não cumprimento for cumprida.

Ao usar diretivas de macro-linguagem, o programador recebe macros montadores. Às vezes, pode ser amplamente utilizado e, às vezes, suas características funcionais são reduzidas a um comando. Sua presença no código facilita o trabalho com ele, torna mais compreensível e visual. No entanto, deve estar atento estar atento - em alguns casos, macros, pelo contrário, piora a situação.