+ All Categories

aula_03

Date post: 21-Apr-2015
Category:
Upload: jose-goncalves
View: 63 times
Download: 1 times
Share this document with a friend
69
Assembly Language for Intel- Assembly Language for Intel- Based Computers, 5 Based Computers, 5 th th Edition Edition Capítulo 3: Linguagem Assembly Fundamentos (c) Pearson Education, 2006-2007. 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 Irvine
Transcript
Page 1: aula_03

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

Capítulo 3: Linguagem Assembly Fundamentos

(c) Pearson Education, 2006-2007. 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 Irvine

Page 2: aula_03

Web site Examples 22

Linguagem de Máquina: Codificação de Linguagem de Máquina: Codificação de instruções Intelinstruções Intel

• Formato de instruções IA-32 • Instruções de um byte• Move imediato para registrador• Instruções no modo registrador• Prefixos para operandos no processador IA-32 • Instruções no modo memória

Page 3: aula_03

Web site Examples 33

Formato de instrução IA-32 Formato de instrução IA-32

• Campos • Byte de prefixo de intrução (tamanho de operando)

• opcode

• Byte Mod R/M (modo de endereçamento e operandos)

• Byte scale index (para escalar índice de vetores)

• Deslocamento de endereços

• Dado imediato (constante)

• Somente o opcode é sempre requerido

Page 4: aula_03

Web site Examples 44

Formato de instruções Intel IA-32 Formato de instruções Intel IA-32

Page 5: aula_03

Web site Examples 55

Instruções de um único byteInstruções de um único byte

• Somente o opcode é usado• Nenhum operando

• Exemplo: AAA

• Um operando • Exemplo: INC DX

Page 6: aula_03

Web site Examples 66

Move imediato para registradorMove imediato para registrador• Op code seguido por um valor imediato• Exemplo: move imediato para registrador de 16 bits• Formato de código: B8+rw dw

• (B8 = opcode, +rw é um número de registrador, dw é o operando imediato)

• Número de registrador adicionado a B8 para produzir um novo opcode

Page 7: aula_03

Web site Examples 77

Instruções no modo registradorInstruções no modo registrador

• O byte Mod R/M contem um número de registrador de 3-bits para cada operando registrador• Codificação de bits para números de registradores:

• Exemplo: MOV BX, AX

opcode = 8B

byte ModR/M = D8

Page 8: aula_03

Web site Examples 88

Prefixo para tamanho de operando do IA-32 Prefixo para tamanho de operando do IA-32

• Modifica o atributo de segmento default (16-bit ou 32-bit)• Valor especial reconhecido pelo processador: 66h• A Intel desenvolveu opcodes para os processadores IA-32

• Necessitando de compatibilidade com 8086

• Em sistemas IA-32, é usado um prefixo de um byte quando são usados operandos de 16 bits

Page 9: aula_03

Web site Examples 99

Prefixo de tamanho de operando IA-32 Prefixo de tamanho de operando IA-32

• Exemplo de código para processador de 16-bits:

• Codificação para processador de 32-bits:

overrides default operand size

OPCODE DE MOV AX,DX = 100010dw, onde d = 0 ou 1 (reg = fonte ou destino) e w = 0 ou 1 (8 ou 16 bits)

Page 10: aula_03

Web site Examples 1010

Instruções no modo de memóriaInstruções no modo de memória

• Uma variedade de tipos de operandos (modos de endereçamento)

• São possíveis 256 combinações de operandos• Determinadas pelo byte Mod R/M

• Codificação Mod R/M:• mod = modo de endereçamento

• reg = número de registrador

• r/m = indica registrador ou memória

Page 11: aula_03

Web site Examples 1111

Exemplos de instruções MOV Exemplos de instruções MOV • Formatos selecionados para instruções MOV de 8-bits e 16-bits:

Page 12: aula_03

Web site Examples 1212

Exemplos de instruções MOVExemplos de instruções MOV

Assumir que myWord esteja localizado no deslocamento (offset) 0102h.

Page 13: aula_03

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

Índice sobre Linguagem AssemblyÍndice sobre Linguagem Assembly

• Elementos básicos da linguagem Assembly • Exemplo: adição e subtração de inteiros• Montagem, “Linking”, e execução de programas• Definição de dados• Constantes simbólicas• Programação no modo de endereçamento real

Page 14: aula_03

Web site Examples 14

Lembrança

