Você está na página 1de 75

09-03-2012

65

A LINGUAGEM A SSEMBLY DO 8086

Para introduzir a linguagem Assembly do 8086 vamos utilizar o programa exemplo.asm.

Trata-se de um programa completo, embora muito simples, que tem como objectivo multiplicar dois nmeros de 16 bits, dando como resultado um nmero de 32 bits que guardado em memria.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

66

E XEMPLO .ASM
PILHA SEGMENT PARA STACK STACK DB 1024 DUP(PILHA) PILHA ENDS DADOS SEGMENT PARA DATA MULT1 DW 204Ah MULT2 DW 382Ah PRODUTO DW 2 DUP(0) DADOS ENDS CODIGO SEGMENT PARA CODE ASSUME CS:CODIGO, DS:DADOS, SS:PILHA INICIO: MOV AX, DADOS MOV DS, AX MOV AX, MULT1 MUL MULT2 MOV PRODUTO, AX MOV PRODUTO+2, DX MOV AH, 4CH INT 21H CODIGO ENDS END INICIO
TECNOLOGIAS
E

ARQUITECTURAS

DE

COMPUTADORES

09-03-2012

67

I NSTRUES DE I NICIAO

Como na maioria das linguagens de programao existem na linguagem Assembly um conjunto de instrues que necessrio incluir antes de se comear a escrever o programa propriamente dito, de forma a permitir a sua correcta execuo. Essas instrues so habitualmente designadas de Instrues de Iniciao.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

68

S EGMENTOS DE UM P ROGRAMA

Um programa em Assembly possui 3 zonas principais de memria, s quais correspondem 3 segmentos:

Segmento de dados (Data Segment)

Zona onde so colocados os dados usados no programa.

Segmento de cdigo (Code Segment)

Zona destinada ao cdigo/instrues do programa.

Segmento de pilha (Stack Segment)

Zona destinada a:

armazenamento dos endereos de retorno aquando da chamada de procedimentos; armazenamento temporrio de dados.
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

09-03-2012

69

AS

DIRECTIVAS

SEGMENT, ENDS

END

As directivas SEGMENT e ENDS so usadas para identificar o grupo de dados ou de instrues que se pretende que faam parte do mesmo segmento. A directiva END indica o trminos do programa. Quaisquer instrues depois desta directiva so ignoradas.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

70

A DIRECTIVA SEGMENT

A directiva segment permite a especificao de um parmetro opcional (PARA) que possibilita a definio do alinhamento dos dados em memria. Esse alinhamento pode ser um dos seguintes: byte, word, dword, para ou page.

Estas palavras-chave instruem o Assembler, o linker e o DOS a efectuar o carregamento de segmentos em mltiplos de bytes (8 bits), words (16 bits), double words (32 bits), pargrafos (16 bytes) ou pginas (256 bytes).
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

09-03-2012

71

A DIRECTIVA SEGMENT

Caso nenhuma das palavras-chave mencionadas surja como parmetro da directiva segment, o alinhamento utilizado por default o pargrafo.

Os registos de segmento do 8086 apontam sempre para endereos de pargrafos, como tal fica facilitado o acesso caso o alinhamento especificado seja o pargrafo.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

72

A DIRECTIVA SEGMENT

Um programa em linguagem Assembly pode ter vrios segmentos de dados e vrios segmentos de cdigo, mas apenas pode aceder a um de cada tipo em cada momento. O operando final da directiva segment um tipo de classe. Este tipo especifica o ordenamento dos segmentos.

Esse operando consiste num smbolo delimitado por apstrofes. Geralmente utilizam-se os seguintes nomes: CODE, DATA e STACK.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

09-03-2012

73

A DIRECTIVA SEGMENT

O ordenamento feito da seguinte forma:


O Assembler localiza o primeiro segmento no ficheiro. Concatena todos os outros segmentos que so do mesmo tipo, no final desse segmento. Aps processar todos os segmentos do mesmo tipo, pesquisado novamente o ficheiro fonte, no que respeita aos restantes segmentos, repetindo todo o processo.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

74

A DIRECTIVA ASSUME

A directiva ASSUME indica ao assembler quais os valores a assumir para um conjunto de registos de segmento, ou seja, quais dos segmentos lgicos correspondem a cada um dos segmentos mencionados.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

09-03-2012

75

I NICIAO

DOS REGISTOS DE SEGMENTO

Uma das iniciaes que necessita de ser sempre feita a dos registos de segmento.

Estes registos precisam de ser carregados com os endereos de memria onde se pretende que os segmentos comecem. Esta iniciao feita automaticamente para os registos CS e SS.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

76

I NICIAO

DOS REGISTOS DE SEGMENTO

A iniciao do registo DS efectuada conforme mostrado no programa exemplo.asm, atravs das instrues

MOV AX, DADOS MOV DS, AX.

As variveis globais so declaradas no segmento de dados.

A declarao de uma varivel efectuada atravs da atribuio de um nome e indicao do seu tipo.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

09-03-2012

77

N OMES PARA OS DADOS

Aps a declarao de uma varivel, possvel a sua referncia pelo seu nome em vez de pela sua localizao no programa. A 1 varivel colocada no segmento de dados obtm armazenamento colocado na localizao DS:0.

O MASM tem o cuidado de alocar variveis de tal forma que elas no se sobreponham.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

78

T IPOS DOS DADOS

Simples ou escalares

Byte Word Dword Fword, Qword e Tbyte Real4, Real8 e Real10

Compostos

Arrays Estruturas
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

09-03-2012

79

D ECLARAO DE VARIVEIS - BYTE

Existem 3 formatos:

Identificador db Identificador byte sinal

? ? Para variveis sem

Identificador [0, 255]

Identificador sbyte sinal

? Para variveis com

Identificador [-128, 127]


ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

80

D ECLARAO DE VARIVEIS - BYTE

Ex:

NoSignedByte UnSignedByte SignedByte

db byte sbyte

? ? ?

O ? indica que a varivel no iniciada. Para que uma varivel seja iniciada dever-se- usar o formato exemplificado a seguir:

NoSignedByte UnSignedByte SignedByte

db byte sbyte

0 -5 Ateno! -1

da responsabilidade do programador assegurar o uso correcto das variveis.


ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

09-03-2012

81

D ECLARAO DE VARIVEIS - WORD

Existem 3 formatos:

Identificador dw Identificador word sinal

? ? Para variveis sem

Identificador [0, 65 535]

Identificador sword sinal

? Para variveis com

Identificador [-32 768, 32 767]


ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

82

D ECLARAO DE VARIVEIS - WORD

Ex:

NoSignedWord UnSignedWord SignedWord

dw word sword

? ? ?

