Instruciuni de prelucrare la nivel de bit
This presentation is the property of its rightful owner.
Sponsored Links
1 / 33

Instrucţiuni de prelucrare la nivel de bit - instrucţiuni logice (NOT, AND, OR, XOR, TEST etc.); PowerPoint PPT Presentation


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

Instrucţiuni de prelucrare la nivel de bit - instrucţiuni logice (NOT, AND, OR, XOR, TEST etc.); - instrucţiuni de deplasare (SHL, SAL, SHR, SAR etc.); - instrucţiuni de rotire (ROL, ROR, RCL, RCR); Instrucţiuni logice OF şi CF  0; AF - nedefinit;

Download Presentation

Instrucţiuni de prelucrare la nivel de bit - instrucţiuni logice (NOT, AND, OR, XOR, TEST etc.);

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


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

Instruciuni de prelucrare la nivel de bit

- instruciuni logice (NOT, AND, OR, XOR, TEST etc.);

- instruciuni de deplasare (SHL, SAL, SHR, SAR etc.);

- instruciuni de rotire (ROL, ROR, RCL, RCR);

Instruciuni logice

OF i CF 0;

AF - nedefinit;

SF, ZF, PF - sunt poziionai conform rezultatului instruciunii.

NOT <dest>Nu afecteaz nici un indicator.

AND <dest>, <sursa>(dest) (dest) and (sursa)

OR <dest>, <sursa>(dest) (dest) or (sursa)

XOR <dest>, <sursa>(dest) (dest) xor (sursa)

TEST <dest>, <sursa>

Poziioneaz indicatorii pentru operaia

(dest) and (sursa), fr a modifica nici un operand.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

  • Instruciuni de testare i modificare de bit.

    Bitul testat este specificat prin deplasamentul su (al doilea operand, dat de 8 bii sau reg_16/32) fa de bitul cel mai puin semnificativ al destinaiei (reg/mem_6/32). Ceilali indicatori sunt nedefinii.

    BT<dest>, <poziie>(Bit Test)

    (CF) Bit (dest, poziie)

    BTS<dest>, <poziie>(Bit Test and Set)

    (CF) Bit (dest, poziie),

    Bit (dest, poziie) 1

    BTR<dest>, <poziie>(Bit Test and Reset)

    (CF) Bit (dest, poziie),

    Bit (dest, poziie) 0

    BTC<dest>, <poziie>(Bit Test and Complement)

    (CF) Bit (dest, poziie),

    Bit (dest, poziie) Not (Bit (dest, poziie))


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

  • Instruciuni de scanare pe bit.

    Aceste instruciuni permit scanarea biilor din cel de-al doilea operand direct, ncepnd cu bitul mai puin semnificativ (forward) sau invers (reverse), pentru a determina primul bit egal cu 1. Dac toi biii sunt zero ZF=1, altfel ZF=0, i registrul destinaie va reine indexul primului bit 1 din operandul surs (reg/mem de aceeai dimensiune cu reg. Dest.). Modif. ZF, iar toi ceilali sunt nedefinii.

    - scanare direct:

    BSF<dest>, <sursa>(Bit Scan Forward)

    - scanare invers:

    BSR<dest>, <sursa>(Bit Scan Reverse)

  • Instruciuni de setare condiionat.

    Pun octetul pe zero sau unu, n funcie de una din cele 16 condiii definite de indicatori. Operandul destinaie poate fi reg/mem. Aceste instruciuni sunt folosite pentru implementarea expresiilor booleene, din limbajele de nivel nalt.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

SETcond<dest>(SET byte on condition)

ifcondthen(dest) 1

else(dest) 0

SETE / SETZ ZF = 1

SETNE / SETNZ ZF = 0

SETL / SETNGE SF <> OF, valori cu semn

SETLE / SETNG SF <> OF sau ZF = 1, valori cu semn

SETNL / SETGE SF = OF, valori cu semn

SETNLE / SETG SF = OF i ZF = 0, valori cu semn

