Instru es de manipula o de strings
This presentation is the property of its rightful owner.
Sponsored Links
1 / 20

Instruções de manipulação de strings PowerPoint PPT Presentation


  • 62 Views
  • Uploaded on
  • Presentation posted in: General

Instruções de manipulação de strings. Registradores implícitos [E]SIíndice para string fonte [E]DIíndice para string destino ESsegmento do string destino [E]CXcontador AL/AX/EAX valor de busca (destino p/ LODS, fonte p/ STOS) DF0 (auto incremento p/ DI, SI)

Download Presentation

Instruções de manipulação de strings

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Instru es de manipula o de strings

Instruções de manipulação de strings

  • Registradores implícitos

    • [E]SIíndice para string fonte

    • [E]DIíndice para string destino

    • ESsegmento do string destino

    • [E]CXcontador

    • AL/AX/EAX valor de busca (destino p/ LODS, fonte p/ STOS)

    • DF0 (auto incremento p/ DI, SI)

      1 (auto decremento p/ DI, SI)

    • ZFcondição de término para busca e comparação


Instru es primitivas

Instruções Primitivas

  • MOVSmove source string to destination string

  • CMPScompare source string with destination string

  • SCASscan destination string

  • LODSload into AL/AX/EAX from source string

  • STOSstore AL/AX/EAX into destination string

  • INSinput from I/O port (in DX) into destination

  • OUTSoutput from source to I/O port (in DX)


Instru es primitivas1

Instruções primitivas

1. Realiza operação primitiva (sobre um byte, uma palavra ou uma palavra dupla)

2. Atualiza registradores de índice (SI e/ou DI):

2.1 Se DF=0, então incrementa registradores de índice:

2.1.1 de um, se operação for a byte

2.1.2 de dois, se operação for a palavra

2.1.3 de quatro, se a operação for a palavra dupla

2.2 Se DF=1, então decrementa registradores de índice:

2.2.1 de um, se operação for a byte

2.2.2 de dois, se operação for a palavra

2.2.3 de quatro, se a operação for a palavra dupla


Instru es de repeti o

Instruções de repetição

  • REPrepeat

  • REPE / REPZrepeat while equal/repeat while zero

  • REPNE / REPNZrepeat while not equal/repeat while not zero

    1. Se ECX = 0, então não executa a primitiva e encerra a repetição

    2. Se ECX > 0, então:

    2.1 Executa a operação primitiva, atualizando os flags

    2.2 Decrementa ECX, sem afetar os flags

    2.3 Volta para a repetição, de acordo com o prefixo:

    2.3.1 Se for REP, repete incondicionalmente

    2.3.2 Se for REPE/Z, somente repete se ZF=1

    2.3.3 Se for REPNE/NZ, somente repete se ZF=0


Instru es primitivas2

Instruções Primitivas

  • MOVSmove source string to destination string

    • MOVSBmove um byte de DS:SI para ES:DI

    • MOVSWmove uma palavra de DS:SI para ES:DI

    • MOVSDmove uma palavra dupla de DS:SI para ES:DI

  • REP MOVS - movimenta CX elementos

  • REPE MOVS - não faz sentido usar

  • REPNE MOVS - não faz sentido usar


Instru es primitivas3

Instruções Primitivas

  • CMPScompare source string with destination string

    • CMPSBsubtrai byte de mem(DS:SI) – mem(ES:DI)

    • CMPSWsubtrai palavra de mem(DS:SI) – mem(ES:DI)

    • CMPSDsubtrai palavra dupla de mem(DS:SI) – mem(ES:DI)

    • afeta flags de forma idêntica a CMP

  • REP CMPS - não faz sentido usar

  • REPE CMPS - repete enquanto forem iguais

  • REPNE CMPS - repete enquanto forem diferentes

  • Obs: ponteiros param DEPOIS do ponto !!


Instru es primitivas4

Instruções Primitivas

  • SCASscan destination string

    • SCASBsubtrai byte em AL – mem(ES:DI)

    • SCASWsubtrai palavra em AX – mem(ES:DI)

    • SCASDsubtrai palavra dupla em EAX – mem(ES:DI)

    • AL, AX ou EAX contém valor sendo buscado

  • REP SCAS - não faz sentido usar

  • REPE SCAS - repete enquanto for igual

  • REPNE SCAS - repete enquanto for diferente

  • Obs: ponteiro para DEPOIS do ponto !!


Instru es primitivas5

Instruções Primitivas

  • LODSload into AL/AX/EAX from source string

    • LODSBcarrega byte de mem(DS:SI) em AL

    • LODSWcarrega palavra de mem(DS:SI) em AX

    • LODSDcarrega palavra dupla de mem(DS:SI) em EAX

  • REP LODS - não faz sentido usar

    (fica com o último elemento do string no acumulador)

  • REPE LODS - repete até carregar valor diferente de zero

  • REPNE LODS - repete até carregar valor igual a zero


