Download - Módulo 5 Arquitetura de Computadores
![Page 1: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/1.jpg)
Módulo 5 – OP2 / PROGRAMAÇÃO DE
MICROPROCESSADORESDisciplina: Arquitetura de Computadores
(21 horas)
![Page 2: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/2.jpg)
CONTEÚDOS
As principais instruções de um Microprocessador tipo.
Realização de pequenos programas de acesso à memória de vídeo como exemplo de aplicação do Set de instruções.
Noção de rotinas e principais conceitos a ela associados. Passagem de parâmetros a rotinas por endereço e por valor.
Principais conceitos associados à utilização de Interrupções num computador.
Utilização dos utilitários disponíveis para fazer "debugging”. Estrutura interna de um sistema operativo tipo. Noção de chamadas ao sistema. Principais chamadas ao sistema disponíveis por um sistema operativo tipo.
Utilização das funções de um S.O., para tratamento de ficheiros (Ex.: Carregar uma imagem, ou uma música para um buffer em memória previamente alocado). Conceito de "device drivers.
Avaliação/Autoavaliação/Apresentações.
![Page 3: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/3.jpg)
Objetivos
• Dominar os conceitos básicos de programação em Assembly.
• Realizar "debugging" de pequenos programas em Assembly utilizando o utilitário apropriado.
• Estudar o funcionamento de um Sistema Operativo a baixo nível.
• Realizar programas simples de exemplo em Assembly de comunicação com o exterior, que utilizem recursos disponíveis pelo Sistema Operativo através de SYSTEM CALLS.
![Page 4: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/4.jpg)
Conceitos
O Assembly foi provavelmente a primeira linguagem de programação da história, surgida na década de 50, época em que os computadores ainda usavam válvulas. A idéia do Assembly é usar um comando em substituição a cada instrução de máquina.
Assembly ou linguagem de montagem é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa, utilizada para programar dispositivos computacionais, como microprocessadores e microcontroladores.
A linguagem de máquina, que é um mero padrão de bits, torna-se legível pela substituição dos valores em bruto por símbolos chamados mnemónicos.
![Page 5: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/5.jpg)
Conceitos
Assembly é a linguagem de programação mais básica disponível para qualquer processador. Com a linguagem Assembly, um programador só trabalha com as operações executadas diretamente sobre a CPU física.
![Page 6: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/6.jpg)
Por que aprender Assembly?
A primeira razão para se trabalhar com o assembler é a oportunidade de conhecer melhor o funcionamento do seu PC, o que permite o desenvolvimento de programas de forma mais consistente.
![Page 7: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/7.jpg)
Por que aprender Assembly?
A segunda razão é que você pode ter um controle total sobre o PC ao fazer uso do assembler.
![Page 8: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/8.jpg)
Por que aprender Assembly?
Uma outra razão é que programas assembly são mais rápidos, menores e mais poderosos do que os criados com outras linguagens.
![Page 9: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/9.jpg)
Por que aprender Assembly?
Ultimamente, o assembler (assembler) permite uma otimização ideal nos programas, seja no seu tamanho ou execução.
![Page 10: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/10.jpg)
Processo de criação de programas
Para a criação de programas são necessários os seguintes passos:
1. Desenvolvimento do algoritmo, estágio em que o problema a ser solucionado é estabelecido e a melhor solução é proposta, criação de diagramas esquemáticos relativos à melhor solução proposta.
2. Codificação do algoritmo, o que consiste em escrever o programa em alguma linguagem de programação; linguagem assembly neste caso específico, tomando como base a solução proposta no passo anterior.
![Page 11: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/11.jpg)
Processo de criação de programas
3. A transformação para a linguagem de máquina, ou seja, a criação do programa objeto, escrito como uma sequência de zeros e uns que podem ser interpretados pelo processador.
4. O último estágio é a eliminação de erros detetados no programa na fase de teste. A correção normalmente requer a repetição de todos os passos, com observação atenta.
![Page 12: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/12.jpg)
SOFTWARE NECESSÁRIO
Para que possamos criar um programa, precisamos de algumas ferramentas:
Primeiro de um editor para criar o programa fonte.
Segundo de um assembler, um programa que ir transformar nossa fonte num programa objeto.
E, terceiro, de um linker (ligador) que ir gerar o programa executável a partir do programa objeto.
![Page 13: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/13.jpg)
SOFTWARE NECESSÁRIO
O editor pode ser qualquer um que dispusermos.
O assembler pode ser o TASM macro assembler da Borland, e o linker ser o TLINK, também da Borland.
Nós devemos criar os programas fonte com a extensão .ASM para que o TASM reconheça e o transforme no programa objeto, um "formato intermediário" do programa, assim chamado porque ainda não é um programa executável e tão pouco um programa fonte.
![Page 14: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/14.jpg)
SOFTWARE NECESSÁRIO
O linker gera a partir de um programa .OBJ, ou da combinação de vários deles, um programa executável, cuja extensão‚ normalmente .EXE, embora possa ser .COM dependendo da forma como for montado e ligado.
![Page 15: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/15.jpg)
1ª Parte - Registos da CPU.
Para o propósito didático, vamos focar registos de 16 bits.
A CPU possui 4 registos internos, cada um de 16 bits.
São eles AX, BX, CX e DX.
São registos de uso geral e também podem ser usados como registos de 8 bits.
Para tanto devemos referenciá-los como, por exemplo, AH e AL, que são, respetivamente, o byte high e o low do registo AX. Esta nomenclatura também se aplica para os registos BX, CX e DX.
![Page 16: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/16.jpg)
Os registos, segundo seus respetivos nomes AX Registo Acumulador
BX Registo Base
CX Registo Contador
DX Registo de Dados
DS Registo de Segmento de Dados
ES Registo de Segmento Extra
SS Registo de Segmento de Pilha
CS Registo de Segmento de Código
BP Registo Apontador da Base
SI Registo de Índice Fonte
DI Registo de Índice Destino
SP Registo Apontador de Pilha
IP Registo Apontador da Próxima Instrução
F Registo de Flag
![Page 17: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/17.jpg)
Estrutura Assembly
Nas linhas do código em Linguagem Assembly existem duas partes:
a primeira é o nome da instrução a ser executada;
a segunda, os parâmetros do comando.
Por exemplo:
add ah bh
Aqui "add" é o comando a ser executado, neste caso uma adição, e "ah" bem como "bh" são os parâmetros.
![Page 18: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/18.jpg)
Estrutura Assembly
Por exemplo:
mov al, 25
No exemplo acima, estamos usando a instrução mov, que significa mover o valor 25 para o registo al.
O nome das instruções nesta linguagem é constituído de 2, 3 ou 4 letras. Estas instruções são chamadas mnemônicos ou códigos de operação, representando a função que o processador executar.
Às vezes instruções aparecem assim: add al,[170]
Os parênteses no segundo parâmetro indica-nos que vamos trabalhar com o conteúdo da célula de memória de número 170, ou seja, com o valor contido no endereço 170 da memória e não com o valor 170, isto é conhecido como "endereçamento direto".
![Page 19: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/19.jpg)
Assembly
Para construirmos os programas com o TASM, devemos estruturar o fonte de forma diferenciada ao que fazíamos com o programa debug.
![Page 20: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/20.jpg)
Estrutura da Programação
É importante incluir as seguintes diretivas assembly:
.MODEL SMALL
Define o melo de memória a usar em nosso programa
.CODE
Define as instruções do programa, relacionado ao segmento de código
.STACK
Reserva espaço de memória para as instruções de programa na pilha
END
Finaliza um programa assembly
![Page 21: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/21.jpg)
MODEL
Modelos Possíveis:
TINY: Code and Data must fit in same 64k segment. Both Code and Data are NEAR.
SMALL: Code & Data have separate segment, but must be each less than 64k Both Code and Data are NEAR. For most applications, this will suffice.
MEDIUM: Code may be larger than 64k, but Data has to be less than 64k Code is FAR, Data is NEAR. COMPACT: Code is less than 64k, but Data may be greater than 64k Code is NEAR, Data is FAR.
LARGE: Both Code & Data can be greather than 64k. Both are FAR, but a single array cannot be greater than 64k. Note that max array size means nothing if you are just writing in assembler. This only matters when you link to C or another high level language.
HUGE: Same as LARGE, but arrays can be greater than 64k. What that means is that the array index is a far pointer, instead of a NEAR one. LARGE and HUGE are identical to the assembler programmer.
![Page 22: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/22.jpg)
STACK
.STACK 200h
Tells the compiler to set up a 200h byte stack upon execution of the program.
NOTE: the size you choose for the stack does not change the size of the file on disk. You can see what I mean by changing the 200h to, say, 400h and then recompiling. The file sizes are identicle.
![Page 23: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/23.jpg)
DATA
.DATA
Simplified, unnamed 'data' segment. This is where those simplified segments become very handy. If you were to write out the segment declaration the regular way, you'd have to write something like this:
![Page 24: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/24.jpg)
CODE
.CODE
Pretty much the same story as above, but this is for the code segment.
![Page 25: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/25.jpg)
END
END
This tells the compiler that we are all done with our program and that it can stop compiling, now.
![Page 26: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/26.jpg)
INSTRUÇÃO MOV
Propósito: Transferência de dados entre células de memória, registos e o acumulador.
Sintaxe:
MOV Destino, Fonte
Destino é o lugar para onde o dado ser movido e Fonte é o lugar onde o dado está.
![Page 27: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/27.jpg)
INSTRUÇÃO MOV
Os diferentes movimentos de dados permitidos para esta instrução são:
*Destino: memória. Fonte: acumulador
*Destino: acumulador. Fonte: memória
*Destino: registo de segmento. Fonte: memória/registo
*Destino: memória/registo. Fonte: registo de segmento
*Destino: registo. Fonte: registo
*Destino: registo. Fonte: memória
*Destino: memória. Fonte: registo
*Destino: registo. Fonte: dado imediato
*Destino: memória. Fonte: dado imediato
![Page 28: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/28.jpg)
Interrupções mais comuns
Int 21H (Interrupção do DOS)
Múltiplas chamadas à funções DOS.
Int 10H (Interrupção do BIOS)
Entrada e Saída de Vídeo.
Int 16H (Interrupção do BIOS)
Entrada e Saída do Teclado.
Int 17H (Interrupção do BIOS)
Entrada e Saída da Impressora.
![Page 29: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/29.jpg)
INSTRUÇÃO MOV
Exemplo:
MOV AX,0006h
MOV BX,AX
MOV AX,4C00h
INT 21h
Este pequeno programa move o valor 0006h para o registo AX, então ele move o conteúdo de AX (0006h) para o registo BX, e finalmente move o valor 4C00h para o registo AX para terminar a execução com a opção 4C da interrupção 21h.
![Page 30: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/30.jpg)
Primeiro passo
Use um editor de texto para criar o programa fonte.
Exemplo:
Bloco de notas (NotePad)
Notepad ++
Entre com as seguintes linhas:
![Page 31: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/31.jpg)
Primeiro exemplo; usar; para fazer comentários em programas assembly
.MODEL SMALL ;modelo de memória
.STACK ;espaço de memória para instruções do programa na pilha
.CODE ;as linhas seguintes são instruções do programa
mov ah,01h ;move o valor 01h para o registrador ah
mov cx,07h ;move o valor 07h para o registrador cx
int 10h ;interrupção 10h
mov ah,4ch ;move o valor 4ch para o registrador ah
int 21h ;interrupção 21h
END ;finaliza o código do programa
![Page 32: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/32.jpg)
Segundo passo
Salvar o arquivo com o seguinte nome: exam1.asm
(Não esquecer de salvá-lo no formato ASCII.)
![Page 33: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/33.jpg)
Terceiro passo
Usar o programa TASM para construir o programa objeto.
C:\>tasm exam1.asm
Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland InternationalAssembling file: exam1.asmError messages: NoneWarning messages: NonePasses: 1Remaining memory: 471k
O TASM só pode criar programas no formato .OBJ, que ainda não pode ser executado.
![Page 34: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/34.jpg)
Quarto passo
Usar o programa TLINK para criar o programa executável.
C:\>tlink exam1.obj
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International
C:\>
Onde exam1.obj é o nome do programa intermediário, .OBJ.
O comando acima gera diretamente o arquivo com o nome do programa intermediário e a extensão .EXE.
É opcional a colocação da extensão .obj no comando.
![Page 35: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/35.jpg)
Quinto passo
Executar o programa executável criado.
C:\>exam1[enter]
Lembre-se, este programa assembly muda o tamanho do cursor no DOS.
![Page 36: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/36.jpg)
Segundo Exemplo
Use qualquer editor e crie o seguinte:
;exemplo2
.model small
.stack
.code
mov ah,2h ;move o valor 2h para o registrador ah
mov dl,2ah ;move o valor 2ah para o registrador dl
;(‚ o valor ASCII do caractere *)
int 21h ;interrupção 21h
mov ah,4ch ;função 4ch, sai para o sistema operacional
int 21h ;interrupção 21h
end ;finaliza o programa
![Page 37: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/37.jpg)
Segundo passo
Salvar o arquivo com o nome: exam2.asm
Não esquecer de salvar em formato ASCII.
![Page 38: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/38.jpg)
Terceiro passo
Usar o programa TASM para construir o programa objeto.
C:\>tasm exam2.asm
Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland InternationalAssembling file: exam2.asmError messages: NoneWarning messages: NonePasses: 1Remaining memory: 471k
![Page 39: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/39.jpg)
Quarto passo
Usar o programa TLINK para criar o programa executável.
C:\>tlink exam2.obj
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International
C:\>
![Page 40: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/40.jpg)
Quinto passo
Executar o programa:
C:\>exam2[enter]
*
C:\>
este programa imprime o caracter * na tela.
![Page 41: Módulo 5 Arquitetura de Computadores](https://reader035.vdocuments.com.br/reader035/viewer/2022081419/55be5028bb61eb36598b45c4/html5/thumbnails/41.jpg)
Exemplos de programas a fazer em Assembly
http://assembly.happycodings.com/