Advertisement
Guest User

Untitled

a guest
Nov 4th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Majer Imre
  2. ;QNUGS9
  3.  
  4. ;Adott karaktersorozat (alsztring) megkeresése belső memóriában tárolt sztringben. Bemenet: sztring
  5. ;kezdőcíme, alsztring kezdőcíme (mutatók). Kimenet: az először megtalált egyezés kezdőcíme a sztringben
  6. ;(mutató). Amennyiben a keresett karaktersorozat nem fordul elő, a mutató a sztring végét jelző 0-ra mutat.
  7.  
  8. ORG 10h           ;erre a kezdőcímre rakja be azt az értéket amit a következő sorban beadunk
  9. STR: DB "Majer"   ;a string ami a 0x10 kezdőcímen található
  10. ORG 18h           ;erre a kezdőcímre rakja be azt az értéket amit a következő sorban beadunk             
  11. ALSTR: DB "je"    ;az alstring ami a 0x18 kezdőcímen található
  12. ORG 20h
  13. LJMP MAIN
  14.  
  15. ;a RUTIN függvény kap 2 bementi paramétert, 2 címet, sztring és alsztring kezdőcímeit. Kimenet at először megtalált
  16. ;egyezés kezdőcíme az R6 regiszterben. Amennyiben az alsztring nem fordul elő, az R6 regiszter értéke a sztring végére mutat.
  17.  
  18. RUTIN:  MOV R2,#0
  19.         MOV DPTR, #ALSTR        ;Sztringhosszfigyelő ->R2-ben tárolja az alsztring hosszát
  20.         MOV R6, #0              ;R6=0, kesobb kelleni fog (itt tárolom az egyezés sztringben kévő kezdőcímét)
  21.        
  22. JUMP1:  MOV A, #0
  23.         MOVC A, @A + DPTR       ;Betöltöm az A-ba azt az értéket amire a Datapointer mutat (#ALSTR ami az alsztring kezdőcíme)
  24.         JZ LOOP                 ;NINCS MEGADVA ALSZTRING, program vége, LOOP-hoz ugrás, R6=0
  25.         INC DPTR
  26.         INC R2                  ;Addig növelem az R2 értékét amíg nem érkezek a sztring vége karakterhez (\0)
  27.         JNZ JUMP1
  28.  
  29. JUMP2:  MOV A, R2
  30.         MOV R4, A               ;R4-be elmentem az alsztring hosszát, mert ha "elkezd" egy egyezést találni, de mégsem lesz az, akk elrontja
  31.         DEC R2                  ;R2 értékét (alsztring hossza) egyel csökkentem, ennyiszer kell majd a sztringben egyezést találni
  32.         MOV DPTR, #STR          ;DPTR a sztringre mutat
  33.         MOV R3, #ALSTR          ;R3 az alsztringre mutat
  34.        
  35. JUMP3:  ;ÖSSZEHASONLÍTÁS DPTR ÉS R3
  36.         MOV A, #0
  37.         MOVC A, @A + DPTR
  38.         SUBB A,R3               ;kivonom a ket karaktert egymásból, ha 0 akkor egyeznek, ha nem 0, akkor különböznek
  39.         JNZ JUMP5               ;ha nem egyezik akkor vizsgáljuk hogy vége-e a sztringnek, és ha nem, növelem DPTR értékét, majd újra vizsgálom
  40.        
  41.         MOV A,R3                ;R3-at betöltöm A-ba
  42.         JNZ JUMP4               ;ha nem nulla(ami azt jelenti, hogy már találtam egyező karaktert) akkor elugrok, mert nekem az első karakter címe kell
  43.        
  44.        
  45.         ;------------------------EZ NEM TETSZIK NEKI ---------------------------------
  46.        
  47.         MOVC R6,#DPTR           ;ha majd egyezés lesz, innen fogom tudni a kezdőcímet
  48.        
  49.         ;-----------------------------------------------------------------------------
  50.  
  51. JUMP4:  INC DPTR                ;DPTR növelése -> sztring következő karakter kiválasztása
  52.         INC R3                  ;R3 növelése -> alsztring következő karater kiválasztása
  53.         DJNZ R7,JUMP3           ;az alsztring vizsgálandó hosszát eggyel csökkentem, és ha van még karakter, vizsgálom újra
  54.        
  55.         ;HA IDE ELJUT, AKKOR MEGVAN AZ AlSZTRING A SZTRINGBEN, ÉS R6-BAN PEDIG AZ EGYEZÉS KEZDŐCÍME
  56.         LJMP LOOP      
  57.        
  58. JUMP5:  MOV A, #0
  59.         MOVC A, @A + DPTR       ;Betöltöm az A-ba azt az értéket amire a DPTR mutat (#STR ami az alsztring kezdőcíme)
  60.         MOV R6, #A
  61.         LJMP JUMP6              ;Ha NULLA az érték, ahova a DPTR mutat a sztringben, akkor vége a sztringnek, nincs további keresés R6 a sztring végére mutat
  62.         MOV A, #0
  63.         MOV R6, A               ;R6-ot ki kell nullázni, mert lehet hogy már beleraktam egy kezdőcímet, és mégsem volt egyezés
  64.         INC DPTR                ;a sztring következő karakterére mutatok, mert a jelenlegi nem egyezett
  65.         MOV A,R4                ;ide mentetem el az alsztring hosszát, ezt most visszaállítom
  66.         MOV R2,A                ;R2-be visszaállítom az alsztring hosszát(mert lehet hogy már korábban elrontottam)
  67.         LJMP JUMP3              ;JUMP3-ra ugrás, újbóli összehasonlítás
  68.        
  69.  
  70.  
  71. MAIN: LCALL RUTIN
  72.  
  73. LOOP: LJMP LOOP
  74. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement