+ All Categories
Home > Documents > Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c)...

Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c)...

Date post: 17-Apr-2015
Category:
Upload: internet
View: 104 times
Download: 1 times
Share this document with a friend
64
Assembly Language for Intel- Assembly Language for Intel- Based Computers, 5 Based Computers, 5 th th Edition Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may modify and copy this slide show for your personal use, or for use in the classroom, as long as this copyright statement, the author's name, and the title are not changed. Slides prepared by the author Revision date: June 4, 2006 Kip R. Irvine
Transcript
Page 1: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Assembly Language for Intel-Based Assembly Language for Intel-Based Computers, 5Computers, 5thth Edition Edition

Capítulo 5: Procedimentos

(Procedure)

(c) Pearson Education, 2002. All rights reserved. You may modify and copy this slide show for your personal use, or for use in the classroom, as long as this copyright statement, the author's name, and the title are not changed.

Slides prepared by the author

Revision date: June 4, 2006

Kip R. Irvine

Page 2: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 2

ÍndiceÍndice

• Linking de uma biblioteca externa• Biblioteca do autor deste livro• Operações de pilha• Definindo e usando Procedimentos• Projeto de programas usando Procedimentos

Page 3: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 3

Linking de uma biblioteca externaLinking de uma biblioteca externa

• Biblioteca de Linking• Chamando um procedimento de biblioteca• Fazendo o Linking para uma biblioteca• Procedimentos de biblioteca• Seis Exemplos

Page 4: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 4

Biblioteca de LinkingBiblioteca de Linking

• É um arquivo contendo procedimentos que foi compilado para o código de máquina• construído de um ou mais arquivos OBJ

• Para construir uma biblioteca, . . .• começa com um ou mais arquivos fonte ASM

• converte cada um em arquivo OBJ

• cria um arquivo biblioteca vazio (extensão .LIB)

• adiciona os arquivos OBJ no arquivo biblioteca, usando o utilitário LIB da Microsoft

Page 5: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 5

Chamando um procedimento de bibliotecaChamando um procedimento de biblioteca

INCLUDE Irvine32.inc.code

mov eax,1234h ; input argumentcall WriteHex ; show hex numbercall Crlf ; end of line

• Chama-se um procedimento de biblioteca usando instrução CALL. Alguns procedimentos requerem argumentos de entrada. A diretiva INCLUDE copia os protótipos de procedimentos (declarações).

• O seguinte exemplo mostra “00001234" na tela:

Page 6: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 6

Fazendo o Linking para uma bibliotecaFazendo o Linking para uma biblioteca• O programa (your program) faz o linking ao Irvine32.lib usando

um comando dentro do arquivo batch chamado make32.bat.• Nota-se os dois arquivos LIB: Irvine32.lib e kernel32.lib

• O último é parte do Microsoft Win32 Software Development Kit (SDK)

Page 7: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 7

Próxima seçãoPróxima seção

• Linking de uma biblioteca externa• Biblioteca do autor deste livro• Operações de pilha• Definindo e usando Procedimentos• Projeto de programas usando Procedimentos

Page 8: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 8

Procedimentos de biblioteca Procedimentos de biblioteca (1 de 4)(1 de 4)

CloseFile – Fecha um arquivo aberto de disco

Clrscr – Limpa a tela e coloca o cursor no canto esquerdo superior

CreateOutputFile – Cria um novo arquivo de disco para escrever no modo output

Crlf – Escreve a seqüência de fim de linha na saída padrão

Delay - Pausa a execução de programa por um intervalo de n milisegundos

DumpMem - Escreve um bloco de memória em hex na saída padrão

esi – endereço, ecx – numero de elementos, ebx - tipo

DumpRegs – Mostra os registradores de uso geral e flags (hex)

GetCommandtail – Copia os argumentos da linha de comando em array de bytes

GetMaxXY – Obtem o número de colunas, linhas do buffer de window da tela

GetMseconds – Retorna os milisegundos passados a partir da meia-noite

Page 9: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 9

Procedimentos de biblioteca Procedimentos de biblioteca (2 de 4)(2 de 4)

GetTextColor – Retorna as cores ativas de texto (frente e fundo) da tela

