Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Instruções de Comparação
  2. Instrução CMP
  3. Instrução CMPSB
  4. Instrução CMPWB
  5. Instrução SCASB
  6. Instrução SCASW

As instruções de comparação comparam registradores e/ou valores de memória e setam as flags de status acordo com o resultado. Internamente, uma operação de subtração é realizada, porém o resultado é descartado.

As flags alteradas são utilizadas na tomada de decisão quando usadas em conjunto com algumas instruções de Controle de Fluxo.

Mais informações sobre registradores e flags podem ser vistas em Registradores e Flags.

Notação utilizada:
REG Registrador de uso geral
SREG Registrador de segmento
MEM Endereço de memória
IME Valor imediato
; Comentário
O, Z, N, S, P, Cy Flags
<- Atribuição
Flags
a Alterada de acordo com resultado
- Não sofre alteração
0 Sempre zero
1 Sempre um

Com a instrução CMP podemos comparar registradores ou valores em memória. As flags O, S, Z, P , Cy e Ac são alteradas de acordo com o resultado.

Operação:
Resultado <- Operando1 - Operando2
O, S, Z, Ac, P, Cy <- Resultado
Operandos:
REG, MEM
MEM, REG
REG, REG
MEM, IME
REG, IME
F(Flags)
O: a
S: a
Z: a 
Ac:a 
P: a
Cy:a
Ex:
MOV AL, 1
MOV CL, 1
CMP AL, CL  
;Resultado = 0, Z <- 1

Com a instrução CMPSB podemos comparar bytes de forma sequencial em memória. O primeiro operando é recuperado a partir de DS:[SI] e o segundo operando, para comparação, é recuperado a partir de ES:[DI]. A flag D é utilizado para definir a direção em que a comparação é feita.

Operação:
DS:[SI] - ES:[DI]
O, S, Z, Ac, P, Cy alteradas

Flag D = 0 
     SI <- SI + 1
     DI <- DI + 1
Flag D = 1
     SI <- SI - 1
     DI <- DI - 1
Operandos:
REG, MEM
MEM, REG
REG, REG
MEM, IME
REG, IME
F(Flags)
O: a
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:

MOV     AX, CS
MOV     DS, AX      ;Seta regs. de segmento
MOV     ES, AX
LEA     SI, vetor1  ; operando1
LEA     DI, vetor2m ; operando2
MOV     CX, 4       ; qtd bytes
CLD
REPE    CMPSB       ; comparação

; tratamento não igual

loop:
JMP loop

vetor1 db 1, 2, 3, 4
vetor2 db 1, 2, 3, 4

Semelhante à CMPSB, porém, a instrução CMPSW compara words de forma sequencial em memória. O primeiro operando é recuperado a partir de DS:[SI] e o segundo operando, para comparação, é recuperado a partir de ES:[DI]. A flag D é utilizado para definir a direção.

Operação:
DS:[SI] - ES:[DI]
O, S, Z, Ac, P, Cy alteradas

Flag D = 0 
     SI <- SI + 2
     DI <- DI + 2
Flag D = 1
     SI <- SI - 2
     DI <- DI - 2
Operandos:
-
F(Flags)
O: a
S: a
Z: a 
Ac:a
P: a
Cy:a
Ex:
MOV     AX, CS
MOV     DS, AX      ;Seta regs. de segmento
MOV     ES, AX
LEA     SI, vetor1  ; operando1
LEA     DI, vetor2 ; operando2
MOV     CX, 4       ; qtd bytes
CLD
REPE    CMPSW       ; comparação

; tratamento não igual

loop:
JMP loop

vetor1 dw 1, 2, 3, 4
vetor2 dw 1, 2, 3, 4

Com a instrução SCASB podemos comparar bytes em memória, contidos em ES:[SI], com um valor contido no registrador AL. A flag D é utilizado para definir a direção.

Operação
AL - ES:[SI]
O, S, Z, Ac, P, Cy alteradas

Flag D = 0 
     SI <- SI + 1
Flag D = 1
     SI <- SI - 1
Operandos:
-
F(Flags)
O: a
S: a
Z: a 
Ac:a 
P: a
Cy:a
Ex:
MOV     AX, CS
MOV     DS, AX      ;Seta regs. de segmento
MOV     ES, AX
LEA     SI, vetor1  ; operando1
MOV     CX, 4       ; qtd bytes
CLD
MOV     AL, 1
REPE    SCASB       ; comparação

; tratamento não igual

loop:
JMP loop

vetor1 db 1, 1, 1, 1

Semelhante à SCASB, a instrução SCASW compara um words em memória, contidas em ES:[SI], com um valor armazenado no registrador AX. A flag D é utilizado para definir a direção.

Operação
AX - ES:[SI]
O, S, Z, Ac, P, Cy alteradas

Flag D = 0 
     SI <- SI + 2
Flag D = 1
     SI <- SI - 2
Operandos:
-
F(Flags)
O: a
S: a
Z: a 
Ac:a 
P: a
Cy:a
Ex:
MOV     AX, CS
MOV     DS, AX      ;Seta regs. de segmento
MOV     ES, AX
LEA     SI, vetor1  ; operando1
MOV     CX, 4       ; qtd bytes
CLD
MOV     AX, 1
REPE    SCASW       ; comparação

; tratamento não igual

loop:
JMP loop

vetor1 dw 1, 1, 1, 1
  1. 18/02/2025 - revisão 1 - ajustes pontuais
  2. 09/12/2024 - versão inicial