• Descendo no nível de abstrações revelam-se outras informações

swap(int v[], int k){int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp;}

swap: muli $2, $5,4 add $2, $4,$2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31

00000000101000010000000000011000000000001000111000011000001000011000110001100010000000000000000010001100111100100000000000000100101011001111001000000000000000001010110001100010000000000000010000000011111000000000000000001000

Binary machinelanguageprogram(for MIPS)

C compiler

Assembler

Assemblylanguageprogram(for MIPS)

High-levellanguageprogram(in C)

Page 15: aula_03

Web site Examples

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

• Elementos básicos da linguagem Assembly • Exemplo: adição e subtração de inteiros• Montagem, “Linking”, e execução de programas• Definição de dados• Constantes simbólicas• Programação no modo de endereçamento real

Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 15

Page 16: aula_03

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

Elementos básicos da linguagem “Assembly”Elementos básicos da linguagem “Assembly”

• Constantes de inteiros• Expressões de inteiros• Constantes de caracteres e cadeias• Palavras reservadas e identificadores• Diretivas e instruções• Rótulos ou “Labels”• Mnemônicos e operandos• Comentários• Exemplos

Page 17: aula_03

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

Constantes de InteirosConstantes de Inteiros

• Opção de ser acompanhado pelos sinais + ou – • Dígitos: binário, decimal, hexadecimal, ou octal• Sufixos comuns:

• h – hexadecimal

• d – decimal

• b – binário

• r – real

Exemplos: 30d, 6Ah, 42, 1101b

Hexadecimal começando com letra: 0A5h

Page 18: aula_03

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

Expressões de InteirosExpressões de Inteiros• Operadores e níveis de precedência:

• Exemplos:

Page 19: aula_03

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

Constantes de caracteres e cadeiasConstantes de caracteres e cadeias

• Cercar caracteres usando apóstrofos ou aspas• 'A', "x"

• Caractere ASCII = 1 byte

• Cercar cadeias usando apóstrofos ou aspas• "ABC"

• 'xyz'

• Cada caracter ocupa um byte numa cadeia

• Cadeia dentro da outra:• 'Say "Goodnight," Gracie'

Page 20: aula_03

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

Palavras reservadas e identificadoresPalavras reservadas e identificadores

• Palavras reservadas (não podem ser usadas como identificadores)• Mnemônicos de instruções, diretivas, atributos de tipo,

operadores, símbolos pré-definidos

• Identificadores• 1-247 caracteres, incluindo dígitos

• Insensível à caixa (maiúscula e minúscula)

• primeiro caractere deve ser letra, _, @, ?, ou $

Page 21: aula_03

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

DiretivasDiretivas

• Comandos que são reconhecidos pelo montador• Não fazem parte do conjunto de instruções do

processador• Usados para declarar áreas de código, áreas de dados,

selecionar modo de memória, declarar procedimentos, etc.

• Insensível à caixa

• Diferentes montadores podem ter diferentes diretivas• Por exemplo, NASM não é igual a MASM

Page 22: aula_03

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

InstruçõesInstruções

• Montado em código de máquina pelo montador(assembler)• Executado em tempo de execução pelo CPU• Nesta disciplina usa-se as instruções do Intel IA-32 • Todas as instruções contêm:

• Label (opcional)

• Mnemônico (necessário)

• Operandos (depende da instrução)

• Comentário (opcional)

Page 23: aula_03

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

Labels (rótulos)Labels (rótulos)

• Funciona como marcadores de posição• marca o endereço de códigos e dados

• Segue a mesma regra dos identificadores• Label para dados

• deve ser único• exemplo: myArray (não tem dois pontos)

• Label para códigos• posição de instruções de jump e loop • exemplo: L1: (seguido por dois pontos)

Page 24: aula_03

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

Mnemônicos e OperandosMnemônicos e Operandos

• Mnemônicos de instruções• ajuda a memorização

• exemplos: MOV, ADD, SUB, MUL, INC, DEC

• Operandos• constante

• expressão de constantes

• registrador

• memória (label de dados)

Constantes e expressões de constantes são também chamadas de valores imediatos

Page 25: aula_03

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

ComentáriosComentários• Comentários são úteis!

• explica o propósito do programa• quando foi escrito e o autor• informação de revisão• técnicas e detalhes de codificação • explicação específica da aplicação

• Comentários numa mesma linha• Inicia-se com ponto e vírgula (;)

