Você está na página 1de 39

Microprocessadores

Prof. Arthur Braga

Tpicos
n

Assembly 8086

Formato de Dados

Estrutura de um Programa Assembly

Conjunto de Instrues de Movimento de Dados

Conjunto de Instrues Aritmticas

Conjunto de Instrues Lgicas

Conjunto de Instrues de Deslocamento e Rotao

Conjunto de Instrues de Controle do Programa (Desvios)

MACROS

Sintaxe do Assembly 8086

Sintaxe do Assembly 8086

Sintaxe do Assembly 8086

Sintaxe do Assembly 8086

Como so os diferentes campos de uma linha de programa ?

Sintaxe do Assembly 8086


O campo Rtulo:

Sintaxe do Assembly 8086

Sintaxe do Assembly 8086

Sintaxe do Assembly 8086

Formato de Dados

Formato de dados

Formato de dados

QUESTO: Como o montador trata 0Ah, Ah e Ah ?

Formato de dados

Tabela ASCII

Como os dados podem ser declarados como variveis ou constantes ?

Formato de dados

Formato de dados

Formato de dados

Pode-se utilizar a diretiva DUP para reservar espao na memria que seja mltiplo
do tipo escolhido:
text DW 10 DUP (W) ;reserva 20 bytes na memria e inicializa com o ASCII de W
text DW 10 DUP (?) ;reserva 20 bytes na memria, sem inicializao

Caso se queira trabalhar com valores constantes ?

Formato de dados

Formato de dados

Tabela ASCII

Variveis e constantes podem ser declaradas em qualquer ponto do programa ?

Estrutura de um Programa
Assembly

10

Estrutura de um Programa Assembly

Modelo
TINY
SMALL
MEDIUM
COMPACT

Descrio
Todos os registradores de Segmento (DS, CS,
SS e ES) tm o mesmo valor.
Cdigo em 1 segmento;
Dados em 1 segmento
Cdigo em mais de 1 segmento;
Dados em 1 segmento
Cdigo em 1 segmento;
Dados em mais de 1 segmento

LARGE

Cdigo em mais de 1 segmento;


Dados em mais de 1 segmento;
Nenhum array maior que 64 Kbytes

HUGE

Cdigo em mais de 1 segmento;


Dados em mais de 1 segmento;
Arrays maiores que 64 Kbytes

Estrutura de um Programa Assembly

11

Estrutura de um Programa Assembly

Estrutura de um Programa Assembly

12

Estrutura de um Programa Assembly

Estrutura de um Programa Assembly

OBS:

13

Conjunto de Instrues de
Movimento de Dados

Conjunto de Instrues de Movimento de Dados

14

Conjunto de Instrues de Movimento de Dados


Instrues de movimento de dados
PUSH / POP Armazenar / recuperar dados da pilha de memria (LIFO)

PUSH AX

crescimento
da pilha

PUSH AX aps a execuo da instruo o SP = SP 2.

Conjunto de Instrues de Movimento de Dados


POP Executa a operao inversa do PUSH.

POP BX

reduo
da pilha

15

Conjunto de Instrues de Movimento de Dados


Carga de endereo efetivo.
LEA (Load Effective Address)
LEA BX, LIST ;carrega o offset da posio de memria da varivel LIST
A diretiva OFFSET realiza a funo da instruo LEA. Exemplo:
MOV BX, OFFSET LIST
LDS carrega a base do endereo em DS e o offset em um registrador
LES carrega a base do endereo em ES e o offset em um registrador

LDS BX, LIST

Conjunto de Instrues de Movimento de Dados


Instrues de strings data transfers
LODS, STOS e MOVS
Flag de direo: a flag de direo seleciona autoincremento (D=0) ou
autodecremento (D=1).
CLD : faz D = 0
STD : faz D = 1
Registradores DI e SI: durante uma execuo de instruo de string, o
acesso memria ocorre atravs de DI e SI (ou ambos).
DI Offset para acesso a dados no Segmento Extra
SI Offset para acesso a dados no Segmento de Dados
Quando estas instrues podem ser teis, e qual a sintaxe delas ?

16

Conjunto de Instrues de Movimento de Dados


LODS Carrega AL ou AX com dado armazenado no SEGMENTO DE
DADOS com offset dado por SI.

STOS Armazena AL ou AX em localizaes do SEGMENTO EXTRA


endereadas por DI

Conjunto de Instrues de Movimento de Dados


STOS com REP O prefixo REP adicionado a uma instruo de string
provoca a repetio da ao da instruo e decrementa CX de 1 aps cada
repetio. O final das repeties ocorre quando CX = 0.