SETB / SETNAE / SETC CF = 1, valori fr semn

SETBE / SETNA CF = 1 sau ZF = 1,fr semn

SETNB / SETAE / SETNC CF = 0, valori fr semn

SETNBE / SETACF = 0 i ZF = 0,fr semn

SETO / SETNOOF = 1 / respectiv OF = 0

SETP / SETPEPF = 1, adic paritate par


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

SETNP / SETPOPF = 0, adic paritate impar

SETS / SETNSSF = 1 / respectiv SF = 0

  • Instruciuni de deplasare

    Deplasrile pot fi aritmetice sau logice. Se poate deplasa operandul destinaie cu pn la 31 de bii, corespunztor operandului contor, codificat n instruciune (sunt luai n considerare numai ultimii 5 bii ai acestuia).

    OF = este nedefinit ntr-o deplasare pe mai muli bii;

    = este poziionat pt. deplasare de un bit;

    CF = ultimul bit deplasat n afara operandului destinaie;

    AF = nedefinit;

    SF, ZF, PF = modificai conform rezultatului.

    SHL / SAL <dest>, <contor> (SHift logical / Arithmetic Left)

    Poziiile eliberate devin zero; ntre cele dou mnemonici nu exist nici o deosebire. Bitul cel mai semnificativ se deplaseaz n CF.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

SHR<dest>, <contor>(SHift logical Right)

SAR<dest>, <contor>(Shift Arithmetic Right)

Bitul cel mai semnificativ i pstreaz vechea valoare, dar este i deplasat spre dreapta (extensie de semn), ceea ce nseamn c nu poate s apar depire (schimbarea de semn a rezultatului) i (OF)=0 la o deplasare de 1 bit.

Trebuie menionat c SAR nu furnizeaz acelai rezultat ca instruciunea IDIV, pentru aceeai operanzi, dac dempritul este negativ, i sunt deplasai (SAR) n afara operandului bii egali cu 1. De exemplu -5 deplasat la dreapta (SAR), cu un bit va furniza -3, n timp ce mprirea ntreag (IDIV) va furniza valoarea -2: (-5) = (11111011) (11111101) = (-3)

Diferena dintre cele dou instruciuni este c IDIV trunchiaz toate cturile ctre zero, n timp ce SAR trunchiaz numerele pozitive ctre zero, iar pe cele negative ctre infinit negativ.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

La 386/486 pot fi realizate instruciuni de deplasare dubl, pe cuvnt sau dublu cuvnt. Operandul destinaie poate fi reg/ mem, iar sursa reg. general. Rezultatul nlocuiete operandul destinaie, iar contorul numrului de bii deplasai este specificat de registrul CL, sau ca o valoare imediat de 8 bii. Indicatorii sunt poziionai la fel ca la deplasrile anterioare.

SHLD<dest>, <sursa>, <contor>(SHift Left Double)

CF . . . . . . Dest

. . . . . .Sursa

SHRD<dest>, <sursa>, <contor>(SHift Right Double)

Dest . . . CF

Surs . . .


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

Registrul surs nu se modific. Instruciunea este util atunci cnd se mpacheteaz date din mai multe surse diferite.

  • Instruciuni de rotire

    n cazul rotaiilor, biii deplasai n afara operandului nu sunt pierdui, ca n cazul deplasrilor, ci sunt rotii (circulai) napoi ctre cellalt capt al operandului. ncepnd de la procesoarele 286 contorul, chiar dac este diferit de 1, el poate fi specificat n instruciune, ca dat imediat.

    Rotaiile modific numai CF i OF:

    CF = ultimul bit rotit n afara operandului;

    OF = nedefinit pentru rotaii multibit;

    = 1 sau 0, pentru rotaie doar de 1 bit, dup cum s-a modificat sau nu bitul de semn al operandului.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

ROL<dest>, <contor>(ROtate Left)

CFBn . . . . . . B0Bn

ROR<dest>, <contor>(ROtate Right)

B0CFBn . . . . . . B0Bn

RCL<dest>, <contor>(Rotate through Carry Left)