O ? indica que a varivel no inicializada. Para que uma varivel seja inicializada dever-se- usar o formato exemplificado a seguir:


TECNOLOGIAS
E

NoSignedWord UnSignedWord SignedWord


ARQUITECTURAS
DE

dw word sword

65535 0 -1

COMPUTADORES

09-03-2012

83

D ECLARAO DE VARIVEIS - DWORD

Existem 3 formatos:

Identificador dd

Identificador dword ? Para variveis sem sinal

Identificador [0, 4 294 967 295]

Identificador sdword ? Para variveis com sinal

Identificador [-2 147 483 648, 2 147 483 647]


ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

84

D ECLARAO DE VARIVEIS - DWORD

Ex:

NoSignedDWord UnsignedDword SignedDWord

dd dword sdword

? ? ?

O ? indica que a varivel no inicializada. Para que uma varivel seja inicializada dever-se- usar o formato exemplificado a seguir:


TECNOLOGIAS
E

NoSignedDWord UnSignedDWord SignedDWord


ARQUITECTURAS
DE

dd dword sdword

4000000000 255 -1

COMPUTADORES

10

09-03-2012

85

D ECLARAO DE VARIVEIS

Para trabalhar com variveis de maiores dimenses usam-se os formatos:


df/fword (6 bytes) dq/qword (8 bytes) dt/tbyte (10 bytes)

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

86

N OMES PARA OS DADOS

No programa exemplo.asm as instrues:


MULT1 DW 204AH declara uma varivel do tipo word e inicia-a com o valor 204AH. MULT2 DW 382AH declara uma varivel tambm do tipo word e inicia-a com o valor 382AH. PRODUTO DW 2 DUP (0) guarda espao para duas words em memria, d ao endereo do incio da primeira word o nome PRODUTO, e inicia as duas words com o valor zero.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

11

09-03-2012

87

D ECLARAO DE VARIVEIS DE V RGULA F LUTUANTE


REAL4 (4 bytes) REAL8 (8 bytes) REAL10 (10 bytes)

Ex.:

X Y Z

REAL4 REAL8 REAL10

1.0 1.0e-25 -1.2594e+10

Ateno: O operando tem de conter uma constante de vrgula flutuante vlida usando a notao cientfica ou decimal. Variveis do tipo REAL no aceitam inteiros puros.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

88

D EFINIO DE NOMES PARA OS TIPOS DE VARIVEIS COM TYPEDEF

Suponhamos que no gostamos dos nomes usados para declarar as variveis e que preferimos as convenes de nomes usadas em C ou Pascal como integer, float, double, char, O MASM possui a declarao typedef que permite criar aliases para os nomes.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

12

09-03-2012

89

D EFINIO DE NOMES PARA OS TIPOS DE VARIVEIS COM TYPEDEF

Ex.:

int char float i ch x


DE

typedef typedef typedef int char float


COMPUTADORES

sword byte real4 ? ? ?


TECNOLOGIAS
E

ARQUITECTURAS

90

T IPOS DE D ADOS P ONTEIROS

Ponteiro: localizao de memria cujo valor o endereo (ndice) de outra localizao de memria. A famlia 80x86 suporta 2 tipos de ponteiros:

Near: valor de 16 bits que fornece um offset dentro de um segmento (normalmente o data segment). Far: valor de 32 bits para um Segment:Offset de um objecto. O offset carregado para BX, BP, SI, ou DI; o Segment carregado para um registo de segmento (normalmente o ES).
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

13

09-03-2012

91

P ONTEIROS N EAR

Ex:

MOV MOV MOV

P,1000H BX,P AX,[BX]

MOV MOV

AL,[1000H] AH,[1001H]

Desvantagem: endereamento limitado a 64k!


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

92

P ONTEIROS FAR

Os dados so acedidos utilizando os modos de endereamento indirecto por registo.

Ex: Para armazenar o valor de AL no byte apontado por P


LES MOV

BX, P ES:[BX], AL

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

14

09-03-2012

93

T IPOS DE D ADOS P ONTEIROS

Uma vez que os ponteiros near so de 16 bits e os ponteiros far so de 32 bits, podem-se usar dw/word e dd/dword para declarar ponteiros near e far, respectivamente.

No se deve usar sword nem sdword porque os ponteiros so sem sinal.

Formato mais usual para declarar ponteiros:


typename typename

typedef near typedef far

ptr ptr

basetype basetype

Typename representa o nome do novo tipo que se pretende criar. Basetype o nome do tipo para o qual se pretende criar o ponteiro.
ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

94

T IPOS DE D ADOS P ONTEIROS

Exs.:

nbytptr fbytptr wptr bytestr bytestr2 Mystring Strstr


ARQUITECTURAS
DE

typedef near typedef far typedef near nbytptr fbytptr nbytptr


COMPUTADORES

ptr ptr ptr

byte byte word ? ? Mystring

db'Tecnologia da Informtica'

TECNOLOGIAS

15

09-03-2012

95

A RRAYS

Arrays so tipos de dados agregados cujos elementos so todos de um determinado tipo. Os seus elementos so acedidos por intermdio de ndices inteiros. O endereo base de um array o endereo do primeiro elemento.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

96

A RRAYS U NIDIMENSIONAIS

Formato (todos os elementos iniciados com o mesmo valor): arrayname basetype n dup (x)

arrayname: nome do array basetype: tipo de cada elemento do array n dup (x) : duplicao do objecto dentro de parntesis n vezes CharArray

Exs.:

byte word byte real4

128 64 10 8

dup (1) dup (1) dup (?) dup (1.0)

;array [0..127] of byte ;array [0..63] of word ;array [0..9] of byte ;array [0..7] of real4
DE

IntArray

BytArray

RealArray

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

16

09-03-2012

97

A RRAYS U NIDIMENSIONAIS

Formato (elementos iniciados com valores diferentes):

arrayname

basetype

v1, v2, v3,, vn

Exs.:

Squares Squares1 Squares2

byte 0, 1, 4, 9, 16, 25 byte 0, 1, 4, 9, 16, 25, 36, 49 byte 64, 81, 100, 121, 144 byte 0, 1, 4, 9, 16, 25, 36,64,\ 81,100,121, 144, 160, 180,\ 196, 210, 220,225 word 256 dup (0,1,2,3)

BigArray

;array[0..1023] of word
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

98

A RRAYS M ULTIDIMENSIONAIS

O seu armazenamento efectuado atravs de um mapeamento para um array unidimensional. Existem duas tcnicas para manipulao de elementos de um array multidimensional:

Row Major Ordering Column Major Ordering


ARQUITECTURAS COMPUTADORES

TECNOLOGIAS

DE

17