• Comentários em múltiplas linhas• começa com a diretiva COMMENT e um caracter

escolhido pelo programador• termina com o mesmo caracter escolhido pelo

programador

Page 26: aula_03

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

Exemplo de formato de instruçõesExemplo de formato de instruções

Sem operandosstc ; set Carry flag

Um operandoinc eax ; registerinc myByte ; memory

Dois operandosadd ebx,ecx ; register, registersub myByte,25 ; memory, constantadd eax,36 * 25 ; register, constant-expression

Page 27: aula_03

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

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

• Elementos básicos da linguagem Assembly • Exemplo: adição e subtração de inteiros• Montagem, “Linking”, e execução de programas• Definição de dados• Constantes simbólicas• Programação no modo de endereçamento real

Page 28: aula_03

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

Exemplo: Adição e Subtração de Inteiros Exemplo: Adição e Subtração de Inteiros (AddSub.asm)(AddSub.asm)

TITLE Add and Subtract (AddSub.asm)

; Este programa soma e subtrai inteiros de 32-bits.

INCLUDE Irvine32.inc.codemain PROC

mov eax,10000h ; EAX = 10000hadd eax,40000h ; EAX = 50000hsub eax,20000h ; EAX = 30000hcall DumpRegs ; display registersexit

main ENDPEND main

Page 29: aula_03

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

Exemplo de saídaExemplo de saída

Saída do programa, mostrando registradores e flags:

EAX=00030000 EBX=7FFDF000 ECX=00000101 EDX=FFFFFFFF

ESI=00000000 EDI=00000000 EBP=0012FFF0 ESP=0012FFC4

EIP=00401024 EFL=00000206 CF=0 SF=0 ZF=0 OF=0

Page 30: aula_03

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

Sugestão de padrões de codificação Sugestão de padrões de codificação (1 de 2) (1 de 2)

• Algumas abordagens para uso de maiúsculas• não usar maiúsculas• usar só maiúsculas• maiúsculas para palavras reservadas, incluindo

mnemônicos de instruções e nomes de registradores• maiúsculas somente para diretivas e operadores

• Outras sugestões• nomes de identificadores descritivos• espaços ao redor dos operadores aritméticos• linhas em branco entre procedimentos

Page 31: aula_03

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

Sugestão de padrões de codificação Sugestão de padrões de codificação (2 de 2) (2 de 2)

• Indentação e espaçamento• labels de código e dados – sem indentação

• instruções executáveis – indentar 4-5 espaços

• comentários: começar na coluna 40-45, alinhados verticalmente

• 1-3 espaços entre mnemônico da instrução e operandos• ex: mov ax,bx

• 1-2 linhas em branco entre procedimentos

Page 32: aula_03

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

Versão alternativa do AddSub.asmVersão alternativa do AddSub.asm

TITLE Add and Subtract (AddSubAlt.asm)

; este programa soma e subtrai inteiros de 32-bits..386.MODEL flat,stdcall.STACK 4096

ExitProcess PROTO, dwExitCode:DWORDDumpRegs PROTO

.codemain PROC

mov eax,10000h ; EAX = 10000hadd eax,40000h ; EAX = 50000hsub eax,20000h ; EAX = 30000hcall DumpRegsINVOKE ExitProcess,0

main ENDPEND main

Page 33: aula_03

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

Gabarito de programaGabarito de programa

TITLE Program Template (Template.asm)

; Program Description:; Author:; Creation Date:; Revisions: ; Date: Modified by:

INCLUDE Irvine32.inc.data

; (insert variables here).codemain PROC

; (insert executable instructions here)exit

main ENDP; (insert additional procedures here)

END main

Instructors: please customize as needed

Page 34: aula_03

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

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

• Elementos básicos da linguagem Assembly • Exemplo: adição e subtração de inteiros• Montagem, “Linking”, e execução de programas• Definição de dados• Constantes simbólicas• Programação no modo de endereçamento real

Page 35: aula_03

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

Montagem, “linking” e execução de programasMontagem, “linking” e execução de programas

• Assemble-Link-Execute Cycle• make32.bat• Listing File• Map File

Page 36: aula_03

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

Ciclos de Montagem, “Linkagem” e ExecuçãoCiclos de Montagem, “Linkagem” e Execução

• O seguinte diagrama descreve os passos a partir da criação do programa fonte até a execução do programa.