B0 CF Bn . . . . . . B0CF

RCR<dest>, <contor>(ROtate through Carry Right)

B0 CF Bn . . . . . . B0CF

1) nmulirea cu 20 a uni numr din registrul AX:

; 20 = 16 + 4 = 24 + 22

; deci 2 deplasri la stnga, se salveaz rezultatul,

movcl, 2; care reprezint * 4, i nc dou deplasri

shlax, cl

movbx, ax; se salveaz *4 n (BX)


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

movcl, 2; contorul pentru nc dou deplasri (*16)

shlax, cl; care realizeaz * 16, i se adun cele dou

addax, bx; rezultate pariale

2) mprirea la 1024 a valorii din registrul AX:

movcl, 2; 1024 = 210 = 28 * 22

sarah, cl; dup 8 deplasri la dreapta AL se pierde

xchg ah, al; (sau mov ah, al), e suficient s deplasm AH la

cbw; dreapta cu 2, i apoi s-i facem extensia de semn

3) mprirea unui numr de 32 bii (64) la o putere a lui 2, de exemplu la 64 = 26:

mem_32dd50000;

. . . . .; trebuie deplasat numrul la dr. cu 6 bii

movcx, 6; contorul numrului de deplasri

iar:sarword ptr mem_32[2], 1; bitul 17 (CF)

rcrwordptr mem_32[0], 1; (CF) bitul 16

loop iar


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

4) Determinarea numrului de bii egali cu 1 dintr-o variabil.

.model small

.stack100h

.data

lung_varequ8

variabiladwlung_vardup (0acfh)

nr_unitatidb?

.code

assume cs: @code, ds: @data

start:movax, @data

movds, ax

movsi, 0; indexul curent al cuvintelor din variabila

movdl, lung_var; contor numr de cuvinte

movbl, 0; contor numr de uniti gsite

bucla2: movcx, 16; contorul de bii pentru un cuvnt


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

movax, variabila[si] ; se citete cuvntul curent

bucla1:

rclax, 1; o rotaie pentru a deplasa un bit

adcbl, 0; se contorizeaz numrul de uniti

loopbucla1; pentru un cuvnt

addsi, type variabila ; se actualizeaz indexul

decdl; se testeaz dac mai sunt cuvinte

jnzbucla2; dac da se reia citirea cuvintelor

movnr_unitati, bl; dac nu se depune rezultatul

movax, 4C00h; revenire DOS

int21h

end

4a). Aceeai problem poate fi rezolvat utiliznd instruciunile BSF i BTR, astfel:


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

movcx, lung_var; contor dimensiune variabil

movbl, 0; contor uniti

movsi, 0; index cuvinte

bucla:movax, variabila[si]

scanare:

bsfdx, ax; determin primul bit 1 (indexul n DX)

jzgata_cuv; dac ZF=0, toi biii sunt 0

btrax, dx; transfer 1 din AX, din poziia DX n CF,

adcbl, 0; iar bitul =0, sau inc bl, numr unitile

jmpscanare; se reia scanarea cuvntului curent

gata_cuv:

addsi, 2; indexul cuvntului urmtor

loop bucla; decrementare contor numr de cuv. variabil

; dac nu s-a terminat variabila ia cuv. urmtor


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

5) Tiprirea coninutului registrului DX, n format octal:

tip_carprocfar

; procedura tiprete caracterul al crui cod ASCII

; l primete n registrul AL

pushdx; se salveaz registrul de lucru DX

movdl, al; se apeleaz funcia 2 din DOS care

movah, 2; tiprete caracterul al crui cod

int21h; ASCII se transmite n registrul DL

popdx; se reface registrul salvat

ret

tip_carendp

tip_octalprocfar

; tiprete n octal valoarea, fr semn transmis n DX

pushcx; se salveaz registrele de lucru

pushax


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

; prima cifr de tiprit este doar de 1 bit

roldx, 1; care este rotit pe ultimul bit

moval, dl; i dus n registrul AL