09-03-2012

99

A RRAYS M ULTIDIMENSIONAIS
Row Major Ordering Column Major Ordering

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

100

A RRAYS M ULTIDIMENSIONAIS

Ex.:

A1 A1

byte byte word word byte byte byte

4 16 3 3

dup dup dup dup

(4 dup (?)) (?) (4 dup (5 dup (?))) (4 dup (5 dup (1)))

;array [0..3, 0..3] of byte array [0..2, 0..3, 0..4] of word array [0..2, 0..3, 0..4] of word

A2

A3

A4

0, 1, 2, 3 5, 6, 7, 8 9, 6, 3, 1

array [0..2, 0..3] of byte


ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

18

09-03-2012

101

C ONJUNTO DE I NSTRUES DO 8086

Classes de instrues:

Instrues de Movimentao de dados:

MOV, XCHG, LEA, LDS, LES, LSS, PUSH, POP, PUSHF, POPF

Instrues de Converses de dados:

CBW, CWD, XLAT

Instrues Aritmticas:

ADD, ADC, INC, SUB, SBB, DEC, CMP, NEG, MUL, IMUL, DIV, IDIV
ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

102

C ONJUNTO DE I NSTRUES DO 8086

Instrues de Deslocamentos:

SHL, SAL, SHR, SAR

Instrues de Rotaes:

RCL, RCR, ROL, ROR

Instrues Lgicas:

AND, OR, XOR, NOT

Instrues para manipulao de bits e de flags:

TEST, CLC, STC, CMC, CLD, STD, CLI, STI


ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

19

09-03-2012

103

C ONJUNTO DE I NSTRUES DO 8086

Instrues de I/O:

IN, OUT

Instrues de manipulao de Strings:

MOVS, LODS, STOS, SCAS, CMPS

Instrues de Repetio:

REP, REPZ, REPE, REPNZ, REPNE

Instrues de Controlo de Fluxo do programa:

JMP, CALL, RET e saltos condicionais


ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

104

FLAGS

FLAGS: registam o modo de operao actual da CPU e algumas informaes sobre o estado das instrues. O estado (0 ou 1) das FLAGS Carry, Parity, Zero, Sign e Overflow pode ser verificado atravs das instrues de salto condicional e das instrues setcc (Set on Condition).

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

20

09-03-2012

105

FLAGS

Algumas instrues aritmticas, lgicas e outras afectam a flag Overflow.

Ex: Aps uma operao aritmtica esta flag contm o valor 1 se o resultado no couber no operando destino (com sinal), caso contrrio conter o valor 0.

As instrues lgicas aplicam-se geralmente a nmeros sem sinal, pelo que colocam a flag Overflow a 0.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

106

FLAGS

As instrues de Strings usam a flag Direction.

Quando a 0, a CPU processa os elementos da string do endereo mais baixo para o mais alto. Quando a 1, a CPU processa os elementos da string do endereo mais alto para o mais baixo.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

21

09-03-2012

107

FLAGS

A flag Interrupt enable/disable controla a capacidade do processador responder ou no a eventos externos chamados interrupes. A flag Sign activada quando o resultado de um clculo negativo.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

108

FLAGS

A flag Trace activa ou desactiva o modo de trace do processador.

Alguns Debuggers usam este bit para activar ou desactivar a operao de trace/passo-a-passo. No existem instrues que alterem directamente o valor desta flag.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

22

09-03-2012

109

FLAGS

A flag Zero activada quando o resultado de algumas instrues zero.

Muito utilizada para testar a igualdade de dois valores.

A flag Auxiliary Carry serve de apoio a operaes em BCD. A flag Parity activada quando o resultado de uma operao contm um nmero par de 1s.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

110

FLAGS

A flag Carry tem diversos propsitos:

Sinalizar um overflow sem sinal (tal como a flag overflow detecta um overflow com sinal); De grande utilidade para vrias operaes booleanas, uma vez que facilmente se pode testar, activar, desactivar ou inverter.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

23

09-03-2012

111

I NSTRUES DE M OVIMENTAO - MOV


Copia o valor presente em ORIG para DEST. Formato geral:

MOV DEST, ORIG MOV REG, REG MOV MEM, REG MOV REG, MEM
E

Formatos especficos:

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

112

I NSTRUES DE M OVIMENTAO - MOV


MOV MEM, IMMEDIATE_DATA MOV REG, IMMEDIATE_DATA MOV AX/AL, MEM MOV MEM, AX/AL MOV SEGREG, MEM16 MOV SEGREG, REG16 MOV MEM16, SEGREG MOV REG16, SEGREG
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

24

09-03-2012

113

I NSTRUES DE M OVIMENTAO - MOV

NOTAS:

No existe a operao MOV MEM, MEM; No possvel mover dados directamente para registos de segmento.

Se nenhum dos operandos envolver dados imediatos, ambos os operandos tm de possuir o mesmo tamanho.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

114

I NSTRUES DE M OVIMENTAO - MOV

NOTAS:

Se o operando destino for um dado imediato, qual a quantidade de bytes armazenada nas seguintes situaes:

MOV var,0

Depende do tamanho de var!

MOV [BX],0?

Erro! Soluo: MOV byte ptr [BX], 0 ou MOV word ptr [BX], 0.

A instruo MOV no afecta as flags.


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

25

09-03-2012

115

I NSTRUES DE M OVIMENTAO - XCHG


Troca os valores entre OPERAND1 e OPERAND2. Formato geral:

XCHG OPERAND1, OPERAND2

Formatos especficos:

XCHG REG, MEM XCHG REG, REG XCHG AX, REG16

Ambos os operandos tm de ter o mesmo tamanho. A instruo XCHG no afecta as flags.


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

116

I NSTRUES DE M OVIMENTAO - LEA

Load Effective Address: carrega um registo com o endereo efectivo de uma localizao da memria. Formato geral:

LEA LEA

DEST, ORIG REG16, MEM

Formato especfico:

A instruo LEA no afecta as flags.


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

26

09-03-2012

117

I NSTRUES DE M OVIMENTAO - LEA

Ex1:

LEA

AX, DS: [8B67h]


AX

Ex2:

08B67h
AX, 3 [BX]

LEA

MOV AX, BX ADD AX, 3


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

118

I NSTRUES DE M OVIMENTAO LDS, LES, LSS


Permitem carregar o par SEGREG:REG16 com uma nica instruo. Formato geral (x {D, E, S}):

LxS

DEST, ORIG
ORIG uma varivel ponteiro do tipo far.

Formatos especficos:

LxS

REG16, MEM32

REG16:=[MEM32], xS:=[MEM32+2]
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

27

09-03-2012

119

I NSTRUES DE M OVIMENTAO LDS, LES E LSS

