Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programação em Assembly do 8086/8088, Slides de Programação Assembly

Linguagem de Montagem Assembly para processadores 8086 e 8088 usando o montador TASM

Tipologia: Slides

Antes de 2010

Compartilhado em 07/07/2022

rafael-mendonca-17
rafael-mendonca-17 🇧🇷

1 documento

1 / 32

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Programando em Assembly
(Aula 16)
Linguagem Assembly do 8086/8088
Roberta Lima Gomes - LPRM/DI/UFES
Sistemas de Programação I – Eng. Elétrica
2007/2
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20

Pré-visualização parcial do texto

Baixe Programação em Assembly do 8086/8088 e outras Slides em PDF para Programação Assembly, somente na Docsity!

Programando em Assembly

(Aula 16)

Linguagem Assembly do 8086/

Roberta Lima Gomes - LPRM/DI/UFESSistemas de Programação I – Eng. Elétrica

2007/

2222

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Introdução^ ^ Para construirmos os programas em Assembly, devemos estruturar ofonte da seguinte forma (usando TASM como montador) .MODEL^ SMALLDefine^ o

modelo^

de^ memória

a^ usar^

em^ nosso

programa

.STACKReserva^

espaço^ de

memória

para^ as

instruções

de^ programa

na^ pilha

.CODEDefine^ as

instruções

do^ programa,

relacionado

ao^ segmento

de^ código

ENDFinaliza

um^ programa

assembly

4444

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Primeiro Exemplo

.MODEL^ SMALL.STACK.CODE.DATAEND

Código^ Dados^ Pilha

  • A memória é dividida em umnúmero arbitrário de segmentos

5555

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Registradores de Uso Geral

^ AX:^ Acumulador^ ^ Usado em operações aritméticas. ^ BX:^ Base^ ^ Usado para indexar tabelas de memória (ex.: índice de vetores). ^ CX:^ Contador^ ^ Usado como contador de repetições em loop e movimentação repetitivade dados. ^ DX:^ Dados^ ^ Uso geral.

AX^ BX^ CX^ DX^

(16 bits)

AH/AL BH/BL CH/CL DH/DL

(8 bits)

7777

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Usando Instruções de transferência de dados^ ^ MOV Destino,Fonte

mov var, Ds

memória,^

reg_seg

mov Ax, Ds

reg16,^ reg_seg

mov Ds, Ax

reg_seg,^

reg

mov var, 12

registrador,

imediato

mov Si, var

registrador,

memória

mov var, Si

memória,^

registrador

mov Ax, var

acumulador,

memória

mov var, Al

memória,^

acumulador

mov Bx, Cx

registrador,

registrador

Exemplo

Operação

8888

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Exemplo 2 ^ Faça um programa em ASM86 correspondente ao seguinte"código C“ (use “mov” e “dw”) unsigned^

int^ x,^ y,

z; main(){ x^ =^ 7;y^ =^ 13;z^ =^ x;}

.MODEL^ SMALL.STACK.CODE

mov^ x,7mov^ y,13mov^ DX,xmov^ z,DX .DATAx^ dw^

y^ dw^

z^ dw^

END

10101010

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Exemplo 3 ^ Faça um programa em ASM86 correspondente ao seguinte"código C“ (use “mov”,“dw”) unsigned^

int^ x^ =^

unsigned

int^ y^ =

unsigned

int^ soma,

sub; main(){ x^ =^ x

+^ 8;soma =^ x^ +^ y;x = x -^3 ; sub = x^ -^ y }

.MODEL^ SMALL.STACK.CODE

add^ x,^

;x=x+ mov^ DX,x

;DX=x add^ DX,y

;DX=DX+y=x+y mov^ soma,Dx

;soma=DX=x+y sub^ x,3 ;

;x=x- mov^ DX,x

;DX=x sub^ DX,y

;DX=DX-y=x-y mov^ sub,DX

;sub=DX=x-y .DATAx^ dw^

y^ dw^

soma^ dw^

sub^ dw^

END

11111111

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Usando Instruções Aritméticas

^ MUL^

origem Se (origem == byte)AX = AL * origemSe (origem == word)DX:AX = AX * origem^ ExemploOperando^ MUL 20imediato^ MUL CHreg8^ MUL BXreg16^ MUL VarBytemem8^ MUL VarWordmem

^ DIV^

origem Se (origem == byte)AL =^ AX / origemAH^ = restoSe (origem ==^

ord)

AX^ =^ DX:AX / origemDX^ =^ resto^ ExemploOperando^ DIV 16imediato^ DIV BLreg8^ DIV BXreg16^ DIV VarBytemem8^ DIV VarWordmem

13131313

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Usando Instruções Lógicas  XOR destino,fonte^ destino

^ destino xor origem (bit a bit)

Xor var, 3

memória, imediato

Xor Si, 0CAh

registrador, imediato

Xor Al, 10101111b

acumulador, imediato

Xor var, Dx

memória, registrador

Xor Cl, var

registrador, memória

Xor Bx, Cx

registrador, registrador

Exemplo Operação

^ AND,

OR

^ NOT^

(sintaxe só c/

destino

14141414

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Exemplo 5^ ^ Implemente um trecho de código em Assembly que troque o valor doregistrador AH com o valor do registrador BH^ ^ Utilize apenas instruções lógicas XOR^ ^ Você pode utilizar outros registradores para guardar valoresintermediários

xor^ DH,DH

;DH=

xor^ DH,AH

;DH=AH

xor^ AH,AH

;AH=

xor^ AH,BH

;AH=BH

xor^ BH,BH

;BH=

xor^ BH,DH

;BH=DH

16161616

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Instruções usadas no controle de fluxo

^ Registrador de Flags: Consiste em um grupo individual de bits decontrole (flag)

[O D I T S Z A P C] OF (Overflow Flag):

Setada quando ocorre overflow aritmético. DF (Direction Flag):

Setada para auto-incremento em instruções de string. IF (Interruption Flag):

Permite que ocorram interrupções quando setada.Pode ser setadapelo sistema ou pelo usuário. TF (Trap Flag) (debug):

Usada por debugadores para executar programas passo a passo. SF (Signal Flag):

Resetada (SF=0) quando um resultado for um número positivo ou zero esetada (SF=1) quando um resultado for negativo. ZF (Zero Flag):

Setada quando um resultado for igual a zero. AF (Auxiliar Flag):

Setada quando há “vai um” na metade inferior de um byte. PF (Parity Flag):

Setada quando o número de bits 1 de um resultado for par. CF (Carry Flag):

Setada se houver “vai um” no bit de maior ordem do resultado. Tambémusada por instruções para tomadas de decisões.

17171717

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Instruções usadas no controle de fluxo

^ CMP^

destino, origem

Esta instrução subtrai o operador origem do destino (destino – origem), mas nãoarmazena o resultado da operação, apenas afeta o estado das

flags de estado

Se destino-origem == 0

(destino==origem)

ZF=1, SF=0, CF=0Se destino-origem < 0

(destino<origem)

ZF=0, SF= 1, CF=1Se destino-origem > 0

(destino>origem)

Flags setadas de acordo com oresultado de: destino - origem^ ZF=0, SF= 0, CF=

19191919

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Instruções usadas no controle de fluxo

^ JE rótulo

(Jump if Equal ... JZ) ZF = 1 --> Salta se A == B ^ JNE rótulo

(Jump if not equal...JNZ) ZF = 0^ -->^ Salta se A != B ^ JA rótulo

(Jump if Above) (CF=0) AND (ZF=0)

--> Salta se A>B

^ JAE rótulo

(Jump if Above or Equal) CF=^

--> Salta se A>=B ^ JB rótulo

(Jump if Below) CF=

--> Salta se A<B ^ JBE rótulo

(Jump if Below or Equal) (CF=1) OR (ZF=1) --> Salta se A<=B

CMP A , B

20202020

a^ ProfRoberta L.G. - LPRM/DI/UFES

http://www.inf.ufes.br/~rgomes/sp1.htm

Exemplo 5^ ^ Supondo que AX e BX contenham números inteiros sem sinais,escreva um trecho de programa que coloque o maior deles em CX.

...MOV^ CX,AX

;AX

já^ é^ pressuposto

ser^ o^ maior

deles

CMP^ AX,BXJAE^ ABAIXO

;Salta

se^ AX^ >=

BX

MOV^ CX,BX

;caso

BX^ seja

de^ fato

o^ maior

deles

ABAIXO: ...

;continuação

do^ programa

...