andal, 1; se terg ceilali bii

addal, 30h; este convertit la codul ASCII

calltip_car; i se tiprete

; urmtoarele 5 cifre sunt de cte 3 bii

movcx, 5; contor numr de cifre de tiprit

octal1:pushcx; se salveaz contorul n stiv

movcl, 3; contor numr de rotiri la stnga

roldx, cl; cifra este rotit pe ultimii 3 bii

moval, dl; i adus n AL

andal, 7; sunt teri ceilali bii

addal, 30h; i convertit la codul ASCII

calltip_car; tiprirea cifrei


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

popcx; se citete valoarea contorului de cifre

loopoctal1

popax; se refac registrele salvate n stiv

popcx

ret

tip_octalendp


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

  • Instruciuni de operare pe iruri

    Exist cinci operaii de baz ce opereaz pe iruride lungime de pn la un segment (64K la 286, respectiv 4G la 386/486), i permit: mutare, comparare de iruri, scanarea unui ir pentru o valoare i transfer la/de la acumulator. Aceste operaii de baz pot fi precedate de un prefix special de un octet care are ca efect repetarea instruciunii prin hardware. Repetiia se poate termina printr-o varietate de condiii, iar o operaie repetat poate fi ntrerupt sau suspendat.

    O instruciune pe ir poate avea un operand surs, un operand destinaie sau pe amndoi. irul surs este n (DS) sau ntr-un alt segment, dac este prefixat peste aceast presupunere. irul destinaie se afl, ntotdeauna, n segmentul dat de registrul (ES).

    SI este ca offset pentru elementului curent al irului surs, iar DI este offset pentru irul destinaie. Instruciunile pe ir actualizeaz automat SI i/sau DI. DF determin dac registrele index sunt auto-incrementate-decrementate (DF=0-1), iar pas de actualizare depinde de tipul irurilor: 1 - octet, 2 - cuvnt, 4 - dublu cuvnt.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

Dac este prezent un prefix de repetare reg. CX este decrementat la fiecare repetiie a instruciunii pe ir; repetarea va lua sfrit cnd CX=0, sau pentru unele prefixe i n funcie de ZF.

Sunt cinci mnemonici pentru dou forme de prefix octet, care controleaz repetarea unei instruciuni pe ir(uri). Prefixele de repetare nu afecteaz indicatorii.

REP / REPE / REPZ / REPNE / REPNZ

REP - REPeat - este utilizat mpreun cu MOVS- STOS, "repet ct timp nu este sfritul irului, adic (CX<>0)";

REPE / REPZ - REPeat while Equal / Zero - care opereaz la fel i au fizic acelai prefix octet ca REP. Sunt utilizate pentru CMPS i SCAS, i necesit, n plus fa de condiia anterioar, ca ZF s fie setat nainte de efectuarea urmtoarei repetiii;

REPNE / REPNZ - REPeat while Not Equal / Zero - este asemntor cu cele anterioare, cu deosebirea c ZF trebuie pus pe 0, sau repetiia se termin.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

MOVS <sir_dest>, <sir_sursa> (MOVe data from String to string)

MOVSB / MOVSW / MOVSD

Se transfer un element (octet/cuvnt/dublu cuvnt) de la surs (SI) la destinaie (DI), i actualizeaz SI/DI

Utilizat mpreun cu prefixul REP realizeaz un transfer de bloc memorie-memorie.

CMPS<sir_dest>, <sir_sursa>(COMPare String operands)

CMPSB / CMPSW / CMPSD

Aceast instruciune scade operandul destinaie (referit de DI) din cel surs (referit de SI), modific indicatorii de stare, dar nu altereaz nici unul dintre operanzi, dup care actualizeaz SI/DI.

Trebuie reinut c spre deosebire de instr. CMP care scade sursa din destinaie, CMPS realizeaz scderea invers: surs - destinaie.

Dac CMPS are prefixul REPE sau REPZ operaia este interpretat "compar ct timp nu este sfrit irul (CX<>0) i irurile sunt egale (ZF=1)"; determina prima pereche de elemente diferite.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