Estas instrues carregam a double word presente no endereo especificado por MEM32 para o par de registos constitudo por REG16 (L. O. word) e um dos registos de segmento DS, ES ou SS (H. O. word). Dada a importncia dos registos (DS, ES ou SS) envolvidos nestas instrues, h que haver precauo aquando da sua utilizao. As instrues LxS no afectam as flags.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

120

I NSTRUES DE M OVIMENTAO PUSH, POP, PUSHF E POPF


Manipulam dados da pilha. Formatos especficos:


PUSH POP PUSH POP PUSH POP PUSHF POPF


E

REG16 REG16 SEGREG SEGREG ;excepto CS MEM MEM

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

28

09-03-2012

121

I NSTRUES DE M OVIMENTAO PUSH, POP, PUSHF E POPF

Pilha:

Localizao: SS. Cresce no sentido dos endereos decrescentes. SS:SP contm o endereo do elemento do topo da pilha (o ltimo valor colocado na pilha). utilizada essencialmente para:

Guardar temporariamente registos e variveis. Passar parmetros para um procedimento. Armazenar variveis locais.
ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

122

I NSTRUES DE M OVIMENTAO PUSH, POP, PUSHF E POPF

PUSH

OPERANDO16

SP:=SP-2 [SS:SP]:=OPERANDO16 OPERANDO16 OPERANDO16:=[SS:SP] SP:=SP+2

POP

OPERANDO16 pode ser um registo ou memria. As instrues PUSH e POP no afectam as flags, com a excepo bvia de PUSHF e POPF.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

29

09-03-2012

123

I NSTRUES

DE

C ONVERSES - CBW

CWD

CBW (Convert Byte to Word)


Faz a extenso com sinal do valor de 8 bits em AL para AX. Formato:

CBW

CWD (Convert Word to Double Word)


Faz a extenso com sinal do valor de 16 bits em AX para DX:AX. Formato:

CWD

As instrues CBW e CWD no afectam as flags.


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

124

I NSTRUES DE CONVERSES - XLAT


Traduz o valor presente em AL, baseando-se numa tabela de endereo BX situada no segmento de dados. Formato:

XLAT

temp:= AL+BX AL:=DS:[temp]


BX aponta para uma tabela no segmento de dados actual. XLAT substitui o valor em AL pelo byte/elemento de ndice AL dentro da tabela apontada por DS:BX.

A instruo XLAT no afecta as flags.


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

30

09-03-2012

125

I NSTRUES A RITMTICAS - ADD E ADC

Adiciona o contedo do operando ORIG ao operando DEST.

DEST:= DEST + ORIG

Formato geral:

ADD

DEST, ORIG

Ambos os operandos tm de possuir o mesmo tamanho.

Formatos especficos:

ADD ADD ADD


E

REG, REG REG, MEM MEM, REG


DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

126

I NSTRUES A RITMTICAS - ADD E ADC


ADD REG, IMMEDIATE_DATA ADD MEM, IMMEDIATE_DATA ADD AX/AL, IMMEDIATE_DATA

Os formatos de ADC so idnticos aos de ADD. ADC adiciona o contedo do operando ORIG ao operando DEST adicionando ainda o valor presente na flag de Carry.

DEST:= DEST + ORIG + C


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

31

09-03-2012

127

I NSTRUES A RITMTICAS - ADD E ADC

Ambas as instrues afectam as flags de forma idntica, activando as seguintes flags:


Overflow, significando um overflow aritmtico com sinal. Carry, significando um overflow aritmtico sem sinal. Sign, significando um resultado negativo. Zero, signficando que o resultado da adio zero. Auxiliary Carry, significando que ocorreu um overflow em BCD no nibble menos significativo. Parity, significando que existe um n par de bits a 1 no resultado paridade par.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

128

I NSTRUES A RITMTICAS - INC


Incrementa o valor de OPERAND de uma unidade. Formato geral:

INC

OPERAND

Formatos especficos:

INC INC

MEM REG

excepo da flag de Carry que no afectada, INC activa as flags da mesma forma que a instruo equivalente

ADD
E

OPERAND,1
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

32

09-03-2012

129

I NSTRUES A RITMTICAS - SUB E SBB

Subtrai o contedo do operando ORIG ao operando DEST.

DEST:= DEST - ORIG

Formato geral:

SUB

DEST, ORIG

Ambos os operandos tm de possuir o mesmo tamanho.

Formatos especficos:

SUB SUB SUB


E

REG, REG REG, MEM MEM, REG


DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

130

I NSTRUES A RITMTICAS - SUB E SBB


SUB REG, IMMEDIATE_DATA SUB MEM, IMMEDIATE_DATA SUB AX/AL, IMMEDIATE_DATA

Os formatos de SBB so idnticos aos de SUB. SBB subtrai o contedo do operando ORIG ao operando DEST subtraindo ainda o valor presente na flag de Carry.

DEST:= DEST - ORIG - C


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

33

09-03-2012

131

I NSTRUES A RITMTICAS - SUB E SBB

Ambas as instrues afectam as flags de forma idntica, activando as seguintes flags:


Overflow, significando um overflow ou underflow aritmtico com sinal. Carry, significando um overflow aritmtico sem sinal. Sign, significando um resultado negativo. Zero, significando que o resultado zero. Auxiliary Carry, significando que ocorreu um overflow em BCD no nibble menos significativo. Parity, significando que existe um n par de bits a 1 no resultado paridade par.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

132

I NSTRUES A RITMTICAS - DEC


Decrementa o valor de OPERAND de uma unidade. Formato geral:

DEC DEC DEC

OPERAND MEM REG

Formatos especficos:

excepo da flag de Carry que no afectada, DEC activa as flags da mesma forma que a instruo equivalente: SUB OPERAND,1
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

34

09-03-2012

133

I NSTRUES A RITMTICAS - CMP

Formato geral:

CMP

OPERAND1, OPERAND2

Ambos os operandos tm de possuir o mesmo tamanho.

Idntica instruo SUB mas com uma diferena crucial no armazena o resultado da subtraco em DEST. Formatos especficos:

CMP CMP CMP


E

REG, REG REG, MEM MEM, REG


DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

134

I NSTRUES A RITMTICAS - CMP


CMP REG, IMMEDIATE_DATA CMP MEM, IMMEDIATE_DATA CMP AX/AL, IMMEDIATE_DATA

Aps o clculo da subtraco entre os operandos, as flags so afectadas em funo desse resultado, activando as seguintes flags:

Zero, significando que ambos os operandos so iguais. Sign, significando um resultado negativo.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

35

09-03-2012

135

I NSTRUES A RITMTICAS - CMP

