13.12.2012 Views

Software Básico - BeKnowledge

Software Básico - BeKnowledge

Software Básico - BeKnowledge

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!