Escolar Documentos
Profissional Documentos
Cultura Documentos
Arquitectura de computadores
Outubro de 2000
Problemas de Arquitectura de Computadores
Escola Superior de Tecnologia e Gestão
1º Semestre, 2000, Engenharia Informática
(
a) f (a, b, c ) = a b + c b + c )( )
(
b) f (a, b, c, d ) = a b + c b + d ( ))
c) f (a, b, c ) = ac + bc
( )(
a) a + b + ab a + b ab = 0 )
( ) (
b) ab d + dc + a + dac b = b )
( )
c) b + c a + cd = cd b + c a + cd ( )
( )
d) (a + b ) a + c (b + c ) = (a + b ) a + c ( )
e) ac + ab + bc = ac + bc
f) a ⊕ b ⊕ (ab ) = a + b
g) a = a ⊕1
4. Mostre que:
a) Se a ⊕ b = 0 então a = b
b) Se a ⊕ b = a ⊕ c então b = c
1
8. Desenhe o logigrama das seguintes funções:
( )
a) f (a, b, c, d ) = a c ⊕ d + ab + a cd + ac d
b) f (a, b, c, d ) = a b cd + abc + abc + a cd + cd + abc + ac d
( )
c) f (a, b, c, d ) = a c b ⊕ d + ab d + abd + abcd + ac d
d) f (a, b, c, d ) = abc + a c(c + d ) + a + b + d
( )(
e) f (a, b, c, d ) = a + b c + d a + c b + d )( )( )
9. Dados os seguintes logigramas, estabeleça a expressão analítica da variável
de saída em função das entradas.
a a
f b
b
c c
f
d
e
a) b)
a a
b b
c
d c
f
f
d
e
c) d)
a) ( ( )) (
f (a, b, c, d ) = a b + (c ⊕ d ) a + b + abc + b c ⊕ d )
b) f (a, b, c, d ) = (a + b )(c + d )(a + b )(a + d )
c) f (a, b, c, d ) = (a + b + c )(c + d )(a ⊕ d )
d) f = ∑ (0,2,3, 4,5,6,7,8,10,12,13)
e) f = ∑ (0,2,6,8,9,10,12 ) , com indiferenças nas posições (1,3,4,11,13,14 )
f) f = ∑ (1,3,5,6,9,12,17,19,22,27,28,30 ) , com indiferenças nas posições
(4,11,14,20,21,25)
2
11. Implemente um circuito lógico mais simples, se possível, e apenas com
portas "nand", com a mesma função de saída que o circuito seguinte:
'1'
a
b f
c
a
b
c f
16. Usando um latch RS, construa um latch com entradas X e Y com a seguinte
tabela de transições:
X Y Q tn+1
0 0 Q tn
0 1 1
1 0 0
1 1 Q tn
3
17. Desenhe as formas de onda nos pontos Q1, Q2 e Z, para cinco períodos do
relógio, CLK
Z
Q1 Q2
'1' J Q D Q
CLK
CLK
CLK
K Q Q
18. Desenhe as formas de onda nos pontos Q1, Q2 e Z, para cinco períodos do
relógio, CLK
Q1 Q2 Z
'1' J J
Q Q
CLK
CLK CLK
‘1’
K Q K Q
Q0 Q1 Q2
J Q D Q D Q
CLK
CLK
CLK CLK
K Q Q Q
4
22. Projecte um registo de quatro bits e um registo auxiliar de um bit, com duas
variáveis de controlo, C1 e C0, que tenha o seguinte funcionamento:
C1 C0 Função
0 0 Desloca o registo1 bit para a direita
0 1 Desloca o registo circularmente 1 bit
para a esquerda
1 0 Carrega 4 bits no registo
1 1 Desloca o registo 1 bit para a direita,
colocando o bit menos significativo
no registo auxiliar, e o conteúdo
prévio deste no bit mais significativo
(deslocamento circular pelo registo
auxiliar)
Diga como poderia utilizar este circuito para detectar se um número de quatro
bits é par ou ímpar.
C1 C0 Função
0 0 Faz o reset do registo
0 1 Desloca o registo circularmente 1 bit
para a esquerda
1 0 Desloca o registo circularmente 1 bit
para a direita
1 1 Carrega 4 bits no registo
C1 C0 Função
0 0 Passa o conteúdo de A para B
0 1 Passa o conteúdo de B para A
1 0 Troca conteúdos de A e B
1 1 Carrega em paralelo valores para os
registos
5
25. Dado o logigrama seguinte de uma máquina de estados elabore:
a) o diagrama de estados
b) o diagrama temporal da saída S, desde o momento em que a máquina se
encontra no estado Q2Q1Q0=110 até atingir o estado Q2Q1Q0=100.
Q0 Q1 Q2
D Q D Q D Q
CL K CL K CL K
Q Q Q S
CL K
Q0 Q1
J Q J Q
CL K CL K
X
'1'
K Q K Q
CL K
27. Projecte e sintetize uma máquina sequencial síncrona que recebe em série
quatro bits de dados na linha DIN , validados no flanco ascendente de CLK. No
flanco ascendente de CLK seguinte ignora a linha DIN e coloca na saída, P, a
paridade daqueles quatro bits de dados. Esta paridade deve ser par ou impar
consoante o valor da variável de entrada P_SEL seja '1' ou '0', respectivamente.
No próximo flanco ascendente do relógio volta ao início, recebendo dados pela
linha DIN. A máquina mantém sempre o valor do último bit de paridade
calculado na linha P.
6
28. Projecte e sintetize uma máquina sequencial síncrona que recebe dados em
série pela linha DIN, validados no flanco ascendente de CLK. A máquina deve
analisar a sequência recebida e colocar a linha OUT a '1' sempre que a
sequência '011001' seja detectada, colocando OUT a '0' no próximo flanco
ascendente do relógio (desde que não seja detectada a sequência indicada, a
linha OUT deve estar a '0').
30. Indique como poderia implementar uma RAM de 8K×8 a partir de circuitos
RAM de 8K×4.
31. Projecte um circuito que funcione como uma RAM de 16K×16, utilizando
elementos de memória RAM de 4K×8.
7
33. Considere as funções ( )( )(
f (a, b, c, d ) = a + b + c c + d a ⊕ d e)
( ( ))
g (a, b, c, d ) = a b + c b + d . Desenhe o logigrama de um circuito que as realize
utilizando apenas uma ROM. Indique qual o tipo de ROM necessária à
realização do circuito e qual deve ser o seu conteúdo.
X
+ +
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9
8
Problemas de Arquitectura de Computadores
(Microprocessador 8086)
Para ter acesso a estas rotinas no seu programa deverá incluir a directiva de
compilação:
include rotinas.asm
no início do segmento de programa. O código seguinte é um exemplo de
modelo de programa a ser utilizado quando se pretenda construir um novo
exemplo.
dados segment
dados ends
pilha segment
dw 100h dup(0)
topo label word
pilha ends
programa segment
assume cs:programa, ds:dados,ss:pilha
include rotinas.asm
código do programa
call Terminate
programa ends
end begin
9
Problemas 8086
"The Quick Brown Fox Jumps Over The Lazy Dog 1234567890 DE". O
programa deverá enviar esta sequência de caracteres até que o utilizador tenha
carregado em alguma tecla; nesta altura essa tecla deve ser testada e se
corresponder ao caracter 'x', a sequência de caracteres a enviar para o ecrã
deverá ser modificada, fazendo uma operação de xor de cada caracter da
sequência com a constante "26h". Esta nova sequência deve ser enviada
continuamente até que o utilizador volte a pressionar a tecla 'x', repondo o
funcionamento anterior (envio da sequência sem operação de xor). Deverá
testar se o utilizador introduziu o caracter ESC (27d), que faz com que o
programa termine.
10
contabilizados. Quando for introduzido o caracter ENTER (caracter 13d)
deverá ser enviado para o ecrã o caracter adicional de LINE-FEED (caracter
10d).
Considere o seguinte texto de exemplo:
03 caracteres a
01 caracteres b
00 caracteres c
…..
00 caracteres z
11
O microprocessador envia para o ecrã os limites em que se encontra do número
gerado, na forma:
0 < X < 60
0 < X < 60
30
0 < X < 30
15
15 < X < 30
25
15 < X < 25
20
20 < X < 25
22
Correcto
Nota: Para gerar o número aleatório pode chamar a rotina "GetTime", que
retorna a hora do computador, utilizando como número aleatório o valor dos
segundos.
12
Arquitectura de Computadores
Para realização dos diversos programas pretendidos, tem disponível
algumas rotinas de entrada e saída da caracteres no teclado e
monitor, respectivamente, no ficheiro "rotinas.asm"
;--------------------------------------------------------------------
; ROTINAS DE USO GERAL
;--------------------------------------------------------------------
;--------------------------------------------------------------------
; Rotina que termina programa
;--------------------------------------------------------------------
Terminate:
mov ax,4c00h
int 21h
ret
;--------------------------------------------------------------------
; Rotina que lê um caracter e coloca-o no registo AL (ecoa o
;caracter)
;--------------------------------------------------------------------
ReadChar:
mov ah,01h
int 21h
ret
;--------------------------------------------------------------------
; Rotina que lê um caracter e coloca-o no registo AL (nao ecoa o
;caracter)
;--------------------------------------------------------------------
ReadCharNoecho:
mov ah,07h
int 21h
ret
;--------------------------------------------------------------------
; Rotina que escreve um caracter no ecran. Entrada do caracter em AL
;--------------------------------------------------------------------
WriteChar:
push dx
push ax
mov ah,02h
mov dl,al
int 21h
pop ax
pop dx
ret
;--------------------------------------------------------------------
; Rotina que testa se existe caracter disponível.
; Se houver caracter disponível C=1, caso contrário C=0
;--------------------------------------------------------------------
Keypressed:
push ax
mov ah,0bh
int 21h
rcr al,1
pop ax
ret
;--------------------------------------------------------------------
; Rotina que faz o clear do ecran
;--------------------------------------------------------------------
Clrscr:
push ax
push bx
push cx
push dx
mov ax,0600h
13
mov bh,07h
mov cx,0000h
mov dx,184fh
int 10h
xor ax,ax
call GotoXY
pop dx
pop cx
pop bx
pop ax
ret
;--------------------------------------------------------------------
; Rotina que põe o cursor no ponto definido por (AH,AL). (Início em
;(0,0)).
;--------------------------------------------------------------------
GotoXY:
push ax
push bx
push dx
mov dx,ax
mov bh,00h
mov ah,02h
int 10h
pop dx
pop bx
pop ax
ret
;--------------------------------------------------------------------
; Rotina que escreve uma string (terminada pelo caracter '$') no
;ecran.
; O endereço da string deve estar no registo DX
;--------------------------------------------------------------------
WriteString:
push ax
mov ah,09h
int 21h
pop ax
ret
;--------------------------------------------------------------------
; Rotina que lê o valor do relógio do computador. Retorna a seguinte
;informação:
;
; CH : hora
; CL : minuto
; DH : segundo
; DL : centésimas de segundo
;--------------------------------------------------------------------
GetTime:
push ax
mov ah,2ch
int 21h
pop ax
ret
;--------------------------------------------------------------------
14
Modelo a utilizar na elaboração de novos programas
;
; Declaração do segmento de dados
;
dados segment
;
; Declaração das variáveis do programa
;
dados ends
;
; Declaração do segmento de stack
;
pilha segment
dw 100h dup(?)
topo label word
pilha ends
;
; Declaração do segmento de programa
;
programa segment
include rotinas.asm
;--------------------------------------------------------------------
; Rotinas específicas do programa
;--------------------------------------------------------------------
;--------------------------------------------------------------------
; Código do programa
;--------------------------------------------------------------------
begin:
mov ax,dados
mov ds,ax
mov es,ax
mov ax,pilha
mov ss,ax
lea sp,topo
;--------------------------------------------------------------------
; Código do utilizador
;--------------------------------------------------------------------
;--------------------------------------------------------------------
; Fim do programa
;--------------------------------------------------------------------
call Terminate
programa ends
end begin
15
Arquitectura de Computadores
Trabalhos Laboratoriais
16
Normas para elaboração dos relatórios dos trabalhos de
laboratório da disciplina de Arquitectura de Computadores
Capa do Trabalho
• Instituto Politécnico
• Escola
• Nome da disciplina
• Referência do trabalho
• Nome do docente a que se destina
• Identificação dos alunos (Nome e Número)
Conteúdo
17
Arquitectura de Computadores
1º Trabalho
1. Objectivo
A S
A S Z
0
A Z
1
A A B S
S
B
0 0
0 1
1 0
1 1
A
B
Z
C
D
18
A 0000000011111111
B 0000111100001111
C 0011001100110011
D 0101010101010101
Z
A
S
A B S
B 0 0
0 1
1 0
1 1
A
S A B S
B
0 0
0 1
1 0
1 1
A A B S
S
B 0 0
0 1
1 0
1 1
19
A
S
B A B S Z
0 0
A
0 1
Z 1 0
1 1
B
A D
E
B
Z
C
4.3.1 O tempo necessário desde esse instante até que a saída Z apresente o
valor correcto (tempo de propagação do circuito) é sempre o mesmo qualquer
que seja a entrada a mudar (A, B ou C)? Justifique.
20
A
A 1-> 0 C 0-> 1
D 0-> 1
B 1
G1→ tPLH = 5 ns
G2→ tPLH = 7 ns
5 nS 7 nS
21
Arquitectura de Computadores
2º Trabalho
1. Objectivo
2. Circuito a realizar
a
f b
g
e c
d
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
22
Arquitectura de Computadores
3º Trabalho
1. Objectivo
1. "Latch" RS
S
Q
Q
R
2. "Flip-flops"
S
Q
CLK
Q
R
23
2.2 Indique como modificar o circuito anterior de forma a que possua sinais de
"set" e "reset" assíncronos. Faça esta modificação no circuito e verifique o seu
funcionamento.
24
Arquitectura de Computadores
4º Trabalho
1. Objectivo
2. Contadores
'1' Q0 Q1 Q2 Q3
J Q J Q J Q J Q
CL K CL K CL K CL K
K Q K Q K Q K Q
CLK
2.1.2 Como pode verificar, o número de entradas da porta AND necessária para
obter o sinal de entrada de cada "flip-flop" aumenta linearmente com o número
de "flip-flops" utilizado. Desenhe um circuito alternativo em que tal não
aconteça. Qual a desvantagem deste novo circuito face ao anterior?
25
2.2.1 Monte o circuito da figura seguinte, que é um circuito contador
assíncrono com módulo de contagem igual a 16. Verifique o seu funcionamento
e apresente um diagrama temporal justificativo.
'1' '1' '1' '1'
Q0 Q1 Q2 Q3
J Q J Q J Q J Q
CL K
CL K CL K CL K CL K
K Q K Q K Q K Q
3. Registos de deslocamento
DIN Q0 Q1 Q2 Q3
D Q D Q D Q D Q
CLK CLK CL K CL K
Q Q Q Q
4. Registo multi-funções
26
Pretende-se construir um registo de quatro bits capaz de realizar as
funções seguintes, consoante os sinais de controlo C2, C1 e C0:
C2 C1 C0 Função
0 0 0 "reset" do contador
0 0 1 carregamento em paralelo de uma
palavra de 4 bits
0 1 0 deslocamento à direita
0 1 1 deslocamento à esquerda
1 0 0 deslocamento circular à direita
1 0 1 deslocamento circular à esquerda
1 1 0 não utilizado
1 1 1 não utilizado
27
Arquitectura de Computadores
5º Trabalho
1. Objectivo
28
Arquitectura de Computadores
6º Trabalho
1. Objectivo
29
Arquitectura de Computadores
7º Trabalho
8º Trabalho
30
Formulário da disciplina de Arquitectura de Computadores
A ⋅1 = A a a
0 0
J Q
Qn
A ⋅0 = 0 0
1
1
0 0 1 0
clk
A+A = A 1
1
0
1
1
K CLR Q
A ⋅A = A Função AND
Qn
A+ A =1 a b a.b
Flip-Flop D
0 0 0
A⋅A = 0 0 1 0 D
SET
Q
D
A + A⋅B = A + B 1 0 0 Qn +1
1 1 1 clk
0 0
Leis de DeMorgan Função OR 1 1 CLR
Q
a b a+b
A + B + C + K = A ⋅ B ⋅ C ⋅K 0 0 0
Flip-flop T
A ⋅ B ⋅ C ⋅K = A + B + C + K
0 1 1 SET
T Q n +1 D
T Q
1 0 1
1 1 1 0 Qn clk
1
Função XOR Qn CLR
Q
a b a⊕b
0 0 0 Latch R, S
0 1 1 R Q n +1
S
1 0 1 S Q
1 1 0
0 0
0 1 0
1 0 1
Processador 8086 1 1 Qn R Q
SP ES
BP Apontadores CS Segmentos
SI e índices DS Flags
DI SS FlagsH FlagsL
IP
X X X X OF DF IF TF SF ZF X AF X PF X CF
Overflow
Modos de Endereçamento Direcção
Valor Segmento Interrupções
Imediato Dado Nenhum Trace
Registo Registo Nenhum Sinal
Directo endereço DS Zero
Carry Aux
INDIRECTOS Paridade
Deslocamento Registo Base Registo Índice Segmento Carry
Registo - BX - DS
- BP - SS
- - SI ou DI DS Instruções
Baseado -128 a +127 BX - DS
Indexado
-128 a +127
-128 a +127
BP
-
-
SI ou DI
SS
DS
Flags: ×, 0 ou 1; U indefinida; - Inalterada
Baseado + - BX SI ou DI DS Aritméticas Descrição FLAGS
Indexado - BP SI ou DI SS
Baseado + -128 a +127 BX SI ou DI DS O D I T S Z A P C
Indexado + ADD Destino,origem Destino←destino+origem × - - - × × × × ×
Deslocamento -128 a +127 BP SI ou DI SS
Strings - - SI DS ADC Destino,origem destino←destino+origem+CF × - - - × × × × ×
DI ES SUB Destino,origem Destino←destino-origem × - - - × × × × ×
Instruções SBB Destino,origem destino←destino-origem-CF × - - - × × × × ×
O D I T S Z A P C
DEC Destino destino←destino-1 × - - - × × × × ×
MOV Destino,origem Destino ← origem - - - - - - - - -
NEG Destino destino←0-destino × - - - × × × × *
XCHG Destino,origem Destino ↔ origem - - - - - - - - -
LAHF AH ← FlagsL - - - - - - - - -
CMP Destino Destino-origem × - - - × × × × ×
SAHF FlagsL ← AH - - - - × × × × ×
MUL origem Multiplicação sem sinal × - - - U U U U ×
Se origem é um byte:
AX←AL*origem
IN Acumulador,porto AX(AL) ← porto - - - - - - - - - Se origem é uma word:
DX:AX←AX*origem
OUT Porto,acumulador Porto ← AX(AL) - - - - - - - - - IMUL origem Multiplicação com sinal × - - - U U U U ×
Se origem é um byte:
LEA Destino,origem Destino ← endereço de - - - - - - - - - AX←AL*origem
origem Se origem é uma word:
LDS Destino,origem Destino ← [origem] - - - - - - - - - DX:AX←AX*origem
DS ← [origem+2]
DIV origem Divisão sem sinal × - - - U U U U ×
Se origem é um byte:
LES Destino,origem Destino ← [origem] - - - - - - - - - AL←AX/origem
ES ← [origem+2] AH←resto
XLAT AL ← [BX+AL] - - - - - - - - - Se origem é uma word:
AX←DX:AX/origem
DX←resto
Rotações e deslocamentos Descrição FLAGS IDIV origem Divisão com sinal U - - - U U U U U
Se origem é um byte:
O D I T S Z A P C AL←AX/origem
SAL,SHL Destino,n × - - - - - - - × AH←resto
Se origem é uma word:
0
AX←DX:AX/origem
SAR Destino,n × - - - × × U × × DX←resto
DAA Ajusta AL para dois números × - - - × × × × ×
BCD depois de adição
DAS Ajusta AL para dois números U - - - × × × × ×
SHR Destino,n × - - - - - - - × BCD depois de subtracção
0
AAA Ajusta AL para um número U - - - U U × U ×
RCL Destino,n × - - - - - - - × BCD depois de adição.
Incrementa AH
AAS Ajusta AL para um número U - - - U U × U ×
BCD depois de subtracção.
RCR Destino,n × - - - - - - - × Decrementa AH
AAM Converte o resultado duma U - - - × × U × U
multiplicação em AL para dois
ROL Destino,n × - - - - - - - × números BCD em AH e AL
AAD Antes duma divisão converte os U - - - × × U × U
dois números BCD em AX num
ROR Destino,n × - - - - - - - × número binário em AL. AH=0
CBW Estende o bit de sinal de AL - - - - - - - - -
para AH
Nota: para valores de n CWD Estende o bit de sinal de AX - - - - - - - - -
superiores a 1 deve-se para DX
utilizar o registo CL * 1. Se operando igual a zero, então CF = 0.
Operações Booleanas Descrição FLAGS
Push/Pop Descrição FLAGS
O D I T S Z A P C
O D I T S Z A P C
NOT Destino Destino ← not(destino) - - - - - - - - -
PUSH Origem Coloca origem no topo do stack - - - - - - - - -
AND Destino,origem Destino ← destino⋅origem 0 - - - × × U × 0
POP Destino Lê para destino o topo do stack - - - - - - - - -
OR Destino,origem Destino ← destino+origem 0 - - - × × U × 0
PUSHF Coloca o registo das flags no - - - - - - - - -
topo do stack
XOR Destino,origem Destino ← destino⊕origem 0 - - - × × U × 0
POPF Lê para o registo das flags o x x x x x x x x X
topo do stack
TEST Destino,origem destino⋅origem 0 - - - × × U × 0
O D I T S Z A P C
INT n Invoca interrupção n - - 0 0 - - - - -
Ciclos Descrição FLAGS
INT0 Se OF=1 gera interrupção 4 - - 0 0 - - - - -
O D I T S Z A P C
LOOP destino CX=CX-1; salta se CX=0 - - - - - - - - - IRET Retorna da rotina de serviço de x x x x x X x x x
interrupção
LOOPE/ destino CX=CX-1; salta se CX≠0 e - - - - - - - - -
LOOPZ ZF=1
LOOPNE/ destino CX=CX-1; salta se CX≠0 e - - - - - - - - - Controlo do processador Descrição FLAGS
LOOPNZ ZF=0
O D I T S Z A P C
STC CF←1 - - - - - - - - 1
CLC CF←0 - - - - - - - - 0
Saltos incondicionais Descrição FLAGS
CMC CF←not(CF) - - - - - - - - X
O D I T S Z A P C
STD DF←1 - 1 - - - - - - -
JMP Destino Salta para destino - - - - - - - - -
CLD DF←0 - 0 - - - - - - -
JAE/JNB
destino
destino
Salta se maior
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Arquitectura Interna do 8086
JB/JNAE destino Salta se menor - - - - - - - - -
Registos Gerais ∑
Manipulação de cadeias de Descrição FLAGS AH AL AX 6
bytes/words
O D I T S Z A P C BH BL BX 5
STOSB ES:[DI]←AL, - - - - - - - - - Fila de
Se DF=0, DI←DI+1 CH CL CX Instruções 4
Se DF=1, DI←DI-1
STOSW ES:[DI]←AL,ES:[DI+1] ←AH - - - - - - - - - CS
Se DF=0, DI←DI+2
DH DL DX 3
Se DF=1, DI←DI-2 ES
LODSB AL←ES:[SI], - - - - - - - - -
BP 2
Se DF=0, SI←SI+1 SS
Se DF=1, SI←SI-1 DI Registos de 1
LODSW AL←ES:[DI],AH←ES:[DI+1] - - - - - - - - - DS Segmento
Se DF=0, SI←SI+2 SI
Se DF=1, SI←SI-2 Apontador de
MOVSB ES:[DI]←DS:[SI] - - - - - - - - - SP Instrução (IP)
Se DF=0, DI←DI+1 e SI←SI+1
Se DF=1, DI←DI-1 e SI←SI-1
MOVSW ES:[DI]←DS:[SI], - - - - - - - - -
ES:[DI+1]←DS:[SI+1]
Se DF=0, DI←DI+2 e SI←SI+2
Se DF=1, DI←DI-2 e SI←SI-2
SCASB AL-ES:[DI] x - - - x x x x X Bus de dados interno
Se DF=0, DI←DI+2
Se DF=1, DI←DI-2
SCASW AX-ES:[DI+1,DI] x - - - x x x x X
Se DF=0, DI←DI+2
Se DF=1, DI←DI-2
CMPSB DS:[SI]-ES[DI] x - - - x x x x X
Se DF=0, DI←DI+1 e SI←SI+1
Se DF=1, DI←DI-1 e SI←SI-1
CMPSW DS[SI+1,SI]-ES:[DI+1,DI] x - - - x x x x X
Se DF=0, DI←DI+2 e SI←SI+2 ALU
Se DF=1, DI←DI-2 e SI←SI-2
REP Instrução Executa instrução, CX←CX-1. - - - - - - - - -
Repete se CX≠0.
REPE/
REPZ
Instrução Executa instrução, CX←CX-1. - - - - - - - - - Flags
Repete se CX≠0 e ZF=1.
REPNE/ Instrução Executa instrução, CX←CX-1. - - - - - - - - -
REPNZ Repete se CX≠0 e ZF=0.