Gotoxy – Localiza o cursor na linha e coluna da tela

IsDigit – Aciona o flag Zero se AL contem código ASCII de dígito decimal (0–9)

MsgBox, MsgBoxAsk – Mostra caixa de mensagem popup

OpenInputFile – Abre um arquivo existente para entrada

ParseDecimal32 – Converte uma cadeia de inteiros sem sinal para binários

ParseInteger32 – Converte uma cadeia de inteiros com sinal para binários

Random32 - Gera inteiro pseudoaleatório de 32-bits no intervalo de 0 a FFFFFFFFh

Randomize – Semeia o gerador de número aleatório

RandomRange – Gera um inteiro pseudoaleatório dentro de um intervalo especificado

ReadChar – Lê um caractere da entrada padrão

Page 10: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 10

Procedimentos de biblioteca Procedimentos de biblioteca (3 de 4)(3 de 4)

ReadFromFile – Lê um arquivo de entrada de disco num buffer

ReadDec – Lê um inteiro em decimal sem sinal de 32-bits do teclado

ReadHex – Lê um inteiro em hexadecimal de 32-bits do teclado

ReadInt – Lê um inteiro em decimal com sinal de 32-bits do teclado

ReadKey – Lê caractere do buffer de entrada do teclado

ReadString – Lê cadeia da entrada padrão, terminada por [Enter]

SetTextColor – Aciona as cores de frente e de fundo para todas as saídas subseqüentes para a tela

StrLength – Retorna o comprimento de uma cadeia

WaitMsg – Mostra mensagem e espera pela tecla Enter ser pressionada

WriteBin – Escreve um inteiro sem sinal de 32-bits em formato ASCII binário.

eax deve conter o número a ser escrito

WriteBinB – Escreve inteiro em binário no formato byte, word ou doubleword

eax deve conter o número a ser escrito

ebx deve conter o tipo (1,2, ou 4)

Page 11: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 11

Procedimentos de biblioteca Procedimentos de biblioteca (4 de 4)(4 de 4)

WriteChar – Escreve um caractere na saída padrão

al deve conter o caractere a ser escrito

WriteDec – Escreve um inteiro sem sinal de 32-bits em formato decimal

eax deve conter o número inteiro a ser escrito

WriteHex – Escreve um inteiro sem sinal de 32-bits em formato hexadecimal

eax deve conter o número inteiro a ser escrito

WriteHexB – Escreve um número de 32 bits em byte, word ou doubleword em hexadecimal

eax deve conter o número inteiro , ebx deve conter o tipo (1,2 ou 4)

WriteInt – Escreve um inteiro com sinal de 32-bits em formato decimal

eax deve coner o número inteiro a ser escrito

WriteString – Escreve uma cadeia terminada por zero na tela

edx deve conter o endereço da cadeia

WriteToFile – Escreve buffer no arquivo de saída

WriteWindowsMsg – Mostra a mensagem de erro mais recente gerada pelo MS-Windows

Page 12: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 12

Exemplo 1Exemplo 1

.codecall Clrscrmov eax,500call Delaycall DumpRegs

Limpar a tela, atrasar o programa por 500 milisegundos e mostrar os registradores e flags.

EAX=00000613 EBX=00000000 ECX=000000FF EDX=00000000

ESI=00000000 EDI=00000100 EBP=0000091E ESP=000000F6

EIP=00401026 EFL=00000286 CF=0 SF=1 ZF=0 OF=0

saída:

Page 13: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 13Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 13

Exemplo 1-bExemplo 1-b

.data mywords WORD 1,2,3,4 .code

call Clrscr mov esi, offset mywords

mov ecx, 4 mov ebx, 2 call DumpMem

Limpar a tela e mostrar os dados da memória em Hexadecimal.

Dump of offset 00405000

---------------------------------

0001 0002 0003 0004

saída:

Page 14: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 14

Exemplo 2Exemplo 2

.datastr1 BYTE "Assembly language is easy!",0

.codemov edx,OFFSET str1call WriteStringcall Crlf

Mostrar uma cadeia terminada por zero e mover o cursor ao início da linha seguinte.

Page 15: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 15

Exemplo 2aExemplo 2a

