Software Básico - BeKnowledge
Software Básico - BeKnowledge
Software Básico - BeKnowledge
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Software</strong> <strong>Básico</strong><br />
Fernando Augusto FF. Lordão<br />
softwarebasicounipe@grupos.com.br<br />
fernandolordao@gmail.com<br />
Assembly 8086 – Montadores<br />
�� Processo de geração de um executável<br />
foco da<br />
disciplina<br />
Prof. Fernando Lordão<br />
compilador<br />
montador<br />
linkeditor<br />
Código fonte em alto<br />
nível (C, Pascal etc)<br />
Programa fonte em<br />
Assembly<br />
Programa objeto Bibliotecas<br />
Programa executável<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
1
Assembly 8086 – Montadores<br />
�� Diferenças de sintaxe<br />
� A sintaxe pode variar entre montadores, porém o<br />
código de uma instrução gerado para um mesmo<br />
processador será idêntico<br />
� Diferenças na ordem de operandos, formato de constantes,<br />
nomenclatura de registradores, sensibilidade<br />
maíusculas/minúsculas etc.<br />
� Exemplo:<br />
Prof. Fernando Lordão<br />
Intel / Microsoft GNU / as<br />
MOV AL, 31h mov $0x31, %al<br />
1011 0000 0011 0001 ≡ B0 31<br />
softwarebasicounipe@grupos.com.br<br />
Assembly 8086 – Ambiente<br />
�� Sistema Operacional<br />
� Será utilizado um ambiente real ao invés de um<br />
simulador<br />
� MS-DOS<br />
� Pode ser utilizado o Prompt de Comando disponível no<br />
Windows, que reproduz um ambiente MS-DOS<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
2
Assembly 8086 – Ambiente<br />
�� Editor<br />
� Viabiliza a edição do código fonte Assembly, podendo<br />
ser qualquer editor que gere arquivos em formato texto<br />
plano<br />
� A extensão padrão é “.asm”<br />
� EDIT<br />
� Edit Editor nativo ti ddo MS MS-DOS DOS<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
Assembly 8086 – Ambiente<br />
�� Montador<br />
� Gera código objeto pronto para ser ligado à possíveis<br />
bibliotecas auxiliares<br />
� TASM (Turbo Assembler)<br />
� Sintaxe:<br />
tasm prog [/l]<br />
/l → cria arquivo “ .lst lst” contendo listagem de possíveis os erros<br />
encontrados no programa<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
3
Assembly 8086 – Ambiente<br />
�� Linkeditor<br />
� Liga o código do programa com o código das bibliotecas<br />
auxiliares, montando um código binário cuja seqüência<br />
de bits corresponde a um encadeamento de códigos<br />
binários das instruções disponibilizadas pelo hardware<br />
de destino<br />
�� TLINK<br />
� Sintaxe:<br />
tlink prog<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
Assembly 8086 – Ambiente<br />
�� Depurador<br />
� Permite o acompanhamento da execução passo-apasso,<br />
mostrando o código do programa, o conteúdo dos<br />
registradores e o conteúdo da memória.<br />
� DEBUG<br />
� Sintaxe:<br />
debug prog<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
4
Assembly 8086 – Ferramentas<br />
�� Ferramentas Úteis<br />
� Tabela resumida de instruções Assembly da família Intel<br />
para consultar formato e efeito das instruções mais<br />
comuns<br />
� Disponível em http://www.jegerlehner.ch/intel<br />
� Tabela de códigos ASCII para consultar códigos de<br />
caracteres quando necessário e interpretar conteúdo de<br />
memória<br />
� Disponível em http://www.tabelaascii.com<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
Assembly 8086 – Programando<br />
�� Forma geral de um programa<br />
pilha segment stack<br />
db 128 dup(0) ;reserva espaco de memoria<br />
pilha ends<br />
dados segment<br />
msg db "Ola, este programa foi escrito em Assembly!!!", "$"<br />
dados ends<br />
codigo segment<br />
assume ss:pilha, cs:codigo, ds:dados, es:dados<br />
main proc far<br />
...<br />
main endp<br />
codigo ends<br />
end main<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
5
Assembly 8086 – Programando<br />
�� Forma geral de um programa (detalhe do código)<br />
codigo segment<br />
assume ss:pilha, cs:codigo, ds:dados, es:dados<br />
main proc far<br />
mov ax,dados ; inicialização<br />
mov ds,ax ; inicialização<br />
mov ah,09 ;funcao do DOS para exibir de strings<br />
lea dx,msg ;carrega endereco da string<br />
int 21h ;interrupcao para acionar funcoes do DOS<br />
mov ax,4c00h ;funcao do DOS para encerrar programa<br />
int 21h ;interrupcao para acionar funcoes do DOS<br />
main endp<br />
codigo ends<br />
end main<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
8086 – Endereçamento<br />
�� O 8086 disponibiliza algumas maneiras diferentes<br />
de se obter os valores utilizados em uma operação,<br />
ou seja, os operandos.<br />
� Estas diferentes maneiras são chamadas modos<br />
de endereçamento.<br />
�� Aprenda mais sobre endereçamento em:<br />
� ZELENOVSKY, Ricardo; MEDONÇA, Alexandre. Hardware e<br />
Interfaceamento. 4ª edição. Capítulo 2.<br />
� http://www.dcc.unicamp.br/~celio/mc404s2-<br />
03/addr_modes/intel_addr.html<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
6
8086 – Endereçamento<br />
�� Imediato<br />
� O operando faz parte da própria instrução, podendo ser<br />
entendido como uma constante.<br />
� Sintaxe Assembly : MOV AX, 2233h<br />
� Código da Instrução : B8 33 22<br />
Prof. Fernando Lordão<br />
Código da<br />
operação<br />
MOV com<br />
destino AX<br />
Código<br />
completo<br />
da instrução<br />
8086 – Endereçamento<br />
�� Direto<br />
Valor que<br />
será utilizado<br />
na operação<br />
softwarebasicounipe@grupos.com.br<br />
� Referencia um offset (deslocamento), ou seja, uma<br />
posição relativa a um seguimento base, onde será<br />
buscado o valor a ser utilizado na operação<br />
� Sintaxe Assembly : MOV AX, DS:[1234h]<br />
� Código da Instrução : A1 34 12<br />
Código da<br />
operação<br />
MOV com<br />
destino AX e<br />
offset em DS<br />
Prof. Fernando Lordão<br />
Offset<br />
do operando<br />
na memória<br />
Código<br />
completo<br />
da instrução<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
7
8086 – Endereçamento<br />
�� Indireto<br />
� Referencia um registrador que contém o offset<br />
(deslocamento), ou seja, uma posição relativa ao<br />
seguimento base, onde será buscado o valor a ser<br />
utilizado na operação<br />
� Sintaxe Assembly : MOV AL, [BX]<br />
�� Código da Instrução :8A07 : 8A 07<br />
O próprio código indica<br />
tratar-se de um MOV<br />
com destino AL e<br />
offset armazenado em BX<br />
Prof. Fernando Lordão<br />
Código<br />
completo<br />
da instrução<br />
8086 – Endereçamento<br />
softwarebasicounipe@grupos.com.br<br />
�� Indexado<br />
� Referencia um registrador índice e um offset. A soma<br />
dos dois determina o deslocamento final onde será<br />
buscado o valor a ser utilizado na operação.<br />
� Sintaxe Assembly : MOV AL, [SI+01h]<br />
� Código da Instrução : 8A 44 01<br />
Código da<br />
operação<br />
MOV com<br />
destino AL e<br />
índice SI<br />
Prof. Fernando Lordão<br />
Offset<br />
utilizado<br />
Código<br />
da instr<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
8
8086 – Endereçamento<br />
�� Indexado relativo à base<br />
� Referencia um registrador base e um índice. A soma dos<br />
dois determina o deslocamento final onde será buscado<br />
o valor a ser utilizado na operação.<br />
� Sintaxe Assembly : MOV AL, [BX+SI]<br />
� Código da Instrução : 8A 00<br />
O próprio código indica<br />
tratar-se de um MOV<br />
com destino AL, índice SI<br />
e base BX<br />
Prof. Fernando Lordão<br />
Código<br />
da instr<br />
8086 – Endereçamento<br />
softwarebasicounipe@grupos.com.br<br />
�� Indexado relativo à base com deslocamento<br />
� Referencia um registrador índice, um registrador base e<br />
um offset. A soma dos três determina o deslocamento<br />
final onde será buscado o valor a ser utilizado.<br />
� Sintaxe Assembly : MOV AL, [BX+SI+01h]<br />
� Código da Instrução : 8A 40 01<br />
Código da operação<br />
indica MOV com<br />
destino AL, índice SI<br />
e base BX<br />
Prof. Fernando Lordão<br />
Offset<br />
utilizado<br />
Código<br />
da instr<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
9
8086 – Endereçamento<br />
�� Método prático para endereçar memória<br />
� Para construir endereçamentos válidos facilmente, sem<br />
a necessidade de memorizar todas formas possíveis,<br />
considere o esquema da figura abaixo e escolha<br />
livremente um ou nenhum item de cada coluna.<br />
Prof. Fernando Lordão<br />
� EX: tomar BX na segunda coluna e DI na terceira → [BX+DI]<br />
tomar OFFSET na primeira coluna e DI na terceira → [DI+OFFSET]<br />
tomar OFFSET, BX, SI → [BX+SI+OFFSET]<br />
[BX+BP] é inválido, pois toma dois itens da mesma coluna<br />
8086 – Endereçamento<br />
�� Observação importante<br />
softwarebasicounipe@grupos.com.br<br />
� Por padrão, sempre que o endereçamento fizer<br />
referência a BP, o seguimento base será SS (Stack<br />
Segment), caso contrário o seguimento base será DS<br />
(Data Segment).<br />
� Se a instrução precisa acessar uma região de memória<br />
de outro seguimento é possível indicar o seguimento<br />
desejado explicitamente.<br />
� Ex: MOV AL, [BP] ; utiliza SS como padrão<br />
MOV AL, ES:[BP] ; utiliza ES solicitado explicitamente<br />
Prof. Fernando Lordão<br />
softwarebasicounipe@grupos.com.br<br />
9/14/2010<br />
10