Вы находитесь на странице: 1из 27

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

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 DB 10 DUP (W) ;reserva 10 bytes na memria e inicializa com o ASCII de W
text DB 10 DUP (?) ;reserva 10 bytes na memria,

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 e recuperar dados da pilha de memria tipo 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 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


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

18

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

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.

19

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

Conjunto de Instrues
Aritmticas

20

Conjunto de Instrues Aritmticas

Estas instrues afetam os flags.

Conjunto de Instrues Aritmticas

Estas instrues afetam os flags.

Relembrando: Registrador de Flags

21

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

Conjunto de Instrues Aritmticas


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

22

Conjunto de Instrues Aritmticas


Instruo de Comparao CMP
A instruo CMP uma subtrao que afeta apenas os bits de flags.
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

Conjunto de Instrues Aritmticas

23

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

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

24

Conjunto de Instrues Lgicas

Conjunto de Instrues Lgicas

EXEMPLO ?

25

Conjunto de Instrues Lgicas

Restou alguma operao Lgica Bsica ?

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

26

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

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

27

Вам также может понравиться