.datastr1 BYTE "Assembly language is easy!",0Dh,0Ah,0

.codemov edx,OFFSET str1call WriteString

Mostrar uma cadeia terminada por zero e mover o cursor ao início da linha seguinte (usar CR/LF incorporado)

Page 16: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 16

Exemplo 3Exemplo 3

IntVal = 35.code

mov eax,IntValcall WriteBin ; display binarycall Crlfcall WriteDec ; display decimalcall Crlfcall WriteHex ; display hexadecimalcall Crlf

Mostrar um inteiro sem sinal em binário, decimal e hexadecimal, em linhas separadas.

0000 0000 0000 0000 0000 0000 0010 00113500000023

saída:

Page 17: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 17

Exemplo 4Exemplo 4

.datafileName BYTE 80 DUP(0) BYTE 0.code

mov edx,OFFSET fileNamemov ecx,SIZEOF fileName call ReadString

Entrar com uma cadeia digitada pelo usuário. EDX aponta para a cadeia e ECX especifica o número máximo de caracteres que o usuário pode entrar.

Um byte zero automaticamente termina o string.

Page 18: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 18

Exemplo 5Exemplo 5

.codemov ecx,10 ; loop counter

L1: mov eax,100 ; ceiling valuecall RandomRange ; generate random intcall WriteInt ; display signed intcall Crlf ; goto next display lineloop L1 ; repeat loop

Gerar e mostrar dez inteiros com sinal pseudoaleatórios no intervalo 0 – 99. Mostrar cada inteiro na tela com WriteInt em linha separada.

Page 19: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 19

Exemplo 6Exemplo 6

.datastr1 BYTE "Color output is easy!",0

.codemov eax,yellow + (blue * 16)call SetTextColormov edx,OFFSET str1call WriteStringcall Crlf

Mostrar uma cadeia terminada com zero com caracteres amarelos sobre fundo azul.

A cor de fundo é multiplicada por 16 antes de ser adicionada à cor de frente.

Page 20: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 20

Próxima seçãoPróxima seção

• Linking de uma biblioteca externa• Biblioteca do autor deste livro• Operações de pilha• Definindo e usando Procedimentos• Projeto de programas usando Procedimentos

Page 21: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 21

Operações de pilhaOperações de pilha

• Pilha de tempo de execução• Operação PUSH • Operação POP • Instruções PUSH e POP • Usando PUSH e POP• Exemplo: Revertendo uma cadeia• Instruções relacionadas

Page 22: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 22

Pilha de tempo de execuçãoPilha de tempo de execução

• Imagine uma pilha de pratos . . .• Pratos são somente adicionados no topo

• Pratos são somente removidos do topo

• Estrutura LIFO

Page 23: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 23

Pilha de tempo de execuçãoPilha de tempo de execução

• Gerenciado pelo CPU, usando dois registradores• SS (stack segment)

• ESP (stack pointer) *

* SP in Real-address mode

Page 24: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 24

Operação PUSH Operação PUSH (1 de 2) (1 de 2)

• Uma operação push de 32-bits decrementa o ponteiro de pilha de 4 e copia um valor na posição apontada pelo ponteiro de pilha.

Page 25: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 25

Operação PUSH Operação PUSH (2 de 2)(2 de 2)

• A mesma pilha após carregar mais dois inteiros:

A pilha cresce para baixo. A área abaixo de ESP está sempre disponível (a menos que ocorra overflow de pilha).

Page 26: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 26

Operação POP Operação POP

• Copia o valor da pilha [ESP] num registrador ou variável.• Adiciona n a ESP, onde n é 2 ou 4.

• valor de n depende do atributo do operando que recebe o dado

Page 27: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 27

Instruções PUSH e POPInstruções PUSH e POP

• Sintaxe do PUSH:• PUSH r/m16

• PUSH r/m32

• PUSH imm32

• Sintaxe do POP:• POP r/m16

• POP r/m32

Page 28: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 28

Usando PUSH e POPUsando PUSH e POP

push esi ; push registerspush ecxpush ebx

mov esi,OFFSET dwordVal ; display some memorymov ecx,LENGTHOF dwordValmov ebx,TYPE dwordValcall DumpMem