EXEMPLO: Considere que CX = 100,


REP STOSB

; executa STOSB 100 vezes, DI incrementado ou


; decrementado (a depender da flag D) e o contedo de
; AL armazenado em um bloco de memria.

17

Conjunto de Instrues de Movimento de Dados


MOVS uma das mais teis instrues de strings, pois transfere dados entre
posies de memria.
Operao no segmento de dados envolve SI
Operao no segmento extra envolve DI
A instruo transfere 1 byte ou 1 word do segmento de dados endereado
por SI para o segmento extra endereado por DI.
Exemplo
scrollup uma linha
do vdeo

Conjunto de Instrues de Movimento de Dados


IN e OUT
As instrues IN e OUT executam operaes de I/O. Nestas operaes os
contedos de AL ou AX so transferidos entre o dispositivo de I/O e o
microprocessador
Formas:
Fixed Port: o nmero da porta segue o cdigo da operao da instruo
Variable Port: o nmero da porta esta armazenado no registrador DX

18

Conjunto de Instrues de Movimento de Dados


Outras importantes instrues de transferncia de dados
XCHG Troca o contedo entre registradores ou entre registradores e
posies de memria.

Conjunto de Instrues de Movimento de Dados


Prefixo de Passagem de Segmento
Pode ser adicionado a quase todas instrues em modo de endereamento
memria, permitindo ao programador desviar do segmento padro.
MOV AX, [DI]

;acessa o segmento de dados (default)

MOV AX, ES:[DI]

;acessa o segmento extra

19

Conjunto de Instrues
Aritmticas

Conjunto de Instrues Aritmticas

Estas instrues afetam os flags.

20

Conjunto de Instrues Aritmticas

Estas instrues afetam os flags.

Relembrando: Registrador de Flags

Conjunto de Instrues Aritmticas


Adio com carry
como o carry liga duas instrues de adio 16 bits em uma de 32 bit.
SUM32

PROC

NEAR

ADD AX, CX
ADC BX, DX
RET
SUM32

ENDP

21

Conjunto de Instrues Aritmticas


Subtrao com vem 1(borrow) SBB
SUB AX, DI
SBB BX, SI

Conjunto de Instrues Aritmticas


Instruo de Comparao CMP
A instruo CMP uma subtrao que afeta apenas os bits de flag.
til para comparar o contedo de registradores ou posies de memria.
So, geralmente, seguidas por instrues de salto
CMP AL,10h

; compara AL com 10h

JAE SUBER

; salta para SUBER se AL = 10h ou AL > 10h

22

Conjunto de Instrues Aritmticas

Conjunto de Instrues Aritmticas


Instrues de Multiplicao e Diviso
Multiplicao
Pode ser executado em byte ou word, pode considerar inteiros sinalizados (IMUL) ou inteiros nosinalizado (MUL) sempre utiliza o ACUMULADOR.
Apenas do 386 em diante que realizada multiplicao em 32 bits.
O produto sempre double-width.

Para 8 bits:
resultado em AX
Para 16 bits:
resultado em DX e AX

23

Conjunto de Instrues Aritmticas


Diviso
Pode ser executado em byte ou word, considerando inteiros sinalizados (IDIV) ou inteiros nosinalizado (DIV) sempre utiliza o ACUMULADOR como DIVIDENDO.
Do 386 em diante, realiza diviso em 32 bits.
O Dividendo sempre double-width, ou seja uma diviso de 8 bits divide um nmero de 16 bits
por um de 8 bits, uma diviso de 16 bits divide um nmero de 32 bits por um de 16 bits e uma
diviso de 32 bits divide um nmero de 64 bits por um de 32 bits.
Dois tipos de erros:
Diviso por zero
Overflow

Para 8 bits:
quociente em AL, e o resto para AH
Para 16 bits (dividendo DX e AX):
quociente em AX, e o resto para DX

Conjunto de Instrues Lgicas

24

Conjunto de Instrues Lgicas

EXEMPLO ?

Conjunto de Instrues Lgicas

Restou alguma operao Lgica Bsica ?

25

Conjunto de Instrues Lgicas

Instruo NOT
Aceita um operando. Realiza a inverso lgica de todos os bits do
operando: o COMPLEMENTO 1.
NOT operando

Instruo NEG
Aceita um operando. Realiza a inverso aritmtica do operando: o
COMPLEMENTO 2. Muda o operando de positivo para negativo, ou
vice-versa.
NEG operando

Conjunto de Instrues Lgicas

Instrues de test e teste de bit

TEST

A instruo de TEST executa uma operao AND. A diferena que a instruo AND modifica o
operando destino, enquanto TEST no o faz. A instruo TEST afeta apenas o Registrador de Flags.

