A FERRAMENTA SID E INSTRUÇÕES DO 8086/88 MÓDULO M 01

Propaganda
MÓDULO
A FERRAMENTA SID
M 01
E INSTRUÇÕES DO 8086/88
OBJETIVOS
•
•
•
•
Saber utilizar a ferramenta SID, seus comandos e recursos
Conhecer os registradores dos microprocessadores 8086/88
Conhecer o conjunto de instruções dos microprocessadores 8086/88
Conhecer os modos de endereçamento dos microprocessadores 8086/88
PARTE I - A FERRAMENTA SID
O SID é a ferramenta que será utilizada como suporte ao desenvolvimento de software dos microprocessadores
8086/88. Ele oferece comandos para carregar e executar programas, examinar registradores, posições de
memória, etc.
Este experimento pretende servir como introdução ao uso do SID com seus diversos comandos. A
apresentação dos seus recursos será feita ao longo do curso. No entanto é necessário se familiarizar com seus
conceitos básicos para que nos experimentos seguintes, o foco do trabalho passe a ser as características do
microprocessador.
As instruções sobre o SID estão resumidas na apostila “SID – Manual de Referência”, que deve ser
adquirida pelo aluno. Lá estão descritos como entrar e sair do sistema, como acionar esse programa, e os
diversos comandos disponíveis. Para responder às questões neste experimento, leia atentamente a apostila.
PARTE II – OS MICROPROCESSADORES 8086/88
Em 1978, a Intel Corporation lançou pela primeira vez um microprocessador de 16 bits, o 8086, utilizando
tecnologia HMOS. Este processador oferece uma série de novos recursos não disponíveis nos micros anteriores,
como por exemplo, as instruções multiplicar e dividir, entre outras. A versão 8088 apresenta barramento de
dados com oito linhas, sendo nos demais aspectos similar ao 8086.
1. O Conjunto de Registradores
Na apostila “Assembly – Manual de Referência” você encontrará um mapa dos registradores da CPU do
8086/88. Os registradores de uso geral são usados para armazenar operandos e resultados. Podem ser usados
como quatro registradores de 16 bits ou oito registradores de 8 bits. Esses registradores podem vir a
desempenhar funções específicas, que serão discutidas ao longo do curso.
16 BITS
AX
BX
CX
DX
8 BITS (MSB)
AH
BH
CH
DH
8 BITS (LSB)
AL
BL
CL
DL
MSB – Most Significant Byte (Byte Mais Significativo)
LSB – Least Significant Byte (Byte Menos Significativo)
Quando um programa é executado, o conteúdo do registrador IP (Instruction Pointer) será o endereço da
próxima instrução a ser executada. A função dos demais registradores será discutida durante a apresentação do
conjunto de instruções. No entanto é necessário reconhecê-los, já neste experimento, de modo a poder utilizar os
comandos do SID.
2. Memória
Do ponto de vista do programador, a memória se comporta como um conjunto de endereços onde é possível
“escrever” e “ler” informações. Cada locação, ou endereço, é
identificada por um número.
Endereço
Conteúdo
A tabela ao lado representa um mapa de memória onde os
0000
0A
endereços são de 16 bits e os conteúdos armazenados são de 8 bits.
0001
B2
Endereços e conteúdos estão representados em hexadecimal.
....
....
A memória pode ser vista como uma longa lista de endereços,
....
....
ou como um agrupamento de endereços em blocos denominados
FFFE
7F
páginas. Aqui será utilizado o conceito de página, de modo que os
FFFF
3C
dígitos mais significativos do endereço representam a página, e os
dígitos menos significativos identificam a posição dentro da página.
A página 10, por exemplo, compreenderá os endereços de 1000 a 10FF. Cabem aqui algumas observações:
•
•
•
Com 16 bits é possível endereçar 216 = 64K locações. Para aumentar essa faixa de endereços pode-se
estender o tamanho de palavra de endereço, ou utilizar técnicas de gerenciamento de memória. Os
microprocessadores 8086/88 utilizam o gerenciamento de memória por segmentos, que será discutido
oportunamente.
Os conteúdos de uma área de memória podem representar programas em linguagem de máquina, dados
numéricos, texto codificado em ASCII, etc. O programador deve estar atento para evitar erros, que levem,
por exemplo, a executar programas na área de dados.
Em memórias, cujo dado armazenado seja de 8 bits, é possível armazenar “dados longos”, isto é, com mais
de 8 bits. Neste caso o dado ocupará o número necessário de locações sucessivas de memória. Em geral, os
microprocessadores da Intel, quando armazenam dados longos, armazenam primeiro o LSB e em seguida o
MSB, isto é os bytes menos significativos ocupam os endereços menores.
3. A Instrução “MOV” e alguns dos Modos de Endereçamento do 8086/88
Uma instrução em assembly consiste do código da operação a ser realizada (OPCODE), seguido do
operando ou da informação sobre sua localização. Considere a instrução de transferência de dados no 8086/88:
MOV destino, origem
O mnemônico MOV identifica a operação, e os campos, denominados origem e destino, identificam
respectivamente de onde e para onde o operando é transferido. Esses campos podem localizar os operandos de
diversas maneiras (modos de endereçamento). Alguns desses modos são exemplificados a seguir. Cada exemplo
é apresentado para operandos de oito bits e para operandos de dezesseis bits:
Endereçamento Imediato – O operando que será transferido, segue o código da operação (faz parte da instrução).
Ex:
MOV AL,05
MOV BX,3DF7
Endereçamento por Registrador – O operando a ser transferido, está armazenado em um registrador da CPU.
Ex:
MOV CH,CL
MOV AX,BX
Endereçamento Direto – O operando a ser transferido está armazenado na memória, no endereço fornecido na
instrução. Ex:
MOV BL,[0100]
MOV AX,[0200]
Neste último exemplo, uma vez que AX é de dezesseis bits, o conteúdo da locação [0200] será transferido
para AL, e o conteúdo de [0201] para AH.
4. Programação Assembly
Um programa escrito em assembly, ou programa fonte, consiste de uma seqüência de instruções na forma de
mnemônicos. Programas fonte que serão testados sob o SID devem ser finalizados com a instrução INT 3
(interrupção do tipo 3). Não se deve usar a instrução HLT (parar), pois isso desativaria inclusive o SID.
Para que um programa fonte possa ser executado, deve ser convertido em programa objeto, no qual cada
instrução é representada por um código numérico. No 8086/88 cada instrução em linguagem de máquina
(programa objeto) ocupa de um a seis bytes de comprimento, dependendo do modo de endereçamento.
Como exemplo, considere o programa a seguir, representado nas formas de código fonte e de código objeto.
0100
0102
0105
0106
Programa fonte
MOV AL, A5
MOV AX, [C200]
INT
3
.....
0100
0101
0102
0103
0104
0105
Programa objeto
B0
A5
A1
00
C2
CC
Verifique, para cada instrução no código fonte, o número de bytes que constituem o seu código objeto.
Observe que a primeira instrução ocupa dois bytes, um deles com o “OPCODE” da instrução (B0), o outro com
o operando (A5). A segunda instrução ocupa três bytes, o primeiro com o “OPCODE” e os dois seguintes com o
endereço do operando. A última instrução consiste apenas do “OPCODE”, ocupando apenas uma posição de
memória. Dependendo do modo de endereçamento, outras instruções podem utilizar dois bytes para o
“OPCODE” , ou duas referências a operandos, podendo utilizar até seis bytes.
O programa fonte é voltado para o programador, facilitando sua concepção e análise. Por outro lado, o
programa objeto é codificado de modo a ser interpretado e executado pelo microprocessador. Em geral, o
programa é editado e carregado na máquina no formato fonte (linguagem assembly), em seguida, é convertido
para o formato objeto (linguagem de máquina) utilizando algum recurso de software, e só então pode ser
executado. No laboratório, o SID faz a conversão de forma automática, de modo que, ao concluir o carregamento
do programa fonte o programa objeto já estará na memória.
Durante a concepção do programa fonte, fica difícil estabelecer o endereço de cada instrução, uma vez que
este endereço depende do número de bytes que cada instrução irá ocupar. Para facilitar este trabalho, o programa
tradutor-montador (assembler) necessita apenas da indicação do endereço inicial do programa, ou seja, o
endereço de origem (ORG), ou mesmo da área de dados.
5. Comentários
Todos os guias de experimentos do laboratório possuem uma introdução teórica, como é o caso deste. Você deve
ter observado que a teoria apresentada é bastante superficial. Os guias devem ser considerados como uma
orientação sobre o que você deve estudar, não como textos completos.
Os conceitos vistos aqui sobre o microprocessador provavelmente já lhe foram apresentados, de forma bem
mais completa, nas aulas teóricas. Consulte suas notas de aula, livros, apostilas, antes de fazer a preparação e de
ir ao laboratório. Você só tem a ganhar.
Quanto ao SID, não foi feita uma introdução teórica porque todas as informações que você vai necessitar
estão na apostila indicada em “Referências”, sendo portanto desnecessário apresentá-las aqui.
6. Referências
“SID – Manual de Referência”, FACAPE
“Assembly – Manual de Referência”, do microprocessador 8086/88, Intel Co., 1978
PREPARAÇÃO
1. Qual a função do programa SID ?
2. A seguir temos um exemplo de carregamento de dados em locações sucessivas de memória, utilizando o
comando S: #S0100.
0100 00 37
0101 00 #37
0102 00 'A'
0103 00 A
0104 00 "ABC
0107 00 A+’A’
0108 00 .
Após a execução deste comando, qual o conteúdo, em hexadecimal, das locações envolvidas?
3. Quais são os registradores do 8086/88 que oferecem opção de uso com 8 e 16 bits?
4. Considere o programa fonte a seguir. Este programa carrega o registrador AL com 20H (#32), e decrementa
esse valor até zero. Portanto, o laço (loop) entre os endereços 1002 e 1004, é executado trinta e duas vezes.
endereço
instrução
ação
1000
1002
1004
1006
MOV
DEC
JNZ
INT
; carrega AL com 20 (#32)
; decrementa AL
; se AL ≠ 0, retorna para 1002
; devolve o comando ao SID
AL, 20
AL
1002
3
a. Quais os comandos (e parâmetros) do SID que devem ser usados para obter o programa objeto?
b. Qual o formato do comando P para interromper a execução após o registrador AL ter sido decrementado
pela décima segunda vez? Qual o conteúdo do registrador AL após a parada?
5. Escreva um programa para carregar AX, BX e CX com operandos provenientes da memória (modo de
endereçamento direto). Escolha endereços para os dados (observe que os registradores são de dezesseis bits)
e para o início do programa. Considere que os dados ocupam uma região contínua da memória.
6. Considerando o programa do item anterior, quais comandos (e parâmetros) devem ser usados para:
a.
b.
c.
d.
e.
Carregar o programa?
Carregar os dados?
Listar o programa?
Executar o programa?
Examinar os resultados?
7. Quais comandos (incluindo parâmetros) devem ser usados para:
a. Preencher todas as locações de memória da página 0B com FF ?
b. Examinar o resultado?
c. Copiar o conteúdo da página 0B para a página 03 ?
8. Para que servem os comandos T e U, e qual a diferença entre eles?
9. Para cada instrução do programa a seguir, identifique o modo de endereçamento utilizado, a origem e o
destino dos operandos:
ORG 0200
0200 MOV
0203 MOV
0205 MOV
0209 INT
AX, 031A
BL, AH
BH, [2000]
3
10.Que resultado você espera ver na tela após ser digitado o comando:
a. #H0010,0005
b. #H'A'
11.Uma vez iniciada a execução de um programa através do comando G, quais as formas possíveis de suspender
a execução?
Download