TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem Ronaldo de Freitas Zampolo LaPS/ENGCOMP/ITEC/UFPA TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 1
Tópicos Introdução à Linguagem de Montagem Macros O Processo de Montagem Ligação e Carga de Procedimentos TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 2
Introdução à Linguagem de Montagem Tradutores: Montagem: linguagem-fonte é essencialmente uma representação simbólica para uma linguagem-alvo numérica Compilador: linguagem-fonte de alto-nível, com linguagem-alvo numérica ou uma representação simbólica para uma linguagem-alvo numérica TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 3
Introdução à Linguagem de Montagem O que é uma linguagem de montagem? Linguagem pura (sem aditivos): cada comando = uma instrução ISA Opcodes ISA mnemônicos Posições de memória nomes simbólicos Registradores nomes simbólicos TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 4
Introdução à Linguagem de Montagem Por que usar uma linguagem de montagem? Acesso a todas as características do nível ISA Baixa portabilidade Acesso total ao hardware Desenvolvimento mais lento e caro Alto desempenho Uso eficiente da memória TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 5
Introdução à Linguagem de Montagem Programadores -hora Tempo de execução (u.t.) Linguagem de montagem 50 33 Linguagem de alto-nível 10 100 Primeira etapa: Código crítico: 10% 1 90 Outra partes: 90% 9 10 Total 10 100 Segunda etapa: Código crítico: 10% 1+5 30 Outra partes: 90% 9 10 Total 15 40 TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 6
Introdução à Linguagem de Montagem Formato de comandos Label: Opcode Operandos ;comentários Label: nomes simbólicos para endereços de memória Opcode: ou código de operação, especifica o que a máquina deve realizar Operandos: define onde buscar os dados a serem manipulados e onde armazenar o resultado produzido Comentários: (auto explicativo) TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 7
Introdução à Linguagem de Montagem Exemplo 01: FORMULA: MOV EAX, I ;registrador EAX = I ADD EAX, J ;registrador EAX = I + J MOV N,EAX ;N = I + J I DW 3 ;reseva 4 bytes com valor inicial 3 J DW 4 ;reseva 4 bytes com valor inicial 4 N DW 0 ;reseva 4 bytes com valor inicial 0 TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 8
Introdução à Linguagem de Montagem Exemplo 02: CBLOCK 0x20 I J N ;associa I ao endereço 0x20 ;associa J ao endereço 0x21 ;associa N ao endereço 0x22 ENDC MOVLW 3 ;carrega 3 para W MOVWF I ;I=3 MOVLW 4 ;carrega 4 para W MOVWF J ;J = 4 MOVF I, W ;registrador W = I ADDWF J, W ;registrador W = I + J MOVWF N ;N = I + J TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 9
Introdução à Linguagem de Montagem Pseudo-intruções São comandos para o próprio montador. Também chamadas de diretivas do montador Exemplos: Instruções de alocação de memória para variáveis Definição de início ou fim de procedimentos (PROC/ENDP) Controle de visibilidade de símbolos (PUBLIC, EXTERN) Busca e inclusão de um novo arquivo (INCLUDE) TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 10
Macros Definição, chamada e expansão de macros Definição de macro: maneira de se atribuir um nome a uma parte do código em linguagem de montagem. Após a definição: nome da macro referencia as instruções que a compõem. Macro procedimento Itens da definição: Cabeçalho: marca o início da macro e informa o seu nome Texto: instruções que fazem parte do corpo da macro Pseudo instrução: para marcação do final da macro TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 11
Macros Definição, chamada e expansão de macros Chamada da macro: uso do nome da macro como se fosse um código de operação Expansão da macro: substituição do nome da macro pelo nome da macro (ocorre durante o processo de montagem) Passos: Passo 01: são salvas todas as definições de macro e realizadas todas as expansões Passo 02: o código resultante é processado como se fosse um novo programa-fonte. TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 12
Macros Definição, chamada e expansão de macros Definição de macro (exemplo) MOV EAX, P SWAP MACRO MOV EBX, Q MOV EAX,P MOV Q, EAX MOV EBX,Q MOV P, EBX MOV Q, EAX MOV P, EBX MOV EAX, P ENDM MOV EBX, Q MOV Q, EAX SWAP MOV P, EBX SWAP TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 13
Macros Uso de macros com parâmetros Definição da macro: parâmetros formais Chamada da macro: parâmetros reais Expansão da macro: troca parâmetros formais pelos reais Características avançadas Possibilidade de definição de macros dentro de outras macros Possibilidade de macros chamarem a si mesmas (cuidado com loop infinito) TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 14
Macros Uso de macros com parâmetros (exemplo) MOV EAX, P CHANGE MACRO P1,P2 MOV EBX, Q MOV EAX,P1 MOV Q, EAX MOV EBX,P2 MOV P, EBX MOV P2, EAX MOV P1, EBX MOV EAX, R ENDM MOV EBX, S MOV S, EAX CHANGE P, Q MOV R, EBX CHANGE R, S TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 15
O Processo de Montagem Montadores de dois passos Problema da referência posterior INICIO. ORG GOTO. BANK1 MOVLW.. 0x00 INICIO. B 0000000. TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 16
O Processo de Montagem Montadores de dois passos Abordagem A: Passo 01: coleta de definições de símbolos (labels, macros, etc.) Passo 02: montagem propriamente dita Abordagem B: Passo 01: conversão do programa-fonte para um formato intermediário, gerando uma tabela na memória Passo 02: montagem executada sobre a tabela (as macros são expandidas no passo 01) TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 17
O Processo de Montagem O passo 01 Principal função: contruir a tabela de símbolos O endereço em tempo de execução é dado pelo ILC (instruction location counter) TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 18
O Processo de Montagem O passo 01 Label Opcode Operandos Comentários Tamanho ILC MARIA: MOV EAX,I EAX=I 5 100 MOV EBX,J EBX=J 6 105 ROBERTA: MOV ECX,K ECX=K 6 111 IMUL EAX,EAX EAX=I*I 2 117 IMUL EBX,EBX EBX=J*J 3 119 IMUL ECX,ECX ECX=K*K 3 122 MARILYN: ADD EAX,EBX EAX=EAX+EBX 2 125 ADD EAX,ECX EAX=EAX+ECX 2 127 STEPHANY: JMP DONE Vai para DONE 5 129 TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 19
O Processo de Montagem O passo 01 (Tabela de símbolos) Símbolo Valor Outras informações MARIA: 100 ROBERTA: 111 MARILYN: 125 STEPHANY: 129 Além da tabela de símbolos: Tabela de pseudo-intruções Tabela de códigos de operação Tabela para literais TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 20
O Processo de Montagem O passo 02 Gerar o programa-objeto (objetivo principal) Gerar listagem do programa-fonte e informações da montagem Tornar disponíveis informações que são usadas pelo linker TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 21
Ligação e carga de procedimentos Montadores e compiladores: tradução de um procedimento por vez (resultado em disco) Para execução: formação de um único texto de código (localização e ligação) Ligação não representa mudança de nível Source procedure 1 module 1 Source procedure 2 Translator module 2 Linker Executable binary program Source procedure 3 module 3 TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 22
400 300 200 100 0 500 400 300 200 100 0 module A CALL B MOVE P TO X BRANCH TO 200 module C CALL D MOVE R TO X BRANCH TO 200 600 500 400 300 200 100 0 300 200 100 0 module B CALL C MOVE Q TO X BRANCH TO 300 module D MOVE S TO X BRANCH TO 200 Linguagem de montagem Ligação e carga de procedimentos Módulos-objeto (cada qual no seu espaço de endereçamento próprio) TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 23
1900 1800 1700 1600 1500 1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 100 0 MOVE S TO X BRANCH TO 200 CALL D MOVE R TO X BRANCH TO 200 CALL C MOVE Q TO X BRANCH TO 300 CALL B MOVE P TO X BRANCH TO 200 module B module A module D module C 1900 1800 1700 1600 1500 1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 100 0 MOVE S TO X BRANCH TO 1800 CALL 1600 MOVE R TO X BRANCH TO 1300 CALL 1100 MOVE Q TO X BRANCH TO 800 CALL 500 MOVE P TO X BRANCH TO 300 module B module A module D module C Linguagem de montagem Ligação e carga de procedimentos Módulos na memória (formação da imagem do binário executável e relocaçãco) TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 24
Ligação e carga de procedimentos Passos executados pelo ligador: construção de tabela contendo todos os módulos-objeto e seus respectivos tamanhos atribuição de um endereço inicial a cada módulo-objeto soma os endereços das instruções que fazem referência à memória inserção do endereço dos procedimentos Módulo Tamanho Endereço inicial A 400 100 B 600 500 C 500 1100 D 300 1600 TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 25
End of module Relocation dictionary Machine instructions and constants External reference table Entry point table Identification TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 26
2200 2100 2000 1900 1800 1700 1600 1500 1400 1300 1200 1100 1000 900 800 700 600 500 400 0 MOVE S TO X BRANCH TO 1800 CALL 1600 MOVE R TO X BRANCH TO 1300 CALL 1100 MOVE Q TO X BRANCH TO 800 CALL 500 MOVE P TO X BRANCH TO 300 module B module A module D module C Linguagem de montagem TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 27