Normalmente testa um bit ou conjunto de bits.

A flag ZF = 1 se o resultado do teste zero e ZF = 0 caso contrrio.

Geralmente uma instruo TEST seguida por uma de salto.

Exemplo:

TEST AL,1

;testa bit menos significativo

JNZ RIGHT

;se bit menos significativo igual a 1, saltar para RIGHT

TEST AL, 128

;testa o bit mais significativo

JNZ LEFT

;se bit mais significativo igual a 1, saltar para LEFT

26

Conjunto de Instrues de
Deslocamento e Rotao

Conjunto de Instrues de Deslocamento e Rotao

Deslocamento

27

Conjunto de Instrues de Deslocamento e Rotao

Instrues que executaro mais rpido

Conjunto de Instrues de Deslocamento e Rotao

Rotao

28

Conjunto de Instrues de Deslocamento e Rotao

Comparao de strings
SCAS (String scan)

CMPS (String compare)

SCAS compara (como a instruo CMP) o registrador AL com um


bloco de 1 byte da memria (SCASB), ou AX com um bloco de 2 bytes
(SCASW). A comparao feita com o contedo do Segmento Extra. O
bit de flag D indica a direo da comparao.
Pode ser usada com o prefixo REPNE (repeat while not equal) desta
forma a instruo repetida at que CX = 0, ou o dado seja encontrado.
EXEMPLO: Em uma seo de memria de 100 bytes, deseja-se
encontrar 00H.

Conjunto de Instrues de Deslocamento e Rotao


CMPS compara duas sees de memria. Pode-se comparar bytes
(CMPSB), ou palavras (2 bytes) (CMPSW). Os contedos de dados do
segmento de dados (indexado por SI) e dados do segmento extra (indexados
por DI) podem ser comparados. O flag D indica a direo da comparao.
Utiliza-se normalmente em conjunto com: REPZ (repeat until zero), REPNZ
(repeat until not zero), REPE (repeat while equal) e REPNE (repeat while not
equal).
EXEMPLO: Compara se duas sees de memria so iguais.

29

Conjunto de Instrues de
Controle do Programa (Desvios)

Conjunto de Instrues de Controle do Programa


Grupo das instrues JMP (JuMP) Incondicionais e Condicionais.
O Salto Incondicional pode ser de trs tipos: short, near e far.
Short jump: executa salto para posies da memria localizadas entre -128 a
127 byes relativo ao endereo que segue a instruo.
O montador suporta endereamento em relao ao
ponteiro da instruo IP, usando $ +/-.
EXEMPLO: JMP $+2

; salta 2 posies que


; seguem a posio do JMP

Near jump: permite o salto entre +/- 32 Kbytes.

Far jump: permite saltos inter-segmentos.

Mas nem todo


salto
incondicional !

30

Conjunto de Instrues de Controle do Programa


Saltos condicionais: Os saltos condicionais testam os bits do registrador de flags
sinal (SF), zero (ZF), carry (CF), paridade (PF), overflow (OF).
As operaes podem ser sinalizadas ou no:
FF (255) nos nmeros no sinalizados maior que 00h, porm
FF (-1) nos nmeros sinalizados menor que 00h.

Conjunto de Instrues de Controle do Programa


Quando nmeros sinalizados so comparados usa-se:
JG, JL, JGE, JLE, JE e JNE
Os termos greater e less se referem a nmeros sinalizados
Quando nmeros no-sinalizados so comparados usa-se:
JA, JB, JAE, JBE, JE e JNE
Os termos above e below se referem a nmeros no-sinalizados

31

Conjunto de Instrues de Controle do Programa


Instruo LOOP:
uma combinao de decremento de CX com JNZ
LOOP decrementa CX e se CX 0, salta para o endereo indicado pelo LABEL.
LOOP usa CX

Conjunto de Instrues de Controle do Programa


PROCEDIMENTOS:
Antes de apresentar as prximas instrues de Controle do Programa preciso
formalizar o conceito de PROCEDIMENTO (ou PROCEDURE, em ingls). O
procedimento, ou subrotina, um conjunto de instrues que realiza uma tarefa
especfica.
Vantagens de utilizar procedimentos na programao Assembly:
Quando o cdigo reutilizvel, salva espao de memria.
Torna mais simples o desenvolvimento do programa por torn-lo modular.
Realiza um SALTO no programa, mas permite realizar um RETORNO.
Mas tambm h uma desvantagem:
Consome uma parcela de tempo do processador para realizar o desvio para o
procedimento, e para retornar do procedimento.

Como declarado um PROCEDIMENTO ?