pop ebx ; restore registerspop ecxpop esi

Salvar e recuperar registradores quando eles contem valores importantes. As instruções PUSH e POP ocorrem em ordem oposta.

Page 29: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 29

Exemplo: loop aninhadoExemplo: loop aninhado

mov ecx,100 ; set outer loop countL1: ; begin the outer loop

push ecx ; save outer loop count

mov ecx,20 ; set inner loop countL2: ; begin the inner loop

;;loop L2 ; repeat the inner loop

pop ecx ; restore outer loop countloop L1 ; repeat the outer loop

Quando se cria um loop aninhado, faz o push do contador do loop externo antes de entrar no loop interno:

Page 30: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 30

Exemplo: Revertendo uma cadeiaExemplo: Revertendo uma cadeia

• Usar um loop com endereçamento indexado• Fazer o Push de cada caracter na pilha• Começando pelo início da cadeia, fazer o pop da pilha em

ordem reversa, inserir cada caracter de volta à cadeia

• Q: porque cada caracter deve ser colocado em EAX antes de ser carregado (pushed)?

Porque somente word (16-bit) ou doubleword (32-bit) podem ser carregados na pilha.

Page 31: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 31

Sua vez . . .Sua vez . . .

• Usando o programa de inversão de cadeia:

• #1: Modificar o programa tal que o usuário possa introduzir uma cadeia contendo de 1 a 50 caracteres.

• #2: Modificar o programa tal que seja introduzida uma lista de inteiros de 32 bits pelo usuário, e mostre os inteiros em ordem reversa.

Page 32: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 32

Instruções relacionadasInstruções relacionadas

• PUSHFD e POPFD• push e pop do registrador EFLAGS

• PUSHAD faz o push dos registradores de uso geral de 32-bit na pilha • ordem: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI

• POPAD faz o pop dos mesmos registradores da pilha em ordem reversa• PUSHA e POPA faz o mesmo com registradores de 16 bits

Page 33: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 33

Sua vez . . .Sua vez . . .

• Escrever um programa que faz o seguinte:• Atribui valores inteiros a EAX, EBX, ECX, EDX, ESI e EDI

• Usa PUSHAD para carregar os registradores de uso geral na pilha

• Usando um loop, o programa deve fazer o pop de cada inteiro da pilha e mostrá-lo na tela

Page 34: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 34

Próxima seçãoPróxima seção

• Linking de uma biblioteca externa• Biblioteca do autor deste livro• Operações de pilha• Definindo e usando Procedimentos• Projeto de programas usando Procedimentos

Page 35: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 35

Definindo e usando procedimentosDefinindo e usando procedimentos

• Criando Procedimentos• Documentando Procedimentos• Exemplo: procedimento SumOf• Instruções CALL e RET • Chamadas de procedimentos aninhados • Labels Local e Global• Parâmetros de Procedimentos• Símbolos de Flowchart• Operador USES

Page 36: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 36

Criando ProcedimentosCriando Procedimentos

• Problemas grandes podem ser divididos em pequenas tarefas para torná-los mais fáceis

• Um procedimento no ASM é equivalente a uma função no Java ou C++

• Segue um exemplo de procedimento em assembly denominado sample:

sample PROC..ret

sample ENDP

Page 37: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 37

Documentando ProcedimentosDocumentando Procedimentos

• Uma descrição de todas as tarefas realizadas pelo procedimento.

• Recebe: uma lista de parâmetros de entrada e seu uso .

• Retorna: uma descrição dos valores retornado pelo procedimento.

• Requer: lista opcional de requisitos chamados de pré-condições que devem ser satisfeitas antes do procedimento ser chamado.

Documentação sugerida para cada procedimento:

Se um procedimento é chamado sem terem satisfeitas as pré-condições provavelmente não produz a saída desejada.

Page 38: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 38

Exemplo: procedimento SumOf Exemplo: procedimento SumOf

;---------------------------------------------------------SumOf PROC;; Calcula e retorna a soma de três inteiros de 32-bits.; Recebe: EAX, EBX, ECX, os três inteiros. Pode ser; com sinal ou sem sinal.; Retorna: EAX = soma e os flags de status (Carry,; Overflow, etc.) são alterados.; Requer: nada;---------------------------------------------------------