Overflow, significando que a diferena entre os operandos produziu um overflow ou underflow aritmtico com sinal. Carry, significando que a subtraco entre os operandos teve necessidade de um emprstimo. Apesar de CMP tambm afectar as flags de parity e auxiliary carry, estas flags raramente so testadas aps uma instruo de comparao.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

136

I NSTRUES A RITMTICAS - NEG


Obtm o complemento de 2 do valor presente em OPERAND Formato geral:

NEG

OPERAND

OPERAND := 0 OPERAND

Formatos especficos:

NEG NEG
E

MEM REG
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

36

09-03-2012

137

I NSTRUES A RITMTICAS - NEG

Se OPERAND for 0, o seu sinal no alterado, apesar da flag de carry ser posta a 0.

Negar qualquer outro valor coloca a flag de carry a 1.

As flags de Overflow, Auxiliary Carry, Sign, Parity e Zero so afectadas da mesma forma que se utilizasse a instruo SUB.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

138

I NSTRUES A RITMTICAS - (I)MUL

Multiplica operandos de 8 ou de 16 bits.


Se OPERAND for de 8 bits AX:= AL*OPERAND Se OPERAND for de 16 bits DX:AX:=AX*OPERAND


DX contm a word mais significativa do resultado; AX contm a word menos significativa do resultado.
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

37

09-03-2012

139

I NSTRUES A RITMTICAS - (I)MUL

Formato geral:

(I)MUL

OPERAND

Existem 2 formatos consoante OPERAND seja um valor com sinal (IMUL) ou sem sinal (MUL). Assume-se que o acumulador (AL ou AX) o operando destino.

Formatos especficos:

(I)MUL (I)MUL
E

REG MEM
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

140

I NSTRUES A RITMTICAS - (I)MUL

As flags auxiliary carry, parity, sign e zero ficam com valores indefinidos aps as instrues MUL e IMUL. As flags carry e overflow so activadas se a metade superior do resultado contiver dgitos significativos do resultado, caso contrrio so postas a 0.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

38

09-03-2012

141

I NSTRUES A RITMTICAS - (I)DIV

Divide operandos de 8 ou de 16 bits.

Se OPERAND for de 8 bits divide AX por OPERAND, ficando o quociente em AL e o resto em AH. Se OPERAND for de 16 bits divide DX:AX por OPERAND, ficando o quociente em AX e o resto em DX.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

142

I NSTRUES A RITMTICAS - (I)DIV

Formato geral:

(I)DIV

OPERAND

Existem 2 formatos consoante OPERAND seja um valor com sinal (IDIV) ou sem sinal (DIV).

Formatos especficos:

(I)DIV (I)DIV
E

REG MEM
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

39

09-03-2012

143

I NSTRUES A RITMTICAS - (I)DIV

As flags de overflow, carry, auxiliary carry, parity, sign e zero ficam com valores indefinidos aps a operao de diviso. Notar que no existe qualquer forma de fazer uma diviso por um valor imediato.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

144

I NSTRUES L GICAS AND E OR

Formato geral:

AND Lgico DEST 0 0 1 1 ORIG 0 1 0 1 Result 0 0 0 1

AND DEST, ORIG

DEST:= DEST AND ORIG

OR Lgico

OR

DEST, ORIG

DEST 0 0 1 1

ORIG 0 1 0 1

Result 0 1 1 1

DEST:= DEST OR ORIG


DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

40

09-03-2012

145

I NSTRUES L GICAS - XOR E NOT

XOR DEST, ORIG

XOR Lgico DEST 0 0 1 1 ORIG 0 1 0 1 Result 0 1 1 0

DEST:= DEST XOR ORIG

NOT DEST

NOT Lgico DEST 0 1 Result 1 0

DEST:= NOT DEST


DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

146

I NSTRUES L GICAS
Formatos especficos:

AND AND AND AND AND AND NOT NOT


E

REG, REG REG, MEM MEM, REG REG, IMMEDIATE_DATA MEM, IMMEDIATE_DATA AX/AL, IMMEDIATE_DATA REG MEM
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

41

09-03-2012

147

I NSTRUES L GICAS

As instrues OR e XOR usam o mesmo formato da instruo AND. excepo da instruo NOT que no afecta as flags as instrues AND, OR e XOR afectam as flags da seguinte forma:

Colocam a flag carry a 0. Colocam a flag overflow a 0. Activam a flag zero, se o resultado for zero e desactivam-na em situao contrria.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

148

I NSTRUES L GICAS

Copiam o bit mais significativo do resultado para a flag sign. Activam a flag parity de acordo com a paridade (nmero de bits a 1) do resultado. A flag auxiliary carry fica com um valor indefinido.

Ambos os operandos das instrues AND, OR e XOR tm de possuir o mesmo tamanho.


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

42

09-03-2012

149

I NSTRUES DE D ESLOCAMENTO -SHL/SAL

Movem cada bit no operando DEST uma posio esquerda, o nmero de vezes especificado pelo operador COUNT.

As posies menos significativas so preenchidas com zeros. O bit mais significativo vai para a flag carry.

Formato geral:

SHL/SAL
E

DEST, COUNT
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

150

I NSTRUES

DE

D ESLOCAMENTO -SHL/SAL

As instrues SHL/SAL apresentam o seguinte comportamento:


Se COUNT for 0, as flags no so afectadas. A flag carry contm o ltimo bit deslocado da posio mais significativa do operando. A flag overflow contm 1 se os 2 bits mais significativos forem diferentes antes da realizao do deslocamento. Fica com um valor indefinido se COUNT no for 1. A flag zero ficar com 1 se o deslocamento produzir um resultado zero.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

43

09-03-2012

151

I NSTRUES DE D ESLOCAMENTO -SHL/SAL

A flag sign conter o bit mais significativo do resultado. A flag parity conter 1 se houver um nmero par de bits a 1 no byte menos significativo do resultado. A flag auxiliary carry fica com um valor indefinido.

Nota:

Deslocar um valor inteiro (com ou sem sinal) esquerda n vezes equivale a multiplicar esse nmero por 2n.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

152

I NSTRUES DE D ESLOCAMENTO - SAR

Desloca todos os bits no operando DEST uma posio direita, o nmero de vezes especificado pelo operador COUNT.

As posies mais significativas so rplicas do bit mais significativo, que se mantm. O bit menos significativo vai para a flag carry.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

44

09-03-2012

153

I NSTRUES DE D ESLOCAMENTO - SAR

Formato geral:

SAR DEST, COUNT

Esta instruo apresenta o seguinte comportamento:


Se COUNT for 0, as flags no so afectadas. A flag carry contm o ltimo bit deslocado, da posio menos significativa do operando.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

