Hirdetés

Új hozzászólás Aktív témák

  • AlapVaj

    csendes tag

    válasz Jester01 #303 üzenetére

    Na jó, kezdek szomorú lenni, hogy nem értek hozzá. Átírtam, viszont valamiért nem ad helyes eredményt, olyat is nem anagrammának ír, ami nem az :( pl alma lama, holott ez anagramma kéne legyen. Nem látom hol a hiba :(

    A lényege, hogy a 2szóban lévő megegyezőket kinullázza, és utána megnézi, hogy egyezik e (tehát mind 0, az 1es azért van ott a szavak végén, hogy jelezze, hogy ne végtelen legye,
    szo1 db 0,0,0,0...0,0,0,1
    ; 1. vizsgálat:

    XOR AX,AX ; Kinullázzuk
    XOR BX,BX ; Kinullázzuk
    XOR SI,SI ; Kinullázzuk

    CIKLUS:

    MOV AH, [szo1 + BX] ;Betöltjök AH-be a szo1 0,1,2,3....39ik bytját
    MOV AL, [szo2 + SI] ;Betöltjök AL-be a szo2 0,1,2,3....39ik bytját

    CMP AH, 1 ; Mindig megnézzük utolsó lépés e ez. Utolsó betű e?
    JE CIKLUS2 ; Elugrunk a másik CIKLUSBA, végeztünk az első lépéssel.

    CMP AH,AL ; Összehasonlítjuk a tartalmat
    JE NULL ; Ha 0, tehát egyenlők
    JNE ROSSZ ; Ha különböznek

    ROSSZ: ; Ha nem egyezik a két betű
    CMP AL, 1
    JE HELYESBIT
    INC SI ; Növeljük a regisztert
    JMP CIKLUS ; Ugrunk a következő karakterre

    HELYESBIT:
    XOR SI,SI ; 0-ra álítjuk, hogy előröl induljon
    INC BX ; Az első szó második lépésére
    JMP CIKLUS

    NULL:
    MOV szo1[BX], '0' ; Betesszük a szo1 BX-ben tárolt helyére a '0' értéket
    MOV szo2[SI], '0' ; Betesszük a szo2 CX-ben tárolt helyére a '0' értéket
    INC BX ; Novelunk
    INC SI ; Novelunk
    JMP CIKLUS

    ;2. vizsgálat:

    XOR AX,AX ; Kinullázzuk
    XOR BX,BX ; Kinullázzuk
    XOR SI,SI ; Kinullázzuk

    CIKLUS2:
    MOV AH, [szo2 + BX] ;Betöltjök AH-be a szo1 0,1,2,3....39ik bytját
    MOV AL, [szo1 + SI] ;Betöltjök AL-be a szo2 0,1,2,3....39ik bytját

    CMP AH, 1 ; Mindig megnézzük utolsó lépés e ez.
    JE DONTES ; Elugrunk a másik CIKLUSBA

    CMP AH,AL ; Összehasonlítjuk a tartalmat
    JE NULL2 ; Ha 0, tehát egyenlők
    JNE ROSSZ2 ; Ha különböznek

    ROSSZ2: ; Ha nem egyezik a két betű
    CMP AL, 1
    JE HELYESBIT2
    INC SI ; Növeljük a regisztert
    JMP CIKLUS2 ; Ugrunk a következő karakterre

    HELYESBIT2:
    XOR SI,SI ; 0-ra álítjuk, hogy előröl induljon
    INC BX ; Az első szó második lépésére
    JMP CIKLUS2

    NULL2:
    MOV szo2[BX], '0' ; Betesszük a szo1 BX-ben tárolt helyére a '0' értéket
    MOV szo1[SI], '0' ; Betesszük a szo2 CX-ben tárolt helyére a '0' értéket
    INC BX ; Novelunk
    INC SI ; Novelunk
    JMP CIKLUS2

    ;3. Lépés:

    DONTES:
    MOV SI, OFFSET szo1 ; Kialakított szó
    MOV DI, OFFSET szo2 ; Másik kialakított szó
    CMPSB
    JE ANAGRAIGEN
    JNE ANAGRANEM

    ;------------------------------------------------------
    ; Végső kiírások (eredmény):

    ANAGRANEM:

    CALL ujsor
    MOV SI, offset szoveg6 ; Nem Anagramma
    CALL kiiro

    RET ; Visszatérés az op. rendszerhez

    ANAGRAIGEN:

    CALL ujsor
    MOV SI, offset szoveg5 ; Anagramma
    CALL kiiro

    RET ; Visszatérés az op. rendszerhez

Új hozzászólás Aktív témák