Dac CMPS este precedat de REPNE/REPNZ "compar ct timp nu este sfrit de ir (CX<>0), i elementele irurilor nu sunt egale (ZF=0)"; determina prima pereche de elemente egale.

SCAS<sir_dest>(SCAn String data)

SCASB / SCASW / SCASD

Instruciunea scade elem. ir dest. (octet/ cuvnt/ dublu cuvnt) adresat de DI, din AL, AX sau EAX, i actualizeaz indicatorii, dar fr a modifica irul destinaie sau acumulatorul.

Dac SCAS este prefixat de REPE/REPZ "scaneaz ct timp nu este sfritul irului (CX<>0) i valoarea scanat este egal cu elementele irului (ZF=1)"; determina abaterea fa de o valoare.

Dac SCAS este prefixat de REPNE/REPNZ "scaneaz ct timp nu este sfritul irului (CX<>0) i valoarea scanat este diferit de elementele irului (ZF=0)"; localizeaz o valoare ntr-un ir.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

LODS<sir_sursa>(LOaD String operand)

LODSB / LODSW / LODSD

Transfer elementul irului surs adresat de SI, n AL, AX sau EAX, i actualizeaz SI. Instruciunea se utilizeaz n bucle soft.

STOS<sir_dest>(STOre String data)

STOSB / STOSW / STOSD

Transfer un element din acumulator (AL, AX, EAX) n irul destinaie, i actualizeaz DI, pentru a referi urmtorul element.

Instruciunea poate fi precedat de prefixul REP, i astfel se poate iniializa un ir cu o constant.


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

1) Copierea unui ir de octei dintr-o zon de memorie ntr-alta.

date_sirsegmentwordpublic'data'

sir1db1000 dup (7,0f0h); irul surs

lung1equ$ - sir; lungimea irului surs

sir2db1000 dup (2 dup (?)); rezervare pt. ir dest.

ptr_sir1ddsir1; pointer sir1

ptr_sir2ddsir2; pointer sir2

date_sirends

codsegmentwordpublic'code'

assume cs:cod, ds:date_sir, es:date_sir

start:movax, date_sir; iniializare registru segment DS

movds, ax; i apoi adresele celor dou iruri

moves, ax; sau:lesdi,ptr_sir2

leadi, sir2;ldssi,ptr_sir1

leasi, sir1


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

movcx, lung1; contorul transferului = lungimea sursei

cld; direcia de parcurgere a irului (df=0)

repeta:

lodsb

stosb; sau: movs sir2,sir1 , sau movsb

looprepeta; sau:repmovsb

movax, 4c00h; revenire DOS

int21h

codends

endstart


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

2) Copierea informaiei dintr-un buffer din memorie n memoria ecran. n modul text pentru fiecare caracter de pe ecran se rezerv doi octei: unul reprezint atributele de afiare (afiare continu / intermitent - 1 bit, culoare fond - 3 bii, culoare caracter - 4 bii), iar cel de-al doilea este codul ASCII al caracterului afiat.

.model small

.data

mem_ecrandd0B8000000h; adresa memoriei ecran

dimensiuneequ2000

buffer dw dimensiune dup (3a33h); se va afia acelai caracter

ptr_bufddbuffer

.code

start:movax, @data; iniializare DS

movds, ax

movah, 0; selecie mod de lucru

moval, 0; alfanumeric 40*25 alb/negru, pt. 80*25 al=2


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

int10h

lesdi, mem_ecran

ldssi, ptr_buf

movcx, dimensiune

cld; direcia de parcurgere

repmovsw; transfer buffer n mem_ecran

movax, 4c00h; revenire DOS

int21h

.stack10h

endstart


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

3) Determinarea poziiei unui anumit caracter (sau a unui ir de caractere) ntr-un fiier surs de pe disc.

.model small

.stack10h

.data

carequ'A; caracterul de identificat (sau irul)

lung equ 2048; dimensiunea maxim a fiierului-4 sectoare

