Escolar Documentos
Profissional Documentos
Cultura Documentos
65
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
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 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
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
A iniciao do registo DS efectuada conforme mostrado no programa exemplo.asm, atravs das instrues
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
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
Simples ou escalares
Compostos
Arrays Estruturas
E
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
09-03-2012
79
Existem 3 formatos:
TECNOLOGIAS
COMPUTADORES
80
Ex:
db byte sbyte
? ? ?
O ? indica que a varivel no iniciada. Para que uma varivel seja iniciada dever-se- usar o formato exemplificado a seguir:
db byte sbyte
0 -5 Ateno! -1
TECNOLOGIAS
COMPUTADORES
09-03-2012
81
Existem 3 formatos:
TECNOLOGIAS
COMPUTADORES
82
Ex:
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
dw word sword
65535 0 -1
COMPUTADORES
09-03-2012
83
Existem 3 formatos:
Identificador dd
TECNOLOGIAS
COMPUTADORES
84
Ex:
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
dd dword sdword
4000000000 255 -1
COMPUTADORES
10
09-03-2012
85
D ECLARAO DE VARIVEIS
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
86
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
Ex.:
X Y Z
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
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
Ex.:
TECNOLOGIAS
E
ARQUITECTURAS
90
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
AL,[1000H] AH,[1001H]
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
92
P ONTEIROS FAR
LES MOV
BX, P ES:[BX], AL
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
14
09-03-2012
93
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.
typename typename
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
Exs.:
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.:
128 64 10 8
;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
arrayname
basetype
Exs.:
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:
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
4 16 3 3
;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
TECNOLOGIAS
COMPUTADORES
18
09-03-2012
101
Classes de instrues:
MOV, XCHG, LEA, LDS, LES, LSS, PUSH, POP, PUSHF, POPF
Instrues Aritmticas:
ADD, ADC, INC, SUB, SBB, DEC, CMP, NEG, MUL, IMUL, DIV, IDIV
ARQUITECTURAS
DE
TECNOLOGIAS
COMPUTADORES
102
Instrues de Deslocamentos:
Instrues de Rotaes:
Instrues Lgicas:
TECNOLOGIAS
COMPUTADORES
19
09-03-2012
103
Instrues de I/O:
IN, OUT
Instrues de Repetio:
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
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
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
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 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
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
MOV DEST, ORIG MOV REG, REG MOV MEM, REG MOV REG, MEM
E
Formatos especficos:
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
112
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
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
NOTAS:
Se o operando destino for um dado imediato, qual a quantidade de bytes armazenada nas seguintes situaes:
MOV var,0
MOV [BX],0?
Erro! Soluo: MOV byte ptr [BX], 0 ou MOV word ptr [BX], 0.
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
25
09-03-2012
115
Formatos especficos:
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
116
Load Effective Address: carrega um registo com o endereo efectivo de uma localizao da memria. Formato geral:
LEA LEA
Formato especfico:
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
26
09-03-2012
117
Ex1:
LEA
Ex2:
08B67h
AX, 3 [BX]
LEA
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
118
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
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
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
28
09-03-2012
121
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
PUSH
OPERANDO16
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
CWD
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
124
Traduz o valor presente em AL, baseando-se numa tabela de endereo BX situada no segmento de dados. Formato:
XLAT
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.
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
30
09-03-2012
125
Formato geral:
ADD
DEST, ORIG
Formatos especficos:
TECNOLOGIAS
ARQUITECTURAS
COMPUTADORES
126
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.
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
31
09-03-2012
127
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
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
Formato geral:
SUB
DEST, ORIG
Formatos especficos:
TECNOLOGIAS
ARQUITECTURAS
COMPUTADORES
130
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.
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
33
09-03-2012
131
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
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
Formato geral:
CMP
OPERAND1, OPERAND2
Idntica instruo SUB mas com uma diferena crucial no armazena o resultado da subtraco em DEST. Formatos especficos:
TECNOLOGIAS
ARQUITECTURAS
COMPUTADORES
134
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
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
NEG
OPERAND
OPERAND := 0 OPERAND
Formatos especficos:
NEG NEG
E
MEM REG
DE
TECNOLOGIAS
ARQUITECTURAS
COMPUTADORES
36
09-03-2012
137
Se OPERAND for 0, o seu sinal no alterado, apesar da flag de carry ser posta a 0.
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
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
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
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
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
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
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
Formato geral:
OR Lgico
OR
DEST, ORIG
DEST 0 0 1 1
ORIG 0 1 0 1
Result 0 1 1 1
TECNOLOGIAS
ARQUITECTURAS
COMPUTADORES
40
09-03-2012
145
NOT DEST
TECNOLOGIAS
ARQUITECTURAS
COMPUTADORES
146
I NSTRUES L GICAS
Formatos especficos:
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.
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
42
09-03-2012
149
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
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
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
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
Formato geral:
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
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
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
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
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
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
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.
AX, -2 AX,1
ARQUITECTURAS
DE
COMPUTADORES
160
Roda os bits no operando DEST uma posio esquerda, o nmero de vezes especificado pelo operador COUNT, passando pela flag Carry.
Formato geral:
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
48
09-03-2012
161
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
Roda os bits no operando DEST uma posio direita, o nmero de vezes especificado pelo operador COUNT, passando pela flag carry.
Formato geral:
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
49
09-03-2012
163
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
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
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:
TECNOLOGIAS
ARQUITECTURAS
COMPUTADORES
51
09-03-2012
167
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
TECNOLOGIAS
ARQUITECTURAS
COMPUTADORES
168
Formato geral:
TEST
OPERAND1, OPERAND2
Formatos especficos:
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
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
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:
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
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
54
09-03-2012
173
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
174
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
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
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 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:
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:
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
182
I NSTRUES DE C ONTROLO
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
Saltos incondicionais
Saltos condicionais
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
Os saltos incondicionais transferem o controlo do fluxo para outro ponto do programa, sem estarem dependentes de qualquer condio. Existem saltos:
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
62
09-03-2012
189
I NSTRUO
DE
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
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
190
I NSTRUO
DE
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
Formato geral:
JMP <destino>
Formato especfico:
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
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
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
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
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
196
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
66
09-03-2012
197
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
198
C HAMADAS
R ETORNO
DE
P ROCEDIMENTOS
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
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
68
09-03-2012
201
Em Assembly:
CMP JNE MOV FIMSE: temp, 37 FIMSE febre, 1
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
202
if <condicao> then
accao accao ... accao else accao accao ... accao endif
TECNOLOGIAS
E
ARQUITECTURAS
DE
COMPUTADORES
69
09-03-2012
203
Ex:
if a>b then max:=a else max:=b
TECNOLOGIAS
ARQUITECTURAS
DE
COMPUTADORES
204
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
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
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
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
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
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
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