• Se o código fonte é modificado, passos 2 a 4 devem se repetir.

Page 37: aula_03

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

Arquivo de Listagem (List File)Arquivo de Listagem (List File)

• Mostra como o programa é montado• Contem

• código fonte

• endereços

• código objeto (linguagem de máquina)

• nomes de segmentos

• símbolos (variáveis, procedimentos, e constantes)

Page 38: aula_03

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

Arquivo de Mapeamento (Map File)Arquivo de Mapeamento (Map File)

• Informações sobre cada segmento de programa• endereço de início

• endereço de fim

• tamanho

• tipo de segmento

Page 39: aula_03

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

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

• Elementos básicos da linguagem Assembly • Exemplo: adição e subtração de inteiros• Montagem, “Linking”, e execução de programas• Definição de dados• Constantes simbólicas• Programação no modo de endereçamento real

Page 40: aula_03

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

Definição de dadosDefinição de dados

• Tipos de dados intrínsecos• Sentenças para definição de dados• Definição de BYTE e SBYTE • Definição de WORD e SWORD • Definição de DWORD e SDWORD • Definição de QWORD • Definição de TBYTE • Definição número Real • Ordem Little Endian• Adicionando variáveis ao programa AddSub • Declaração de dados não-inicializados

Page 41: aula_03

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

Tipos de dados instrínsecos Tipos de dados instrínsecos (1 de 2)(1 de 2)

• BYTE, SBYTE• 8-bit unsigned integer; 8-bit signed integer

• WORD, SWORD• 16-bit unsigned & signed integer

• DWORD, SDWORD• 32-bit unsigned & signed integer

• QWORD• 64-bit integer

• TBYTE• 80-bit integer

Page 42: aula_03

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

Tipos de dados instrínsecos Tipos de dados instrínsecos (2 de 2)(2 de 2)

• REAL4• 4-byte IEEE short real

• REAL8• 8-byte IEEE long real

• REAL10• 10-byte IEEE extended real

Page 43: aula_03

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

Sentença de definição de dadosSentença de definição de dados

• Uma sentença de definição de dados define a forma de armazenamento da variável na memória.

• Pode opcionalmente atribuir um nome (label) ao dado• Sintaxe:

[name] directive initializer [,initializer] . . .

value1 BYTE 10

• Todos os inicializadores (initializers) são dados binários na memória

Page 44: aula_03

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

Definição de dados BYTE e SBYTEDefinição de dados BYTE e SBYTE

value1 BYTE 'A' ; character constant

value2 BYTE 0 ; smallest unsigned byte

value3 BYTE 255 ; largest unsigned byte

value4 SBYTE -128 ; smallest signed byte

value5 SBYTE +127 ; largest signed byte

value6 BYTE ? ; uninitialized byte

Cada sentença seguinte define o armazenamento de um byte:

• Se for declarada uma variável SBYTE, o Microsoft debugger mostra automaticamente o seu valor decimal com sinal.

Page 45: aula_03

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

Definição de Definição de Byte ArraysByte Arrays (vetores de bytes) (vetores de bytes)

list1 BYTE 10,20,30,40

list2 BYTE 10,20,30,40

BYTE 50,60,70,80

BYTE 81,82,83,84

list3 BYTE ?,32,41h,00100010b

list4 BYTE 0Ah,20h,‘A’,22h

Usam múltiplos inicializadores:

Page 46: aula_03

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

Definição de cadeias (Strings)Definição de cadeias (Strings) (1 de 3) (1 de 3)

• Uma cadeia é implementada como um vetor de caracteres• por conveniência, é usualmente cercada com apóstrofos ou aspas• geralmente termina com zero

• Exemplos:

str1 BYTE "Enter your name",0

str2 BYTE 'Error: halting program',0

str3 BYTE 'A','E','I','O','U'

greeting BYTE "Welcome to the Encryption Demo program "

BYTE "created by Kip Irvine.",0

Page 47: aula_03

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

Definição de cadeias (Strings)Definição de cadeias (Strings) (2 de 3) (2 de 3)

• Para continuar uma cadeia na linha seguinte, essa linha deve terminar com vírgula:

menu BYTE "Checking Account",0dh,0ah,0dh,0ah,

"1. Create a new account",0dh,0ah,

"2. Open an existing account",0dh,0ah,

"3. Credit the account",0dh,0ah,

"4. Debit the account",0dh,0ah,

"5. Exit",0ah,0ah,