add eax,ebxadd eax,ecxret

SumOf ENDP

Page 39: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 39

Instruções CALL e RET Instruções CALL e RET

• A instrução CALL chama um procedimento • Faz o push do offset da instrução seguinte na pilha

• Copia o endereço do procedimento chamado no EIP

• A instrução RET retorna de um procedimento• Faz o pop do topo da pilha no EIP

Page 40: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 40

Exemplo de CALL-RET Exemplo de CALL-RET (1 de 2)(1 de 2)

main PROC00000020 call MySub00000025 mov eax,ebx..

main ENDP

MySub PROC00000040 mov eax,edx..ret

MySub ENDP

0000025 é o offset da instrução imediatamente seguinte à instrução CALL

00000040 é o offset da primeira instrução dentro de MySub

Page 41: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 41

Exemplo de CALL-RETExemplo de CALL-RET (2 de 2) (2 de 2)

A instrução CALL faz o push de 00000025 na pilha e carrega 00000040 em EIP

A instrução RET faz o pop de 00000025 da pilha para EIP

(pilha mostrada ao executar RET)

Page 42: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 42

Chamada de procedimentos aninhadosChamada de procedimentos aninhados

Quando Sub3 é chamado a pilha contem todos os três endereços de retorno:

Page 43: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 43

Labels Local e GlobalLabels Local e Global

main PROCjmp L2 ; error

L1:: ; label global exit

main ENDP

sub2 PROCL2: ; label local

jmp L1 ; okret

sub2 ENDP

Um label local é visível somente para as instruções dentro do mesmo procedimento. Um label global é visível em todo o programa.

Page 44: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 44

Parâmetros de procedimentosParâmetros de procedimentos (1 de 3) (1 de 3)

• Um bom procedimento deve ser útil em muitos programas diferentes

• Mas não se refere a nomes de variáveis específicas

• Parâmetros servem para tornar os procedimentos flexíveis pois os valores de parâmetros podem mudar no tempo de execução

Page 45: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 45

Parâmetros de Procedimento Parâmetros de Procedimento (2 de 3)(2 de 3)

ArraySum PROCmov esi,0 ; array indexmov eax,0 ; set the sum to zeromov ecx,LENGTHOF myarray ; set number of elements

L1: add eax,myArray[esi] ; add each integer to sumadd esi,4 ; point to next integerloop L1 ; repeat for array size

mov theSum,eax ; store the sumret

ArraySum ENDP

O procedimento ArraySum calcula a soma de um vetor. Ele faz duas referências para nomes de variáveis específicas:

E se quisesse calcular a soma de dois ou três vetores dentro de um mesmo programa?

Page 46: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 46

Parâmetro de ProcedimentosParâmetro de Procedimentos (3 de 3) (3 de 3)

ArraySum PROC; Recebe: ESI aponta a um vetor de doublewords, ; ECX = número de elementos do vetor.; Retorna: EAX = sum;-----------------------------------------------------

mov eax,0 ; set the sum to zero

L1: add eax,[esi] ; add each integer to sumadd esi,4 ; point to next integerloop L1 ; repeat for array size

retArraySum ENDP

Essa versão de ArraySum retorna a soma de qualquer vetor de doubleword ‘s cujo endereço é contido em ESI. A soma é retornado em EAX:

Page 47: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 47

Símbolos de Flowchart Símbolos de Flowchart

• Os seguintes símbolos são os blocos de construção de flowcharts:

Page 48: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 48

Flowchart para Flowchart para o procedimento o procedimento ArraySum ArraySum

Page 49: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 49

Sua vez . . .Sua vez . . .

Desenhar um flowchart que expressa o seguinte pseudocódigo:

input exam grade from the user

if( grade > 70 )

display "Pass"

else

display "Fail"

endif

Page 50: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 50

. . . (Solução). . . (Solução)

Page 51: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 51

Sua vez . . .Sua vez . . .

• Modificar o flowchart do slide anterior para que o usuário possa continuar a entrada de scores até que -1 seja introduzido

Page 52: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 52