154

I NSTRUES DE D ESLOCAMENTO - SAR

A flag sign conter o bit mais significativo do resultado. A flag overflow contm 0 se COUNT for 1. Caso contrrio fica com um valor indefinido ; A flag zero ficar com 1 se o deslocamento produzir um resultado zero. A flag parity conter 1 se houver um nmero par de bits a 1 no byte menos significativo do resultado. A flag auxiliary carry fica com um valor indefinido.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

45

09-03-2012

155

I NSTRUES DE D ESLOCAMENTO - SAR

Notas: Deslocar um valor inteiro direita n vezes equivale a dividir esse nmero por 2n. Esta instruo equivalente a IDIV com excepo das truncagens que faz!

EX: MOV AX, -15 CWD MOV BX, 2 IDIV BX ;Produz 7 ;IDIV faz a truncagem em direco a 0 EX: MOV AX, -15 SAR AX, 1 ; Produz 8 ;SAR faz a truncagem em direco ao menor resultado
ARQUITECTURAS
DE

TECNOLOGIAS

COMPUTADORES

156

I NSTRUES DE D ESLOCAMENTO - SHR

Desloca todos os bits no operando DEST uma posio direita, o nmero de vezes especificado pelo operador COUNT.

O bit mais significativo colocado a zero. O bit menos significativo vai para a flag carry.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

46

09-03-2012

157

I NSTRUES DE D ESLOCAMENTO - SHR

Formato geral: SHR DEST, COUNT A instruo SHR apresenta o seguinte comportamento: Se COUNT for 0, no afecta quaisquer flags. A flag carry contm o ltimo bit deslocado, da posio menos significativa do operando. Se COUNT for 1 a flag overflow contm o valor do bit mais significativo do operando, antes do deslocamento. Caso contrrio fica com um valor indefinido.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

158

I NSTRUES DE D ESLOCAMENTO - SHR


A flag zero ficar com 1 se o deslocamento produzir um resultado zero. A flag sign conter o bit mais significativo do resultado, que sempre zero. A flag parity conter 1 se houver um nmero par de bits a 1 no byte menos significativo do resultado. A flag auxiliary carry fica com um valor indefinido.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

47

09-03-2012

159

I NSTRUES DE D ESLOCAMENTO - SHR

Notas:

Deslocar um valor inteiro direita n vezes equivale a dividir esse nmero por 2n. Porm esta instruo apenas funciona correctamente como diviso se ambos os operandos forem sem sinal.

EX: MOV SHR

AX, -2 AX,1

AX=32767 (7FFFh) e no 1 como esperado.


TECNOLOGIAS
E

ARQUITECTURAS

DE

COMPUTADORES

160

I NSTRUES DE R OTAO - RCL

Roda os bits no operando DEST uma posio esquerda, o nmero de vezes especificado pelo operador COUNT, passando pela flag Carry.

Formato geral:

RCL DEST, COUNT


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

48

09-03-2012

161

I NSTRUES DE R OTAO - RCL

A instruo RCL apresenta o seguinte comportamento:


A flag carry contm o ltimo bit deslocado do bit mais significativo do operando. Se COUNT 1, RCL activa a flag overflow se o sinal mudar em resultado de uma rotao, caso contrrio fica com um valor indefinido. No modifica as flags zero, sign, parity e auxiliary carry.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

162

I NSTRUES DE R OTAO - RCR

Roda os bits no operando DEST uma posio direita, o nmero de vezes especificado pelo operador COUNT, passando pela flag carry.

Formato geral:

RCR DEST, COUNT


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

49

09-03-2012

163

I NSTRUES DE R OTAO - RCR

A instruo RCR apresenta o seguinte comportamento:


A flag carry contm o ltimo bit deslocado do bit menos significativo do operando. Se COUNT 1, RCR activa a flag overflow se o sinal mudar em resultado de uma rotao, caso contrrio fica com um valor indefinido. No modifica as flags zero, sign, parity e auxiliary carry.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

164

I NSTRUES DE R OTAO - ROL

semelhante instruo RCL, rodando o seu operando esquerda um determinado nmero de bits. A principal diferena que ROL desloca o seu bit mais significativo do operando e no a flag carry para o bit menos significativo. No entanto, ROL tambm reproduz o bit mais significativo para a flag de carry.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

50

09-03-2012

165

I NSTRUES DE R OTAO - ROR

semelhante instruo RCR, rodando o seu operando direita um determinado nmero de bits. A principal diferena que ROR desloca o seu bit menos significativo do operando e no a flag carry para o bit mais significativo. No entanto ROL tambm reproduz o bit menos significativo para a flag de carry.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

166

I NSTRUES

DE

D ESLOCAMENTO

R OTAO

Todas as instrues de deslocamento e rotao referidas podem apresentar os seguintes formatos especficos:

instruo instruo instruo instruo


E

reg, 1 mem, 1 reg, cl mem, cl


DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

51

09-03-2012

167

I NSTRUES PARA TESTE DE BITS - TEST

Realiza o AND lgico, bit a bit, entre os seus operandos activando as flags correspondentes mas no guarda o resultado da operao. Normalmente utilizada para testar se um determinado bit tem o valor 1.

Ex: TEST

AL,16

Testa o estado do 5 bit.


DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

168

I NSTRUES PARA TESTE DE BITS - TEST

Formato geral:

TEST

OPERAND1, OPERAND2

Formatos especficos:

TEST TEST TEST TEST TEST TEST


E

REG, REG MEM, REG REG, MEM* MEM, IMMEDIATE_DATA REG, IMMEDIATE_DATA AX/AL, IMMEDIATE_DATA
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

52

09-03-2012

169

I NSTRUES PARA TESTE DE BITS - TEST

Activa as seguintes flags de forma idntica instruo AND:


Pe a flag carry a 0. Pe a flag overflow a 0. Activa a flag zero, se o resultado for zero e desactiva-a em situao contrria. Copia o bit mais significativo do resultado para a flag sign. Activa a flag parity de acordo com a paridade (nmero de bits a 1) do resultado. A flag auxiliary carry fica com um valor indefinido.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

170

I NSTRUES DE MANIPULAO DE FLAGS


CLC: Coloca a 0 a Flag de Carry STC: Coloca a 1 a Flag de Carry CMC: Complementa a Flag de Carry CLD: Coloca a 0 a Flag Direction STD: Coloca a 1 a Flag Direction CLI: Coloca a 0 a Flag Interrupt Enable/Disable STI: Coloca a 1 a Flag Interrupt Enable/Disable
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

53

09-03-2012

171

I NSTRUES DE

MANIPULAO DE

S TRINGS