"Choice> ",0

Page 48: aula_03

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

Definição de cadeias (Strings)Definição de cadeias (Strings) (3 de 3) (3 de 3)

• Seqüência de caracteres de fim de linha e linha seguinte:• 0Dh = carriage return

• 0Ah = line feed

str1 BYTE "Enter your name: ",0Dh,0Ah

BYTE "Enter your address: ",0

newLine BYTE 0Dh,0Ah,0

Idéia: Definir todas as cadeias usadas no programa na mesma área do segmento de dados.

Page 49: aula_03

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

Usando o operador DUPUsando o operador DUP

• Usar DUP para alocar (criar espaço para) um vetor ou cadeia.• Sintaxe: counter DUP ( argument )

• Counter e argument devem ser constantes ou expressões de constantes

counter – indica o número de dados argument – indica o valor do dado

var1 BYTE 20 DUP(0) ; 20 bytes, all equal to zero

var2 BYTE 20 DUP(?) ; 20 bytes, uninitialized

var3 BYTE 4 DUP("STACK") ; 20 bytes: "STACKSTACKSTACKSTACK"

var4 BYTE 10,3 DUP(0),20 ; 5 bytes

Page 50: aula_03

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

Definição de WORD e SWORDDefinição de WORD e SWORD

• Definição de armazenamento de inteiros de 16-bits

• ou dupla de caracteres

• valor único ou múltiplos valores

word1 WORD 65535 ; largest unsigned value

word2 SWORD –32768 ; smallest signed value

word3 WORD ? ; uninitialized, unsigned

word4 WORD "AB" ; double characters

myList WORD 1,2,3,4,5 ; array of words

array WORD 5 DUP(?) ; uninitialized array

Page 51: aula_03

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

Definição de DWORD e SDWORDDefinição de DWORD e SDWORD

val1 DWORD 12345678h ; unsigned

val2 SDWORD –2147483648 ; signed

val3 DWORD 20 DUP(?) ; unsigned array

val4 SDWORD –3,–2,–1,0,1 ; signed array

Definição de armazenamento de inteiros não-sinalizados ou sinalizados de 32-bits:

Page 52: aula_03

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

Definição de dados QWORD, TBYTE e RealDefinição de dados QWORD, TBYTE e Real

quad1 QWORD 1234567812345678h

val1 TBYTE 1000000000123456789Ah

rVal1 REAL4 -2.1

rVal2 REAL8 3.2E-260

rVal3 REAL10 4.6E+4096

ShortArray REAL4 20 DUP(0.0)

Definição de armazenamento para quadwords, tenbytes, e números reais:

Page 53: aula_03

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

Ordem Little EndianOrdem Little Endian

• Na arquitetura IA-32 todos os tipos de dados maiores que um byte armazenam os seus bytes em ordem reversa, o seja, byte menos significativo no menor endereço de memória.

• Exemplo:val1 DWORD 12345678h

Page 54: aula_03

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

Adicionando Variáveis ao AddSubAdicionando Variáveis ao AddSub

TITLE Add and Subtract, Version 2 (AddSub2.asm); este programa soma e subtrai inteiros não-sinalizados de 32-bits ; e armazena a soma numa variavel.INCLUDE Irvine32.inc.dataval1 DWORD 10000hval2 DWORD 40000hval3 DWORD 20000hfinalVal DWORD ?.codemain PROC

mov eax,val1 ; start with 10000hadd eax,val2 ; add 40000hsub eax,val3 ; subtract 20000hmov finalVal,eax ; store the result (30000h)call DumpRegs ; display the registersexit

main ENDPEND main

Page 55: aula_03

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

Declaração de dados não-inicializadosDeclaração de dados não-inicializados

• Usar a diretiva .data? para declarar um segmento de dados não inicializados:

.data?

• Dentro do segmento, declarar variáveis com inicializadores "?" :

smallArray DWORD 10 DUP(?)

vantagem: reduz o tamanho do arquivo EXE do programa.

Page 56: aula_03

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

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

• Elementos básicos da linguagem Assembly • Exemplo: adição e subtração de inteiros• Montagem, “Linking”, e execução de programas• Definição de dados• Constantes simbólicas• Programação no modo de endereçamento real

Page 57: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 57

Constantes simbólicasConstantes simbólicas((representação de constantes usando símbolos)representação de constantes usando símbolos)