Operador USESOperador USES• Lista os registradores que serão preservados

ArraySum PROC USES esi ecxmov eax,0 ; set the sum to zeroetc.

MASM generates the code shown in gold:

ArraySum PROCpush esipush ecx..pop ecxpop esiret

ArraySum ENDP

Page 53: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 53

Próxima seçãoPróxima seção

• Linking de uma biblioteca externa• Biblioteca do autor deste livro• Operações de pilha• Definindo e usando Procedimentos• Projeto de programas usando Procedimentos

Page 54: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 54

Projeto de programas usando Projeto de programas usando procedimentosprocedimentos

• Projeto Top-Down (decomposição funcional) envolve o seguinte:• Projetar o seu programa antes de iniciar a codificação

• Quebrar tarefas grandes em tarefas pequenas

• Usar uma estrutura hierárquica baseada em chamadas de procedimentos

• Testar procedimentos individuais separadamente

Page 55: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 55

Programa de soma de inteiros Programa de soma de inteiros (1 de 4)(1 de 4)

Passos principais:

• Solicita (prompt) , ao usuário, digitar vários inteiros

• Calcula a soma do vetor

• Mostra a soma

Descrição: Escrever um programa que solicita ao usuário digitar vários inteiros de 32 bits , armazena-os num vetor, calcula a soma do vetor, e mostra o resultado na tela.

Page 56: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 56

Projeto do procedimentoProjeto do procedimento (2 de 4) (2 de 4)

Main

Clrscr ; clear screen

PromptForIntegers

WriteString ; display string

ReadInt ; input integer

ArraySum ; sum the integers

DisplaySum

WriteString ; display string

WriteInt ; display integer

Page 57: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site Examples

WriteStringWriteString

;--------------------------------------------------------

WriteString PROC

;

; Writes a null-terminated string to standard output.

; Input parameter: EDX points to the string.

;

;--------------------------------------------------------

Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 57

Page 58: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site Examples

Read IntRead Int

;--------------------------------------------------------ReadInt PROC USES ecx edx

;

; Reads a 32-bit signed decimal integer from standard input, stopping when

; the Enter key is pressed.

; All valid digits occurring before a non-numeric character are converted to

; the integer value. Leading spaces are ignored, and an optional leading

; + or - sign is permitted.

; All spaces return a valid integer, value zero.

 

; Receives: nothing

; Returns: If CF=0, the integer is valid, and EAX = binary value.

; If CF=1, the integer is invalid and EAX = 0.

------------------------------------------------------- Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 58

Page 59: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site Examples

WriteIntWriteInt

;-----------------------------------------------------

WriteInt PROC

;

; Writes a 32-bit signed binary integer to the console window

; in ASCII decimal.

; Receives: EAX = the integer

; Returns: nothing

; Comments: Displays a leading sign, no leading zeros.

;-----------------------------------------------------

Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 59

Page 60: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site Examples

Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007.

60

Estrutura Estrutura (3 de 4) (3 de 4)

gray indicates library

procedure

Page 61: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site Examples

ArraySumArraySum

Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 61

ArraySum PROC; Recebe: ESI aponta a um vetor de doublewords, ; ECX = número de elementos do vetor.; Retorna: EAX = sum;-----------------------------------------------------

mov eax,0 ; set the sum to zero

L1: add eax,[esi] ; add each integer to sumadd esi,4 ; point to next integerloop L1 ; repeat for array size

retArraySum ENDP

Page 62: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 62

saídasaída (4 de 4) (4 de 4)

Enter a signed integer: 550

Enter a signed integer: -23

Enter a signed integer: -96

The sum of the integers is: +431

Page 63: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 63

sumáriosumário

• Procedimento – bloco de código executável• Pilha de tempo de execução – estrutura LIFO

• Contem endereços de retorno, parâmetros, variáveis locais

• PUSH – coloca valor na pilha

• POP – remove valor da pilha

• Usa a biblioteca Irvine32 para todos os I/O de conversão de dados

Page 64: Assembly Language for Intel-Based Computers, 5 th Edition Capítulo 5: Procedimentos (Procedure) (c) Pearson Education, 2002. All rights reserved. You may.

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. 64

The EndThe End


Recommended