32

Conjunto de Instrues de Controle do Programa


PROCEDIMENTOS:

NOME PROC

NEAR / FAR

instruo 1
Instruo 2

M
instruo N
RET
NOME ENDP

A instruo CALL que transfere a execuo do programa para o procedimento.


EXEMPLO:
CALL NOME.

O endereo de retorno
armazenado na PILHA

Conjunto de Instrues de Controle do Programa


Instruo RET: Remove um nmero de 16 bits (near return) ou 32 bits (far return) da pilha e
coloca em IP ou em IP e CS

33

Conjunto de Instrues de Controle do Programa

O SEGMENTO DE PILHA fundamental para os compiladores


implementarem
PROCEDIMENTOS (SUB-ROTINAS).
Este
segmento de memria, alm de armazenar o endereo de retorno,
responsvel por receber os parmetros a serem manuseados
pela subrotina, que so passados pelo procedimento que a
chamou.

Conjunto de Instrues de Controle do Programa


Segmento de
cdigo

instruo

Pilha

instruo

retorno

instruo de chamada (CALL)


instruo seguinte chamada

1a. instruo da subrotina


instruo da subrotina
instruo da subrotina
instruo de retorno (RET)

34

Conjunto de Instrues de Controle do Programa

E caso fosse um call far ?

Conjunto de Instrues de Controle do Programa


INTRODUO S INTERRUPES:
Uma interrupo funciona como um CALL gerado por

hardware (derivado

externamente por um sinal nos pinos do processador relacionados a interrupes), ou


por software (derivado da execuo de uma instruo ou de algum outro evento
interno). Nos dois casos, o programa interrompido, e feita a chamada a um
procedimento de atendimento interrupo.

Como isso ocorre em interrupes por software ?


(interrupes por hardware sero vistas mais frente na disciplina)

O processador tem trs diferentes instrues de interrupo:


INTO

- interrupo de overflow, chama a interrupo 4 se O = 1.

INT 3

- interrupo de breakpoint, usado para debugar o programa.

INT nmero - o nmero indica o vetor de interrupo da tabela de vetores de


interrupo.

VETOR DE INTERRUPO ?
TABELA DE VETORES DE INTERRUPO ?

35

Conjunto de Instrues de Controle do Programa


INTRODUO S INTERRUPES:

NOME

PROC

FAR

instruo 1
Instruo 2

M
instruo N
IRET
NOME

ENDP

Obs.: Como CALL, a instruo INT armazena CS e


IP na pilha. Mas diferente de CALL, a instruo INT
tambm armazena as flags na pilha.

Conjunto de Instrues de Controle do Programa

Grande nmero de funes ? Quais ? Como acess-las ?

36

Conjunto de Instrues de Controle do Programa

Outras interrupes do DOS: Apndice G do Zelenovsky !

MACROS

37

MACROS
Macro um conjunto de instrues que realiza uma tarefa especfica, da mesma

forma que ocorre com um procedimento ou subrotina. A diferena que um


procedimento acessado via instruo CALL, enquanto uma macro inserida no
programa no ponto em que seu conjunto de instrues deve aparecer.
Utiliza-se as diretivas MACRO e ENDM para delimitar incio e final de uma macro.
EXEMPLO:
NOME

MACRO

parametros

instruo 1
Instruo 2

M
instruo N
ENDM

Como o montador trata uma MACRO ?

MACROS
MOVE

MACRO

A, B

PUSH AX
MOV AX, B
MOV A, AX
POP AX
ENDM

TRECHO DE PROGRAMA:

INTERPRETAO DO MONTADOR:

M
PUSH AX
MOV AX, VAR2
MOV VAR1, AX
POP AX
ADD CX, VAR1
PUSH AX
MOV AX, VAR4
MOV VAR3, AX

MOVE VAR1, VAR2

POP AX

ADD CX, VAR1

ADD CX, VAR3

MOVE VAR3, VAR4


ADD CX, VAR3

M
Obs.: Diferente do procedimento, uma macro no
demanda tempo do processador para desviar o
ponto de execuo do programa.

38

Bibliografia Bsica
n

Zelenovsky, Ricardo e Mendona, Alexandre, PC um


guia prtico de Hardware e Interfaceamento, MZ Editora
Ltda, 4a. edio, 2006. (http://www.mzeditora.com.br/)
Brey, Barry, The Intel Microprocessors - 8086/88, 286,
386 and 486 - Architecture, Programming and
Interfacing, Third Edition, PHI, 1994.

Material da Disciplina
SIGAA - Sistema Integrado de Gesto de Atividades Acadmicas

39

Você também pode gostar