• Diretiva de sinal de igual• Cálculo de tamanho de vetores e cadeias• Diretiva EQU• Diretiva TEXTEQU

Page 58: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 58

Diretiva de sinal de igual (=)Diretiva de sinal de igual (=)

• name = expression• expression é um inteiro de 32-bits (expressão ou

constante)

• pode ser redefinido

• name é chamado de constante simbólica

• Um bom estilo de programação é usar símbolos

COUNT = 500

.

.

mov al,COUNT

Page 59: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 59

Cálculo do tamanho de um vetor de bytesCálculo do tamanho de um vetor de bytes

• endereço da posição atual, onde está sendo calculado é dado pelo contador de posição: $• subtrair o endereço de list• a diferença é o número de bytes

list BYTE 10,20,30,40ListSize = ($ - list)

Page 60: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 60

Cálculo do tamanho de um vetor de WordsCálculo do tamanho de um vetor de Words(tamanho = número de words)(tamanho = número de words)

Divide o número total de bytes por 2 (tamanho de um word)

list WORD 1000h,2000h,3000h,4000hListSize = ($ - list) / 2

Page 61: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 61

Cálculo do tamanho de um vetor de DoublewordsCálculo do tamanho de um vetor de Doublewords

Divide o número total de bytes por 4 (tamanho de um doubleword)

list DWORD 1,2,3,4ListSize = ($ - list) / 4

Page 62: aula_03

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

Diretiva EQUDiretiva EQU

• Define um símbolo como um inteiro ou expressão de texto• Não pode ser redefinido

PI EQU <3.1416>

pressKey EQU <"Press any key to continue...",0>

.data

prompt BYTE pressKey

Page 63: aula_03

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

Diretiva TEXTEQUDiretiva TEXTEQU

• Define um símbolo como um inteiro ou expressão de texto.• Chamado um macro de texto• Pode ser redefinido

continueMsg TEXTEQU <"Do you wish to continue (Y/N)?">

rowSize = 5

.data

prompt1 BYTE continueMsg

count TEXTEQU %(rowSize * 2) ; evaluates the expression

setupAL TEXTEQU <mov al,count>

.code

setupAL ; generates: "mov al,10"

Page 64: aula_03

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

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

• Elementos básicos da linguagem Assembly • Exemplo: adição e subtração de inteiros• Montagem, “Linking”, e execução de programas• Definição de dados• Constantes simbólicas• Programação no modo de endereçamento real

Page 65: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 65

Programação no modo de endereçamento realProgramação no modo de endereçamento real (1 of 2) (1 of 2)

• Gera programas em MS-DOS de 16 bits• Vantagens

• habilita a chamada do MS-DOS e funções BIOS

• sem restrição de acesso à memória

• Desvantagens• deve estar alerta a segmentos e offsets

• Não pode chamar funções Win32 (Windows 95 em diante)

• Limitado a 640K para memória de programa

Page 66: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 66

Programação no modo de endereçamento realProgramação no modo de endereçamento real (2 de 2) (2 de 2)

• Requisitos

• INCLUDE Irvine16.inc

• Initializar DS para o segmento de dados:

mov ax,@datamov ds,ax

Page 67: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 67

Soma e subtração, versão de 16-BitsSoma e subtração, versão de 16-Bits

TITLE Add and Subtract, Version 2 (AddSub2r.asm)INCLUDE Irvine16.inc.dataval1 DWORD 10000hval2 DWORD 40000hval3 DWORD 20000hfinalVal DWORD ?.codemain PROC

mov ax,@data ; initialize DSmov ds,ax mov eax,val1 ; get first valueadd eax,val2 ; add second valuesub eax,val3 ; subtract third valuemov finalVal,eax ; store the resultcall DumpRegs ; display registersexit

main ENDPEND main

Page 68: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 68

ResumoResumo

• expressão de inteiros, constantes de caracteres • diretivas – interpretadas pelo montador (assembler)• instrução – executa no runtime• segmentos de código, dados e pilha• Arquivos: fonte, listing, objeto, map, executável• Diretivas para definição de dados:

• BYTE, SBYTE, WORD, SWORD, DWORD, SDWORD, QWORD, TBYTE, REAL4, REAL8, e REAL10

• operador DUP, contador de posição ($)• Constante simbólica

• EQU e TEXTEQU

Page 69: aula_03

Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 69

46 69 6E 69 7346 69 6E 69 73


Recommended