Você está na página 1de 69

Assembly Language for Intel-Based

Computers, 5th Edition


Kip Irvine

Captulo 3: Linguagem Assembly


Fundamentos

Slides prepared by the author


Revision date: June 4, 2006
(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.

Linguagem de Mquina: Codificao de


instrues Intel

Formato de instrues IA-32


Instrues de um byte
Move imediato para registrador
Instrues no modo registrador
Prefixos para operandos no processador IA-32
Instrues no modo memria

Web site

Examples

Formato de instruo IA-32


Campos

Byte de prefixo de intruo (tamanho de operando)


opcode
Byte Mod R/M (modo de endereamento e operandos)
Byte scale index (para escalar ndice de vetores)
Deslocamento de endereos
Dado imediato (constante)

Somente o opcode sempre requerido

Web site

Examples

Formato de instrues Intel IA-32

Web site

Examples

Instrues de um nico byte


Somente o opcode usado
Nenhum operando
Exemplo: AAA

Um operando
Exemplo: INC DX

Web site

Examples

Move imediato para registrador

Op code seguido por um valor imediato


Exemplo: move imediato para registrador de 16 bits
Formato de cdigo: B8+rw dw
(B8 = opcode, +rw um nmero de registrador, dw o operando
imediato)
Nmero de registrador adicionado a B8 para produzir um novo
opcode

Web site

Examples

Instrues no modo registrador


O byte Mod R/M contem um nmero de registrador
de 3-bits para cada operando registrador
Codificao de bits para nmeros de registradores:

Exemplo: MOV BX, AX


opcode = 8B
byte ModR/M = D8

Web site

Examples

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


so usados operandos de 16 bits

Web site

Examples

Prefixo de tamanho de operando IA-32


Exemplo de cdigo para processador de 16-bits:

Codificao 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

Instrues no modo de memria


Uma variedade de tipos de operandos (modos de
endereamento)
So possveis 256 combinaes de operandos
Determinadas pelo byte Mod R/M

Codificao Mod R/M:


mod = modo de endereamento
reg = nmero de registrador
r/m = indica registrador ou memria

Web site

Examples

10

Exemplos de instrues MOV

Formatos selecionados para instrues MOV de 8-bits e 16-bits:

Web site

Examples

11

Exemplos de instrues MOV


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

Web site

Examples

12

ndice sobre Linguagem Assembly

Elementos bsicos da linguagem Assembly


Exemplo: adio e subtrao de inteiros
Montagem, Linking, e execuo de programas
Definio de dados
Constantes simblicas
Programao no modo de endereamento real

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

Web site

Examples

13

High-level
language
program
(in C)

swap(int v[], int k)


{int temp;
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
}

Lembrana
Descendo no
nvel de
abstraes
revelam-se
outras
informaes

C compiler

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

Assembly
language
program
(for MIPS)

Assembler

Binary machine
language
program
(for MIPS)

00000000101000010000000000011000
00000000100011100001100000100001
10001100011000100000000000000000
10001100111100100000000000000100
10101100111100100000000000000000
10101100011000100000000000000100
00000011111000000000000000001000

Web site

Examples

14

Prxima seo

Elementos bsicos da linguagem Assembly


Exemplo: adio e subtrao de inteiros
Montagem, Linking, e execuo de programas
Definio de dados
Constantes simblicas
Programao no modo de endereamento real

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

Web site

Examples

15

Elementos bsicos da linguagem Assembly

Constantes de inteiros
Expresses de inteiros
Constantes de caracteres e cadeias
Palavras reservadas e identificadores
Diretivas e instrues
Rtulos ou Labels
Mnemnicos e operandos
Comentrios
Exemplos

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

Web site

Examples

16

Constantes de Inteiros
Opo de ser acompanhado pelos sinais + ou
Dgitos: binrio, decimal, hexadecimal, ou octal
Sufixos comuns:

h hexadecimal
d decimal
b binrio
r real

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


Hexadecimal comeando com letra: 0A5h

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

Web site

Examples

17

Expresses de Inteiros
Operadores e nveis de precedncia:

Exemplos:

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

Web site

Examples

18

Constantes de caracteres e cadeias


Cercar caracteres usando apstrofos ou aspas
'A', "x"
Caractere ASCII = 1 byte

Cercar cadeias usando apstrofos ou aspas


"ABC"
'xyz'
Cada caracter ocupa um byte numa cadeia

Cadeia dentro da outra:


'Say "Goodnight," Gracie'

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

Web site

Examples

19

Palavras reservadas e identificadores


Palavras reservadas (no podem ser usadas como
identificadores)
Mnemnicos de instrues, diretivas, atributos de tipo,
operadores, smbolos pr-definidos

Identificadores
1-247 caracteres, incluindo dgitos
Insensvel caixa (maiscula e minscula)
primeiro caractere deve ser letra, _, @, ?, ou $

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

Web site

Examples

20

Diretivas
Comandos que so reconhecidos pelo montador
No fazem parte do conjunto de instrues do processador
Usados para declarar reas de cdigo, reas de dados,
selecionar modo de memria, declarar procedimentos, etc.
Insensvel caixa
Diferentes montadores podem ter diferentes diretivas
Por exemplo, NASM no igual a MASM

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

Web site

Examples

21

Instrues

Montado em cdigo de mquina pelo montador(assembler)


Executado em tempo de execuo pelo CPU
Nesta disciplina usa-se as instrues do Intel IA-32
Todas as instrues contm:

Label
Mnemnico
Operandos
Comentrio

(opcional)
(necessrio)
(depende da instruo)
(opcional)

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

Web site

Examples

22

Labels (rtulos)
Funciona como marcadores de posio
marca o endereo de cdigos e dados

Segue a mesma regra dos identificadores


Label para dados
deve ser nico
exemplo: myArray

(no tem dois pontos)

Label para cdigos


posio de instrues de jump e loop
exemplo: L1:
(seguido por dois pontos)

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

Web site

Examples

23

Mnemnicos e Operandos
Mnemnicos de instrues
ajuda a memorizao
exemplos: MOV, ADD, SUB, MUL, INC, DEC

Operandos

constante
expresso de constantes
registrador
memria (label de dados)

Constantes e expresses de constantes so tambm


chamadas de valores imediatos
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007.

Web site

Examples

24

Comentrios
Comentrios so teis!

explica o propsito do programa


quando foi escrito e o autor
informao de reviso
tcnicas e detalhes de codificao
explicao especfica da aplicao

Comentrios numa mesma linha


Inicia-se com ponto e vrgula (;)

Comentrios em mltiplas linhas


comea com a diretiva COMMENT e um caracter
escolhido pelo programador
termina com o mesmo caracter escolhido pelo
programador
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007.

Web site

Examples

25

Exemplo de formato de instrues


Sem operandos
stc ; set Carry flag

Um operando
inc eax
; register
inc myByte; memory

Dois operandos
add ebx,ecx
sub myByte,25
add eax,36 * 25

; register, register
; memory, constant
; register, constant-expression

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

Web site

Examples

26

Prxima seo

Elementos bsicos da linguagem Assembly


Exemplo: adio e subtrao de inteiros
Montagem, Linking, e execuo de programas
Definio de dados
Constantes simblicas
Programao no modo de endereamento real

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

Web site

Examples

27

Exemplo: Adio e Subtrao de Inteiros


(AddSub.asm)
TITLE Add and Subtract

(AddSub.asm)

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


INCLUDE Irvine32.inc
.code
main PROC
mov eax,10000h
add eax,40000h
sub eax,20000h
call DumpRegs
exit
main ENDP
END main

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

;
;
;
;

EAX = 10000h
EAX = 50000h
EAX = 30000h
display registers

Web site

Examples

28

Exemplo de sada
Sada 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

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

SF=0

Web site

ZF=0

OF=0

Examples

29

Sugesto de padres de codificao

(1 de 2)

Algumas abordagens para uso de maisculas


no usar maisculas
usar s maisculas
maisculas para palavras reservadas, incluindo
mnemnicos de instrues e nomes de registradores
maisculas somente para diretivas e operadores

Outras sugestes
nomes de identificadores descritivos
espaos ao redor dos operadores aritmticos
linhas em branco entre procedimentos

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

Web site

Examples

30

Sugesto de padres de codificao

(2 de 2)

Indentao e espaamento
labels de cdigo e dados sem indentao
instrues executveis indentar 4-5 espaos
comentrios: comear na coluna 40-45, alinhados
verticalmente
1-3 espaos entre mnemnico da instruo e operandos
ex: mov ax,bx

1-2 linhas em branco entre procedimentos

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

Web site

Examples

31

Verso 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:DWORD
DumpRegs PROTO
.code
main PROC
mov eax,10000h
add eax,40000h
sub eax,20000h
call DumpRegs
INVOKE ExitProcess,0
main ENDP
END main
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007.

; EAX = 10000h
; EAX = 50000h
; EAX = 30000h

Web site

Examples

32

Gabarito de programa
TITLE Program Template
;
;
;
;
;

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

(Template.asm)

Instructors: please
customize as needed

INCLUDE Irvine32.inc
.data
; (insert variables here)
.code
main PROC
; (insert executable instructions here)
exit
main ENDP
; (insert additional procedures here)
END main

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

Web site

Examples

33

Prxima seo

Elementos bsicos da linguagem Assembly


Exemplo: adio e subtrao de inteiros
Montagem, Linking, e execuo de programas
Definio de dados
Constantes simblicas
Programao no modo de endereamento real

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

Web site

Examples

34

Montagem, linking e execuo de programas

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

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

Web site

Examples

35

Ciclos de Montagem, Linkagem e Execuo

O seguinte diagrama descreve os passos a partir da criao do


programa fonte at a execuo do programa.
Se o cdigo fonte modificado, passos 2 a 4 devem se repetir.

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

Web site

Examples

36

Arquivo de Listagem (List File)


Mostra como o programa montado
Contem

cdigo fonte
endereos
cdigo objeto (linguagem de mquina)
nomes de segmentos
smbolos (variveis, procedimentos, e constantes)

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

Web site

Examples

37

Arquivo de Mapeamento (Map File)


Informaes sobre cada segmento de programa

endereo de incio
endereo de fim
tamanho
tipo de segmento

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

Web site

Examples

38

Prxima seo

Elementos bsicos da linguagem Assembly


Exemplo: adio e subtrao de inteiros
Montagem, Linking, e execuo de programas
Definio de dados
Constantes simblicas
Programao no modo de endereamento real

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

Web site

Examples

39

Definio de dados

Tipos de dados intrnsecos


Sentenas para definio de dados
Definio de BYTE e SBYTE
Definio de WORD e SWORD
Definio de DWORD e SDWORD
Definio de QWORD
Definio de TBYTE
Definio nmero Real
Ordem Little Endian
Adicionando variveis ao programa AddSub
Declarao de dados no-inicializados

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

Web site

Examples

40

Tipos de dados instrnsecos (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

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

Web site

Examples

41

Tipos de dados instrnsecos (2 de 2)


REAL4
4-byte IEEE short real

REAL8
8-byte IEEE long real

REAL10
10-byte IEEE extended real

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

Web site

Examples

42

Sentena de definio de dados

Uma sentena de definio de dados define a forma de


armazenamento da varivel na memria.

Pode opcionalmente atribuir um nome (label) ao dado


Sintaxe:
[name] directive initializer [,initializer] . . .

value1 BYTE 10

Todos os inicializadores (initializers) so dados binrios na memria

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

Web site

Examples

43

Definio de dados BYTE e SBYTE


Cada sentena seguinte define o armazenamento de um byte:
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

Se for declarada uma varivel SBYTE, o Microsoft debugger


mostra automaticamente o seu valor decimal com sinal.

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

Web site

Examples

44

Definio de Byte Arrays (vetores de bytes)


Usam mltiplos inicializadores:
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

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

Web site

Examples

45

Definio de cadeias (Strings)

(1 de 3)

Uma cadeia implementada como um vetor de caracteres


por convenincia, usualmente cercada com apstrofos ou aspas
geralmente termina com zero

Exemplos:
str1 BYTE
str2 BYTE
str3 BYTE
greeting

"Enter your name",0


'Error: halting program',0
'A','E','I','O','U'
BYTE "Welcome to the Encryption Demo program "
BYTE "created by Kip Irvine.",0

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

Web site

Examples

46

Definio de cadeias (Strings)

(2 de 3)

Para continuar uma cadeia na linha seguinte, essa


linha deve terminar com vrgula:
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

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

Web site

Examples

47

Definio de cadeias (Strings)

(3 de 3)

Seqncia 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

Idia: Definir todas as cadeias usadas no programa na


mesma rea do segmento de dados.

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

Web site

Examples

48

Usando o operador DUP

Usar DUP para alocar (criar espao para) um vetor ou cadeia.


Sintaxe: counter DUP ( argument )

Counter e argument devem ser constantes ou expresses de


constantes
counter indica o nmero 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

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

Web site

Examples

49

Definio de WORD e SWORD

Definio de armazenamento de inteiros de 16-bits

ou dupla de caracteres
valor nico ou mltiplos valores

word1
word2
word3
word4
myList
array

WORD
SWORD
WORD
WORD
WORD
WORD

65535
32768
?
"AB"
1,2,3,4,5
5 DUP(?)

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

;
;
;
;
;
;

largest unsigned value


smallest signed value
uninitialized, unsigned
double characters
array of words
uninitialized array

Web site

Examples

50

Definio de DWORD e SDWORD


Definio de armazenamento de inteiros no-sinalizados ou
sinalizados de 32-bits:
val1
val2
val3
val4

DWORD
SDWORD
DWORD
SDWORD

12345678h
2147483648
20 DUP(?)
3,2,1,0,1

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

;
;
;
;

unsigned
signed
unsigned array
signed array

Web site

Examples

51

Definio de dados QWORD, TBYTE e Real


Definio de armazenamento para quadwords,
tenbytes, e nmeros reais:
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)

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

Web site

Examples

52

Ordem 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
endereo de memria.
Exemplo:
val1 DWORD 12345678h

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

Web site

Examples

53

Adicionando Variveis ao AddSub


TITLE Add and Subtract, Version 2
(AddSub2.asm)
; este programa soma e subtrai inteiros no-sinalizados de 32-bits
; e armazena a soma numa variavel.
INCLUDE Irvine32.inc
.data
val1 DWORD 10000h
val2 DWORD 40000h
val3 DWORD 20000h
finalVal DWORD ?
.code
main PROC
mov eax,val1
; start with 10000h
add eax,val2
; add 40000h
sub eax,val3
; subtract 20000h
mov finalVal,eax
; store the result (30000h)
call DumpRegs
; display the registers
exit
main ENDP
END main
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007.

Web site

Examples

54

Declarao de dados no-inicializados

Usar a diretiva .data? para declarar um segmento de dados no


inicializados:
.data?

Dentro do segmento, declarar variveis com inicializadores "?" :


smallArray DWORD 10 DUP(?)

vantagem: reduz o tamanho do arquivo EXE do programa.

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

Web site

Examples

55

Prxima seo

Elementos bsicos da linguagem Assembly


Exemplo: adio e subtrao de inteiros
Montagem, Linking, e execuo de programas
Definio de dados
Constantes simblicas
Programao no modo de endereamento real

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

Web site

Examples

56

Constantes simblicas
(representao de constantes usando smbolos)

Diretiva de sinal de igual


Clculo de tamanho de vetores e cadeias
Diretiva EQU
Diretiva TEXTEQU

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

Web site

Examples

57

Diretiva de sinal de igual (=)


name = expression
expression um inteiro de 32-bits (expresso ou
constante)
pode ser redefinido
name chamado de constante simblica

Um bom estilo de programao usar smbolos


COUNT = 500
.
.
mov al,COUNT

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

Web site

Examples

58

Clculo do tamanho de um vetor de bytes


endereo da posio atual, onde est sendo
calculado dado pelo contador de posio: $
subtrair o endereo de list
a diferena o nmero de bytes

list BYTE 10,20,30,40


ListSize = ($ - list)

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

Web site

Examples

59

Clculo do tamanho de um vetor de Words


(tamanho = nmero de words)
Divide o nmero total de bytes por 2 (tamanho de um word)

list WORD 1000h,2000h,3000h,4000h


ListSize = ($ - list) / 2

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

Web site

Examples

60

Clculo do tamanho de um vetor de Doublewords


Divide o nmero total de bytes por 4 (tamanho de um
doubleword)

list DWORD 1,2,3,4


ListSize = ($ - list) / 4

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

Web site

Examples

61

Diretiva EQU
Define um smbolo como um inteiro ou expresso de texto
No pode ser redefinido

PI EQU <3.1416>
pressKey EQU <"Press any key to continue...",0>
.data
prompt BYTE pressKey

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

Web site

Examples

62

Diretiva TEXTEQU
Define um smbolo como um inteiro ou expresso 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

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

; generates: "mov al,10"

Web site

Examples

63

Prxima seo

Elementos bsicos da linguagem Assembly


Exemplo: adio e subtrao de inteiros
Montagem, Linking, e execuo de programas
Definio de dados
Constantes simblicas
Programao no modo de endereamento real

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

Web site

Examples

64

Programao no modo de endereamento real

(1 of 2)

Gera programas em MS-DOS de 16 bits


Vantagens
habilita a chamada do MS-DOS e funes BIOS
sem restrio de acesso memria

Desvantagens
deve estar alerta a segmentos e offsets
No pode chamar funes Win32 (Windows 95 em
diante)
Limitado a 640K para memria de programa

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

Web site

Examples

65

Programao no modo de endereamento real

(2 de 2)

Requisitos
INCLUDE Irvine16.inc
Initializar DS para o segmento de dados:
mov ax,@data
mov ds,ax

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

Web site

Examples

66

Soma e subtrao, verso de 16-Bits


TITLE Add and Subtract, Version 2
(AddSub2r.asm)
INCLUDE Irvine16.inc
.data
val1 DWORD 10000h
val2 DWORD 40000h
val3 DWORD 20000h
finalVal DWORD ?
.code
main PROC
mov ax,@data
; initialize DS
mov ds,ax
mov eax,val1
; get first value
add eax,val2
; add second value
sub eax,val3
; subtract third value
mov finalVal,eax
; store the result
call DumpRegs
; display registers
exit
main ENDP
END main
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007.

Web site

Examples

67

Resumo

expresso de inteiros, constantes de caracteres


diretivas interpretadas pelo montador (assembler)
instruo executa no runtime
segmentos de cdigo, dados e pilha
Arquivos: fonte, listing, objeto, map, executvel
Diretivas para definio de dados:
BYTE, SBYTE, WORD, SWORD, DWORD, SDWORD,
QWORD, TBYTE, REAL4, REAL8, e REAL10

operador DUP, contador de posio ($)

Constante simblica
EQU e TEXTEQU

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

Web site

Examples

68

46 69 6E 69 73

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

Web site

Examples

69

Você também pode gostar