As instrues MOVS, LODS, STOS, SCAS e CMPS podem operar sobre Strings de bytes ou de words. Para especificar o tamanho do objecto acrescentase mnemnica da instruo a letra b ou w:

movsb, movsw, lodsb, lodsw, cmpsb, etc.

MOVS, STOS, SCAS, CMPS podem ser usadas para manipular um elemento (byte ou word) numa String, ou para processar uma String completa.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

172

I NSTRUES DE MANIPULAO DE S TRINGS MOVS

Reproduz uma String entre localizaes de memria movs{b, w}:


es:[di] := ds:[si] if direction_flag = 0 then si := si + size ; size= 1 (byte), 2 (word) di:= di + size else si := si - size di:= di - size endif

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

54

09-03-2012

173

I NSTRUES DE MANIPULAO DE S TRINGS CMPS

Compara duas Strings. cmps{b, w}:


cmp ds:[si], es:[di] if direction_flag = 0 then si := si + size di:= di + size else si := si - size di:= di - size endif ; size= 1 (byte), 2 (word)

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

174

I NSTRUES DE MANIPULAO DE S TRINGS LODS

Carrega um elemento da String, apontada por SI, para o acumulador.

lods{b, w}:
ax/al := ds:[si] if direction_flag = 0 then si := si + size else si := si - size endif ; size= 1 (byte), 2 (word)

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

55

09-03-2012

175

I NSTRUES DE MANIPULAO DE S TRINGS STOS

Armazena o valor presente no acumulador numa posio da String, determinada por DI. stos{b, w}:
es:[di] := ax/al if direction_flag = 0 then di := di + size else di := di - size endif ; size= 1 (byte), 2 (word)

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

176

I NSTRUES DE MANIPULAO DE S TRINGS SCAS

Verifica se o valor presente no acumulador se encontra numa determinada posio da String, determinada por DI. scas{b, w}:
cmp ax/al, es:[di] if direction_flag = 0 then di := di + size else di := di - size endif ; size= 1 (byte), 2 (word)

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

56

09-03-2012

177

I NSTRUES

DE MANIPULAO DE

S TRINGS

As instrues MOVS, LODS, STOS e suas derivadas no alteram as flags.

As instrues CMPS, SCAS e suas derivadas alteram as flags overflow, sign, zero, auxiliary carry, parity e carry da mesma forma que a instruo CMP.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

178

I NSTRUES DE REPETIO

As instrues de manipulao de strings, s por si, no operam sobre strings, mas em apenas um byte ou word de cada vez. Se se utilizar um prefixo de repetio associado a essas instrues possvel realizar uma operao sobre uma string envolvendo mltiplos bytes ou words. Quando se especifica o prefixo de repetio antes de uma instruo de manipulao de strings, essa instruo repetida CX vezes.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

57

09-03-2012

179

I NSTRUES DE REPETIO

Tipos:

REP (repete uma operao CX vezes) REPZ (repete enquanto 0) REPE (repete enquanto igual) REPNZ (repete enquanto no zero) REPNE (repete enquanto diferente)
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

180

I NSTRUES DE REPETIO

Para MOVS:

REP

MOVS{b,w}

Para CMPS:

REPE REPZ REPNE REPNZ


E

CMPS{b,w} CMPS{b,w} CMPS{b,w} CMPS{b,w}


DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

58

09-03-2012

181

I NSTRUES DE REPETIO

Para SCAS:

REPE SCAS{b,w} REPZ SCAS{b,w} REPNE SCAS{b,w} REPNZ SCAS{b,w} REP STOS{b,w}

Para STOS:

Normalmente no se utilizam prefixos de repetio com a instruo LODS.


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

182

I NSTRUES DE C ONTROLO

Existem 3 tipos de instrues que permitem o controlo do fluxo de um programa:


saltos incondicionais saltos condicionais chamada e retorno de procedimentos

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

59

09-03-2012

183

I NSTRUES DE C ONTROLO

O registo CS (Code Segment) contm os 16 bits mais significativos do endereo fsico onde comea o segmento de cdigo.

Esse segmento contm os cdigos binrios das instrues que constituem o programa que est a ser executado.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

184

I NSTRUES DE C ONTROLO

O registo IP (Instruction Pointer) referencia, dentro do segmento de cdigo, a prxima instruo a ser executada, ou seja, o deslocamento em relao ao CS que tem a prxima instruo.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

60

09-03-2012

185

I NSTRUES DE C ONTROLO

Se o programa consistir numa sequncia de instrues simples (que no alterem o fluxo do programa) o endereo da prxima instruo a executar sempre o imediatamente a seguir ao da instruo actual. Porm, existem instrues que alteram a sequncia normal de um programa (instrues que permitem efectuar saltos, ex: jmp).

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

186

I NSTRUES DE C ONTROLO

Existem essencialmente dois tipos de saltos:

Saltos incondicionais

Ocorrem sempre, sem estarem sujeitos a qualquer condio.

Saltos condicionais

Ocorrem apenas se uma determinada condio se verificar.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

61

09-03-2012

187

I NSTRUES DE C ONTROLO

O 8086 calcula o endereo fsico da prxima instruo a executar adicionando o deslocamento contido no registo IP ao endereo de base representado pelo nmero contido no registo CS. Quando o 8086 executa uma instruo de salto, carrrega um novo nmero (deslocamento) no registo IP e por vezes tambm um novo nmero no registo CS.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

188

I NSTRUO

DE

S ALTO I NCONDICIONAL JMP

Os saltos incondicionais transferem o controlo do fluxo para outro ponto do programa, sem estarem dependentes de qualquer condio. Existem saltos:

Near ou Intrasegmento Far ou Intersegmento Directos Indirectos


E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

62

09-03-2012

189

I NSTRUO

DE

S ALTO I NCONDICIONAL JMP

Saltos Near ou Intrasegmento

Transferem o controlo para uma instruo localizada no segmento de cdigo actual. Transferem o controlo para uma instruo localizada num segmento de cdigo diferente do actual. Neste caso, necessrio alterar no s o valor do registo IP, mas tambm o valor do registo CS.
E

Saltos Far ou Intersegmento

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

190

I NSTRUO

DE

S ALTO I NCONDICIONAL JMP

Saltos Directos

So directos se o destino for um nmero, o qual referencia um deslocamento em relao localizao actual. Nesse caso o novo valor do IP ficar a ser IP+<destino>. So indirectos se o destino for um registo ou localizao de memria. Nesse caso, o 8086 ter de ir buscar o contedo do registo ou localizao de memria, contedo esse que passar a ser o novo valor do registo IP.
E

Saltos Indirectos

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

63

09-03-2012

191

I NSTRUO

DE

