Date post: | 21-Apr-2015 |
Category: |
Documents |
Upload: | jose-goncalves |
View: | 63 times |
Download: | 1 times |
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
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
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
Web site Examples 44
Formato de instruções Intel IA-32 Formato de instruções Intel IA-32
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
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
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
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
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)
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
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:
Web site Examples 1212
Exemplos de instruções MOVExemplos de instruções MOV
Assumir que myWord esteja localizado no deslocamento (offset) 0102h.
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
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)
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
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
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
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:
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'
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 $
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
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)
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)
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
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
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
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
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
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
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
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
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
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
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
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
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.
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)
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
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
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
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
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
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
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.
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:
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
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
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.
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
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
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:
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:
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
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
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.
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
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
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
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)
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
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
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
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"
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
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
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
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
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
Web site ExamplesIrvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 69
46 69 6E 69 7346 69 6E 69 73