Instru es primitivas6

Instruções Primitivas

  • STOSstore AL/AX/EAX into destination string

    • STOSBarmazena AL no byte de mem (ES:DI)

    • STOSWarmazena AX na palavra de mem (ES:DI)

    • STOSDarmazena EAX na palavra dupla de mem (ES:DI)

  • REP STOS - preenche o string com valor do acumulador

  • REPE STOS - não faz sentido usar

  • REPNE STOS - não faz sentido usar


Instru es primitivas7

Instruções Primitivas

  • INSinput from I/O port (in DX) into destination

    • INSBmove byte da porta especificada em DX para ES:DI

    • INSWmove palavra da porta especificada em DX para ES:DI

    • INSDmove palavra dupla da porta especificada em DX para ES:DI

  • REP INS - lê CX elementos

  • REPE INS - repete até ler valor diferente de zero

  • REPNE INS - repete até ler valor igual a zero


Instru es primitivas8

Instruções Primitivas

  • OUTSoutput from source to I/O port (in DX)

    • OUTSBmove byte de DS:SI para porta de E/S especificada em DX

    • OUTSWmove palavra de DS:SI para porta especificada em DX

    • OUTSDmove palavra dupla de DS:ES para porta especificada em DX

  • REP OUTS - envia CX elementos para a saída

  • REPE OUTS - não faz sentido usar

  • REPNE OUTS - não faz sentido usar


Exemplo 1 copiar mem ria

Exemplo 1 - copiar memória

  • Copiar “Area1” para “Area2”

  • Sejam

    AREA1DB500 DUP (0)

    AREA2DB500 DUP (0)


Exemplo 1 copiar mem ria1

Exemplo 1 - copiar memória

AREA1DB500 DUP (0)

AREA2DB500 DUP (0)

; Supondo DS e ES inicializados adequadamente

LEASI, AREA1

LEA DI, AREA2

MOVCX, 500

CLD

REP MOVSB


Exemplo 1 copiar mem ria2

Exemplo 1 - copiar memória

AREA1DB500 DUP (0)

AREA2DB500 DUP (0)

; Supondo DS e ES inicializados adequadamente

LEASI, AREA1

LEA DI, AREA2

MOVCX, 250; ou então 125

CLD

REP MOVSW; ou MOVSD


Exemplo 2 procurar caractere

Exemplo 2 - procurar caractere

  • Procurar quantas vezes o caractere “A” aparece em Area1

  • Sejam

    AREA1DB500 DUP (0)

    VEZESDW?


Exemplo 2 procurar caractere1

Exemplo 2 - procurar caractere

AREA1DB500 DUP (0)

VEZESDW?

; Supondo DS e ES inicializados adequadamente

LEADI, AREA1

MOVCX,500

CLD

MOV AL, ‘A’

MOVVEZES,0

DENOVO:REPNE SCASB

JNE FIM

INC VEZES

JCXZ FIM; se achou no fim do string

JMP DENOVO

FIM:…….


Exemplo 3 procurar caractere

Exemplo 3 - procurar caractere

  • Procurar a posição (endereço) do primeiro caractere “A” em Area1. Colocar zero no endereço se não encontrar o caractere.

  • Sejam

    AREA1DB500 DUP (0)

    ENDERECODW?


Exemplo 3 procurar caractere1

Exemplo 3 - procurar caractere

AREA1DB500 DUP (0)

ENDERECODW?

; Supondo DS e ES inicializados adequadamente

LEADI, AREA1

MOVCX,500

CLD

MOV AL, ‘A’

MOVENDERECO,0

REPNESCASB

JNEFIM

DECDI

MOV ENDERECO, DI

FIM:…….


Exemplo 4 concatenar strings

Exemplo 4 - concatenar strings

  • Dados dois strings de caracteres, na mesma área, separados por um ou mais espaços (caractere 20H)

  • Concatenar os dois strings, eliminado os espaços em branco

  • Obs: não existe nenhum espaço em branco “dentro” dos strings

  • Sejam:

    AREA1DB 500 DUP (?); área que contém os strings

    END1DW 0; endereço do primeiro espaço encontrado

    END2DW 0; endereço do primeiro caractere do segundo string


Exemplo 4 concatenar strings1

Exemplo 4 - concatenar strings

; Supondo DS e ES inicializados adequadamente

LEADI,AREA1

MOVCX,500

CLD

MOVAL,20H; Código ASCII do caractere espaço

REPNE SCASB

JNEFIM; Não achou nenhum espaço

MOVEND1,DI

DECEND1; Corrige endereço do primeiro espaço

REPESCASB

JEFIM; Só tem espaços até o fim

MOVEND2,DI

DECEND2; Corrige endereço do primeiro caractere

MOVSI,END2; Endereço do último espaço + 1

MOVDI,END1

INCCX; Corrige Contador

REPMOVSB; Concatena segundo string com o primeiro


  • Login