S ALTO I NCONDICIONAL JMP

Formato geral:
JMP <destino>

Formato especfico:

JMP JMP JMP JMP JMP JMP


E

DISP8; Intrasegmento directo de 8 bits DISP16; Intrasegmento directo de 16 bits ADRS32; Intersegmento directo de 32 bits MEM16; Intrasegmento indirecto de 16 bits REG16; Intrasegmento indirecto por registo MEM32; Intersegmento indirecto de 32 bits
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

192

I NSTRUO

DE

S ALTO I NCONDICIONAL JMP

Intrasegmento Directo: IP:=IP+disp Intersegmento Directo: CS:IP := addr32 Intrasegmento Indirecto: IP:= mem16 Intrasegmento Indirecto por Registo: IP:=Reg Intersegmento Indirecto: CS:IP := mem32
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

64

09-03-2012

193

I NSTRUES DE S ALTO C ONDICIONAL

Os saltos condicionais ocorrem apenas se uma determinada condio se verificar. A instrues que especificam saltos condicionais analisam o contedo de determinadas flags ou registos para decidir se o salto se realiza.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

194

I NSTRUES DE S ALTO C ONDICIONAL

Estas instrues aparecem normalmente depois de instrues de operaes aritmticas e lgicas (que alteram os valores das flags) e quase sempre aps as instrues CMP ou TEST. Em todos os saltos condicionais o destino tem de especificar um endereo dentro do mesmo segmento da instruo de salto.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

65

09-03-2012

195

I NSTRUES DE S ALTO C ONDICIONAL

Instrues que testam as flags

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

196

I NSTRUES DE S ALTO C ONDICIONAL

Instrues para comparaes sem sinal

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

66

09-03-2012

197

I NSTRUES DE S ALTO C ONDICIONAL

Instrues para comparaes com sinal.

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

198

C HAMADAS

R ETORNO

DE

P ROCEDIMENTOS

A chamada a procedimentos realizada atravs da instruo CALL.

esta instruo que indica ao processador qual o endereo da primeira instruo do procedimento.

O retorno de procedimentos realizado atravs da instruo RET surge normalmente no final do procedimento. Consultar ficha explicativa de Procedimentos em Assembly.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

67

09-03-2012

E STRUTURAS

DE

C ONTROLO

200

E XPRESSES C ONDICIONAIS -I F T HEN

if <condicao> then accao accao ... accao endif

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

68

09-03-2012

201

E XPRESSES C ONDICIONAIS -I F T HEN


Ex:
if temp=37 then febre=1

Em Assembly:
CMP JNE MOV FIMSE: temp, 37 FIMSE febre, 1

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

202

E XPRESSES C ONDICIONAIS -I F T HEN E LSE

if <condicao> then

accao accao ... accao else accao accao ... accao endif
TECNOLOGIAS
E

ARQUITECTURAS

DE

COMPUTADORES

69

09-03-2012

203

E XPRESSES C ONDICIONAIS -I F T HEN E LSE


Em Assembly:
MOV CMP AX, b JBE MOV jmp ElseBlk: EndOfIf: MOV MOV ElseBlk AX, a EndOfIf AX, b max, AX AX, a

Ex:
if a>b then max:=a else max:=b

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

204

E XPRESSES C ONDICIONAIS -I F T HEN E LSE


Ex:
if a=1 then igual := igual + 1 else if a<1 then menor := menor + 1 else maior := maior + 1

Em Assembly:
cmp jne inc jmp dif: cmp jae inc jmp maior:inc fim: a,1 dif igual fim a,1 maior menor fim maior

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

70

09-03-2012

205

C ICLOS W HILE

DO

while <condicao> do accao accao ... endwhile

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

206

C ICLOS W HILE

DO

Ex:
i:=0 while i<100 do i:=i+1

Em Assembly:
WhileIni: MOV CMP JGE INC JMP i, 0 i, 100 WhileDone i WhileIni

WhileDone:
TECNOLOGIAS
E

ARQUITECTURAS

DE

COMPUTADORES

71

09-03-2012

207

C ICLOS D O W HILE

do accao accao ... while <condicao> endDoWhile

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

208

C ICLOS D O W HILE

Ex:
i := 1000; do{ i := i-1; }while i>0;

Em Assembly:
mov cx,1000 ciclo: loop ciclo

Notar que o ciclo executado pelo menos uma vez mesmo se cx=0. Isto porque s efectua o teste no final e no no inicio!!
TECNOLOGIAS
E

ARQUITECTURAS

DE

COMPUTADORES

72

09-03-2012

209

C ICLOS F OR TO D O

for count = m to n do accao accao ... endfor

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

210

C ICLOS F OR TO D O

EX:
FOR i:= 1 TO 10 DO k:=k+i-j

Em Assembly:
MOV InitFor: CMP J MOV ADD SUB MOV INC JMP FIM: i, 1 i, 10 FIM AX, k AX, i AX, j k, AX i InitFor
DE

TECNOLOGIAS

ARQUITECTURAS

COMPUTADORES

73

09-03-2012

211

I NSTRUO L OOP

Formato: LOOP <label>

Decrementa o registo CX saltando para a localizao destino caso CX seja diferente de zero. til para o caso em que se pretende repetir uma sequncia de instrues um determinado nmero de vezes.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

212

I NSTRUO L OOP

De cada vez que a instruo LOOP executada o contedo do registo CX decrementado um valor. Se depois de decrementado o contedo do registo CX o seu valor for diferente de zero, a instruo LOOP implementa um jump para o endereo referenciado por <label>. O <label> referencia um deslocamento em relao ao registo CS onde est a primeira instruo do ciclo. As instrues Loop no afectam as flags.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

74

09-03-2012

213

I NSTRUO L OOPE /L OOPZ

Repete uma sequncia de instrues enquanto um determinado valor for igual a outro, CX for diferente de zero e a flag zero estiver a 1.

De cada vez que esta instruo executada o contedo do registo CX decrementado de uma unidade. Se depois de decrementado o contedo do registo CX, o seu valor for diferente de zero e a flag zero estiver activada a instruo implementa um jump para o endereo referenciado por <label>.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

214

I NSTRUO L OOPNE /L OOPNZ

Repete uma sequncia de instrues enquanto um determinado valor for diferente de outro, CX for diferente de zero e a flag zero estiver a 0.

De cada vez que esta instruo executada o contedo do registo CX decrementado um valor. Se depois de decrementado o contedo do registo CX, o seu valor for diferente de zero e a flag zero estiver desactivada a instruo implementa um jump para o endereo referenciado por <label>.
E

TECNOLOGIAS

ARQUITECTURAS

DE

COMPUTADORES

75

Você também pode gostar