bufferdb lung dup (?); spaiu de mem. pentru fiier

nume_fis db 'fisier.asm', 0 ; nume fii.- ASCIIZ, adic dup

; numele poate fi precedat i de calea de acces

pozitiedw?; poziia caracterului n fiier

nr_logicdw? ; numrul logic atribuit fiierului

contordw?; numrul efectiv de caractere citite

mes_lipsadb'nu exista fisier cu acest nume$'

mes_err_citdb'eroare de citire de pe disc$'

mes_car_lipsadb'caracterul cautat nu este in fisier$'


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

.code

start:movax, @data; iniializare DS

movds, ax

movah, 3dh; apel DOS pentru deschidere de fiier

moval, 0; n modul "citete" (1-scrie,2-citire/scriere)

leadx, nume_fis; adresa numelui fiierului

int21h; apel funcie 'deschide fiier'

jclipsa_fis

movnr_logic, ax; se depune numrul sectorului

movbx, ax; i n BX, pentru funcia de citire

movcx, lung; contor numr maxim de caractere citite

leadx, buffer; adresa unde se vor depune caracterele

movah, 3fh; funcia de citire din fiier

int21h

jcerr_cit; dac a aprut eroare al citire


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

movcontor, ax; la 'contor' se depune numrul de car.

movcx, ax; contor de cutare 'car'

push ds; se ncarc n ES adresa de segment

popes; a 'buffer'-ului

leadi, buffer; i n registrul (DI) offsetul acestuia

moval, car; caracterul de cutat

cld; stabilire direcie de parcurgere, (DF)=0

repnescasb; continu scanarea pn-l gsete

jegasit; dac nu s-a gsit nu se face saltul

leadx, mes_car_lipsa; i se tiprete mesajul

movah, 9; mesajul: 'caracterul cautat nu este in fisier'

int21h

jmpgata

gasit:decdi; poziia caracterului cutat, (DI)-1

movpozitie, di; deoarece (DI) a fost actualizat dup


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

jmpgata; scanare

lipsa_fis:

leadx, mes_lipsa; nu s-a gsit fiierul cu

movah, 9; numele specificat

int21h

jmpgata

err_cit:

leadx, mes_err_cit; eroare la citirea fiierului

movah, 9

int21h

gata:movah, 3eh; nchiderea fiierului deschis

movbx, nr_logic

int21h

movax, 4c00h; revenire DOS

int21h

endstart


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

Determinarea poziiei unui ir de caractere ntr-un fiier:

sir_cardb'asamblare'

lung_sirdw$-sir_car

ptr_sirddsir_car

ptr_bufddbuffer

pozitie dw ?; poziia irului de caractere

. . . . . . . . . . . . . . . . . . .

lesdi, ptr_buf

ldssi, ptr_sir

movcx, contor; dimensiune buffer

subcx, lung_sir; cutarea se va face ncepnd de la 0

inccx; pn la (contor) - (lung_sir)

cld; direcia de parcurgere (DF=0)

reia:push si; se salveaz adresa irului cutat

push di; se salveaz adresa irului n care se cut


Instruc iuni de prelucrare la nivel de bit instruc iuni logice not and or xor test etc

push cx; se salveaz contorul numrului maxim de cutri

movcx, lung_sir; contorul de comparaii

repe cmps buffer, sir_car; se compar ct timp sunt egale

popcx; reface resurse salvate n stiv: contorul

popdi; i adrese iruri: destinaie - irul n care se

popsi ; caut, surs (sub)irul care se caut

jegasit; salt dac s-a gsit sir_car n buffer

incdi; cutarea se va relua de la urmtorul caracter

loopreia; din buffer, dac (contor) <> 0

; -> irul de caractere nu este n fiierul dat (respectiv n buffer)

jmpnu_gasit

gasit:movpozitie, di; valoarea salvat pentru (DI)

. . . . . . . . . . . . . . . . . . .

nu_gasit:; tiprire mesaj: Nu s-a gasit sirul de caractere


  • Login